AndEngine Example(7):EntityModifierExample
2014-03-25 23:49
232 查看
目标:
1. 了解修饰符Modifier
2. 学习透明度变化(AlphaModifier)
3. 学习缩放变化(ScaleModifier)
4. 学习延时(DelayModifier)
5. 学习旋转(RotationModifier)
6. 学习顺序使用修饰符(SequenceEntityModifier)
7. 学习并行使用修饰符(ParallelEntityModifier)
8. 理解如何从一张图上获取多个纹理createTiledFromAsset
------------------------------------------------------------------------
注意,你需要更换图片资源,才能得到相应的效果。
------------------------------------------------------------------------------------------
关于修饰符本身的例子过于复杂:
所以我们分为几步来理解它。
(一)单一的修饰符
修改:
发现矩形从无到有,而图片从有到无。这说明了这两个修饰符用于控制了透明度的变化。
(二)顺序执行修饰符
还原,然后修改
为
使用顺序描述符,可以使得按照我们的需求来进行修饰符的排列。
(三) 并行修饰符
使用并行修饰符,可以使得过个动作同时进行,例如旋转的同时进行缩放,且透明度发生变化
修改上文中的entityModifier1为:
观察图片的变化,发现多种效果得以同时作用,这便是并行修饰符(ParallelEntityModifier)的作用。
(四) 循坏修饰符
还原成最初的模样
使用LoopEntityModifier(IEntityModifierListener,int,ILoopEntityModifierListener,IEntityModifier)构造函数
可通过将第一个或者第三个参数设为null,发现其中的区别
para1:可监听整个修饰符修饰对象的开始和结束
para2:重复的次数
para3:每一轮开始和结束的回调
para4:实际的描述符
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 // =========================================================== @Override public 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); } @Override public 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(); } @Override public 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() { @Override public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) { EntityModifierExample.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(EntityModifierExample.this, "Sequence started.", Toast.LENGTH_SHORT).show(); } }); } @Override public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) { EntityModifierExample.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(EntityModifierExample.this, "Sequence finished.", Toast.LENGTH_SHORT).show(); } }); } }, 2, new ILoopEntityModifierListener() { @Override public void onLoopStarted(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) { EntityModifierExample.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(EntityModifierExample.this, "Loop: '" + (pLoop + 1) + "' of '" + pLoopCount + "' started.", Toast.LENGTH_SHORT).show(); } }); } @Override public void onLoopFinished(final LoopModifier<IEntity> pLoopModifier, final int pLoop, final int pLoopCount) { EntityModifierExample.this.runOnUiThread(new Runnable() { @Override public 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(8):PathModifierExample
- AndEngine Example(3):SpriteExample
- AndEngine Example(9):EaseFunctionExample
- AndEngine Example(2):RectangleExample
- ASP.NET MVC Example with Northwind and Entity Framework Published
- andengine modifier
- MarteEngine tutorial:Entity and world
- AndEngine之DEMO学习(七)EntityModifierExample
- AndEngine Example(6):MovingBallExample
- AndEngine Example(4):SpriteRemoveExample
- AndEngine Example(1):LineExample
- AndEngine Example(5):SpriteBatchExample
- AndEngine之DEMO学习(八)EntityModifierIrregularExample
- C Socket Programming for Linux with a Server and Client Example Code
- An Epoll example -- server and client
- 使用Stanford Word Segmenter and Stanford Named Entity Recognizer (NER)实现中文命名实体识别
- Perl and XS: Example 3: Set::Bit
- The similarity between integrating Design Engine API and integrating Report Engine API
- Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example: Given the below binary tree andsum =
- The specified type member 'IsLock' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.