AndEngine Example(7):EntityModifierExample
来源:互联网 发布:linux线程优先级设置 编辑:程序博客网 时间:2024/05/17 00:56
目标:
1. 了解修饰符Modifier
2. 学习透明度变化(AlphaModifier)
3. 学习缩放变化(ScaleModifier)
4. 学习延时(DelayModifier)
5. 学习旋转(RotationModifier)
6. 学习顺序使用修饰符(SequenceEntityModifier)
7. 学习并行使用修饰符(ParallelEntityModifier)
8. 理解如何从一张图上获取多个纹理createTiledFromAsset
------------------------------------------------------------------------
注意,你需要更换图片资源,才能得到相应的效果。
package org.andengine.examples;import org.andengine.engine.camera.Camera;import org.andengine.engine.options.EngineOptions;import org.andengine.engine.options.ScreenOrientation;import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;import org.andengine.entity.IEntity;import org.andengine.entity.modifier.AlphaModifier;import org.andengine.entity.modifier.DelayModifier;import org.andengine.entity.modifier.IEntityModifier.IEntityModifierListener;import org.andengine.entity.modifier.LoopEntityModifier;import org.andengine.entity.modifier.LoopEntityModifier.ILoopEntityModifierListener;import org.andengine.entity.modifier.ParallelEntityModifier;import org.andengine.entity.modifier.RotationByModifier;import org.andengine.entity.modifier.RotationModifier;import org.andengine.entity.modifier.ScaleModifier;import org.andengine.entity.modifier.SequenceEntityModifier;import org.andengine.entity.primitive.Rectangle;import org.andengine.entity.scene.Scene;import org.andengine.entity.scene.background.Background;import org.andengine.entity.sprite.AnimatedSprite;import org.andengine.entity.util.FPSLogger;import org.andengine.opengl.texture.TextureOptions;import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;import org.andengine.opengl.texture.region.TiledTextureRegion;import org.andengine.ui.activity.SimpleBaseGameActivity;import org.andengine.util.modifier.IModifier;import org.andengine.util.modifier.LoopModifier;import android.opengl.GLES20;import android.widget.Toast;/** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga * * @author Nicolas Gramlich * @since 11:54:51 - 03.04.2010 */public class EntityModifierExample extends SimpleBaseGameActivity {// ===========================================================// Constants// ===========================================================private static final int CAMERA_WIDTH = 720;private static final int CAMERA_HEIGHT = 480;// ===========================================================// Fields// ===========================================================private BitmapTextureAtlas mBitmapTextureAtlas;private TiledTextureRegion mFaceTextureRegion;// ===========================================================// Constructors// ===========================================================// ===========================================================// Getter & Setter// ===========================================================// ===========================================================// Methods for/from SuperClass/Interfaces// ===========================================================@Overridepublic EngineOptions onCreateEngineOptions() {final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);}@Overridepublic void onCreateResources() {BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 64, 32, TextureOptions.BILINEAR);this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "face_box_tiled.png", 0, 0, 2, 1);this.mBitmapTextureAtlas.load();}@Overridepublic Scene onCreateScene() {this.mEngine.registerUpdateHandler(new FPSLogger());final Scene scene = new Scene();scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));final float centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;final float centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;final Rectangle rect = new Rectangle(centerX + 100, centerY, 32, 32, this.getVertexBufferObjectManager());rect.setColor(1, 0, 0);final AnimatedSprite face = new AnimatedSprite(centerX - 100, centerY, this.mFaceTextureRegion, this.getVertexBufferObjectManager());face.animate(100);face.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);final LoopEntityModifier entityModifier =new LoopEntityModifier(new IEntityModifierListener() {@Overridepublic void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {EntityModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(EntityModifierExample.this, "Sequence started.", Toast.LENGTH_SHORT).show();}});}@Overridepublic void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {EntityModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(EntityModifierExample.this, "Sequence finished.", Toast.LENGTH_SHORT).show();}});}},2,new ILoopEntityModifierListener() {@Overridepublic void onLoopStarted(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {EntityModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(EntityModifierExample.this, "Loop: '" + (pLoop + 1) + "' of '" + pLoopCount + "' started.", Toast.LENGTH_SHORT).show();}});}@Overridepublic void onLoopFinished(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) {EntityModifierExample.this.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(EntityModifierExample.this, "Loop: '" + (pLoop + 1) + "' of '" + pLoopCount + "' finished.", Toast.LENGTH_SHORT).show();}});}},new SequenceEntityModifier(//new RotationModifier(1, 0, 90),new AlphaModifier(2, 1, 0),new AlphaModifier(1, 0, 1),new ScaleModifier(2, 1, 0.5f),new DelayModifier(0.5f),new ParallelEntityModifier(new ScaleModifier(3, 0.5f, 5),new RotationByModifier(3, 90)),new ParallelEntityModifier(new ScaleModifier(3, 5, 1),new RotationModifier(3, 180, 0))));face.registerEntityModifier(entityModifier);rect.registerEntityModifier(entityModifier.deepCopy());scene.attachChild(face);scene.attachChild(rect);return scene;}// ===========================================================// Methods// ===========================================================// ===========================================================// Inner and Anonymous Classes// ===========================================================}
------------------------------------------------------------------------------------------
关于修饰符本身的例子过于复杂:
所以我们分为几步来理解它。
(一)单一的修饰符
修改:
face.registerEntityModifier(entityModifier);rect.registerEntityModifier(entityModifier.deepCopy());为
face.registerEntityModifier(new AlphaModifier(10, 1, 0));rect.registerEntityModifier(new AlphaModifier(10, 0, 1));然后运行,
发现矩形从无到有,而图片从有到无。这说明了这两个修饰符用于控制了透明度的变化。
(二)顺序执行修饰符
还原,然后修改
face.registerEntityModifier(entityModifier);
为
SequenceEntityModifier entityModifier1 = new SequenceEntityModifier(new ScaleModifier(2, 1, 0.5f),new DelayModifier(1.5f),new ScaleModifier(2, 0.5f, 2),new DelayModifier(1.5f),new ScaleModifier(2, 2, 0.5f));face.registerEntityModifier(entityModifier1);观察图片的变化,可以发现它是按照我们指定的顺序来进行缩放(ScaleModifier)的,并做了适量的停滞(DelayModifier)
使用顺序描述符,可以使得按照我们的需求来进行修饰符的排列。
(三) 并行修饰符
使用并行修饰符,可以使得过个动作同时进行,例如旋转的同时进行缩放,且透明度发生变化
修改上文中的entityModifier1为:
ParallelEntityModifier entityModifier1 = new ParallelEntityModifier(new ScaleModifier(5, 1, 4),new RotationModifier(5, 0, 180),new AlphaModifier(5, 1, 0));
观察图片的变化,发现多种效果得以同时作用,这便是并行修饰符(ParallelEntityModifier)的作用。
(四) 循坏修饰符
还原成最初的模样
使用LoopEntityModifier(IEntityModifierListener,int,ILoopEntityModifierListener,IEntityModifier)构造函数
可通过将第一个或者第三个参数设为null,发现其中的区别
para1:可监听整个修饰符修饰对象的开始和结束
para2:重复的次数
para3:每一轮开始和结束的回调
para4:实际的描述符
- AndEngine Example(7):EntityModifierExample
- AndEngine之DEMO学习(七)EntityModifierExample
- AndEngine Example(1):LineExample
- AndEngine Example(2):RectangleExample
- AndEngine Example(3):SpriteExample
- AndEngine Example(4):SpriteRemoveExample
- AndEngine Example(5):SpriteBatchExample
- AndEngine Example(6):MovingBallExample
- AndEngine Example(8):PathModifierExample
- AndEngine Example(9):EaseFunctionExample
- AndEngine-----Example中Simple例子的总结
- Andengine
- andengine
- AndEngine中引用布局文件example.lvl——实现场景的加载
- AndEngine----初识AndEngine
- example
- example
- Example
- Yii rules的验证规则介绍
- Oralce常用技巧
- POJ 1458 Common Subsequence
- Java编程基础之初始化和清除
- linux上安装activeMQ
- AndEngine Example(7):EntityModifierExample
- 实现百度地图的身边雷达的功能效果
- Android armeabi armeabi-v7a
- wxWidgets因为unicode编译出错
- 【ObjC那点儿事儿】Category和Protocol
- Spring MVC 基础教程,快速入门,深入分析
- 存储过程
- Java 实现二叉树排序和查找
- 系统版本