AndEngine----CardinalSplineMoveModifierExample之模仿画<W>

来源:互联网 发布:深入浅出数据分析代码 编辑:程序博客网 时间:2024/06/13 07:36

昨天看了下AndEngine里面关于CardinalSplineMoveModifierExample这块的代码,就模仿着写了一个“W”形状。

具体实现如下:

/** * 模仿着画出一个W */public class CardinalSplineMoveModifierMy extends SimpleBaseGameActivity {private int mCameraWidth = 0;private int mCameraHeight = 0;private static final int COUNT_RECTANGLE = 200;private float[] mControlPoint_1_XS = new float[4];private float[] mControlPoint_2_XS;private float[] mControlPoint_YS;@Overridepublic EngineOptions onCreateEngineOptions() {initCameraSize();Camera camera = new Camera(0, 0, mCameraWidth, mCameraHeight);return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,new RatioResolutionPolicy(mCameraWidth, mCameraHeight), camera);}private void initCameraSize() {mCameraWidth = getResources().getDisplayMetrics().widthPixels;mCameraHeight = getResources().getDisplayMetrics().heightPixels;}@Overrideprotected void onCreateResources() {// Do nothingsinitControlPointCoordinate();}private void initControlPointCoordinate() {float[] controlPoint_1 = { 4 * (mCameraWidth / 8),3 * (mCameraWidth / 8), 2 * (mCameraWidth / 8),1 * (mCameraWidth / 8) };mControlPoint_1_XS = controlPoint_1;float[] controlPoint_2 = { 4 * (mCameraWidth / 8),5 * (mCameraWidth / 8), 6 * (mCameraWidth / 8),7 * (mCameraWidth / 8) };mControlPoint_2_XS = controlPoint_2;float[] controlPoint_Y = { 4 * (mCameraHeight / 8),6 * (mCameraHeight / 8), 4 * (mCameraHeight / 8),2 * (mCameraHeight / 8) };mControlPoint_YS = controlPoint_Y;}private static final float DURATION = 4;private static final float SIZE = 25;@Overrideprotected Scene onCreateScene() {this.mEngine.registerUpdateHandler(new FPSLogger());final Scene scene = new Scene();scene.setBackground(new Background(0, 0, 0));for (int i = 0; i < COUNT_RECTANGLE; i++) {final float tension = MathUtils.random(-0.5f, 0.5f);this.addRectangleWithTension(scene, tension,MathUtils.random(0, DURATION * 2f));}return scene;}private void addRectangleWithTension(final Scene pScene,final float pTension, float pDelay) {// 声明矩形final Rectangle rectangle = new Rectangle(-SIZE, -SIZE, SIZE, SIZE,this.getVertexBufferObjectManager());rectangle.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE);if (pTension < 0) {// 此处原本为rectangle.setColor(1 - pTension, 0, 0, 0.5f);// 修改成这样只是为了多几个颜色,好玩而已rectangle.setColor(1 - pTension, pDelay, pDelay, 0.5f);} else {rectangle.setColor(pTension, pDelay, pDelay, 0.5f);}// 声明基数样条修改器final CardinalSplineMoveModifierConfig catmullRomMoveModifierConfig1 = new CardinalSplineMoveModifierConfig(mControlPoint_1_XS.length, -1);final CardinalSplineMoveModifierConfig catmullRomMoveModifierConfig2 = new CardinalSplineMoveModifierConfig(mControlPoint_1_XS.length, -1);for (int i = 0; i < mControlPoint_1_XS.length; i++) {// 设置控制点,catmullRomMoveModifierConfig1表示的是,左边那半部分catmullRomMoveModifierConfig1.setControlPoint(i,mControlPoint_1_XS[i] - SIZE / 2, mControlPoint_YS[i]- SIZE / 2);// 设置控制点,catmullRomMoveModifierConfig2表示右半部分catmullRomMoveModifierConfig2.setControlPoint(i,mControlPoint_2_XS[i] - SIZE / 2, mControlPoint_YS[i]- SIZE / 2);}// 给矩形注册修改器rectangle.registerEntityModifier(// 声明一个顺序修饰器new SequenceEntityModifier(// 延迟修饰器new DelayModifier(pDelay),// 循环修饰器new LoopEntityModifier(// 顺序修饰器new SequenceEntityModifier(// 集合修饰器new ParallelEntityModifier(// 基数样条修饰器new CardinalSplineMoveModifier(DURATION,catmullRomMoveModifierConfig1,EaseLinear.getInstance()),// 旋转修饰器new RotationModifier(DURATION,-45, -315)),// 集合修饰器new ParallelEntityModifier(// 基数样条修饰器new CardinalSplineMoveModifier(DURATION,catmullRomMoveModifierConfig2,EaseLinear.getInstance()),// 旋转修饰器new RotationModifier(DURATION,45, 315))))));pScene.attachChild(rectangle);}}


形状有点丑,但是,确实是“W”。