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

昨天看了下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;

	@Override
	public 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;
	}

	@Override
	protected void onCreateResources() {
		// Do nothings
		initControlPointCoordinate();
	}

	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;

	@Override
	protected 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”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值