AndEngine Example(9):EaseFunctionExample
来源:互联网 发布:js中window.open 编辑:程序博客网 时间:2024/06/06 02:37
目标:
1. 了解什么是EaseFunction
2. 了解几种类型的EaseFunction
-----------------------------------------------------------------
package org.andengine.examples;import org.andengine.engine.camera.Camera;import org.andengine.engine.camera.hud.HUD;import org.andengine.engine.options.EngineOptions;import org.andengine.engine.options.ScreenOrientation;import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;import org.andengine.entity.modifier.MoveModifier;import org.andengine.entity.primitive.Line;import org.andengine.entity.scene.Scene;import org.andengine.entity.sprite.Sprite;import org.andengine.entity.text.Text;import org.andengine.entity.util.FPSLogger;import org.andengine.input.touch.TouchEvent;import org.andengine.opengl.font.Font;import org.andengine.opengl.texture.ITexture;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.ITextureRegion;import org.andengine.ui.activity.SimpleBaseGameActivity;import org.andengine.util.modifier.ease.EaseBackIn;import org.andengine.util.modifier.ease.EaseBackInOut;import org.andengine.util.modifier.ease.EaseBackOut;import org.andengine.util.modifier.ease.EaseBounceIn;import org.andengine.util.modifier.ease.EaseBounceInOut;import org.andengine.util.modifier.ease.EaseBounceOut;import org.andengine.util.modifier.ease.EaseCircularIn;import org.andengine.util.modifier.ease.EaseCircularInOut;import org.andengine.util.modifier.ease.EaseCircularOut;import org.andengine.util.modifier.ease.EaseCubicIn;import org.andengine.util.modifier.ease.EaseCubicInOut;import org.andengine.util.modifier.ease.EaseCubicOut;import org.andengine.util.modifier.ease.EaseElasticIn;import org.andengine.util.modifier.ease.EaseElasticInOut;import org.andengine.util.modifier.ease.EaseElasticOut;import org.andengine.util.modifier.ease.EaseExponentialIn;import org.andengine.util.modifier.ease.EaseExponentialInOut;import org.andengine.util.modifier.ease.EaseExponentialOut;import org.andengine.util.modifier.ease.EaseLinear;import org.andengine.util.modifier.ease.EaseQuadIn;import org.andengine.util.modifier.ease.EaseQuadInOut;import org.andengine.util.modifier.ease.EaseQuadOut;import org.andengine.util.modifier.ease.EaseQuartIn;import org.andengine.util.modifier.ease.EaseQuartInOut;import org.andengine.util.modifier.ease.EaseQuartOut;import org.andengine.util.modifier.ease.EaseQuintIn;import org.andengine.util.modifier.ease.EaseQuintInOut;import org.andengine.util.modifier.ease.EaseQuintOut;import org.andengine.util.modifier.ease.EaseSineIn;import org.andengine.util.modifier.ease.EaseSineInOut;import org.andengine.util.modifier.ease.EaseSineOut;import org.andengine.util.modifier.ease.EaseStrongIn;import org.andengine.util.modifier.ease.EaseStrongInOut;import org.andengine.util.modifier.ease.EaseStrongOut;import org.andengine.util.modifier.ease.IEaseFunction;import android.graphics.Color;import android.graphics.Typeface;/** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga * * @author Nicolas Gramlich * @since 15:12:16 - 30.07.2010 */public class EaseFunctionExample extends SimpleBaseGameActivity {// ===========================================================// Constants// ===========================================================private static final int CAMERA_WIDTH = 720;private static final int CAMERA_HEIGHT = 480;// ===========================================================// Fields// ===========================================================private Camera mCamera;private Font mFont;private BitmapTextureAtlas mBitmapTextureAtlas;private ITextureRegion mBadgeTextureRegion;private ITextureRegion mNextTextureRegion;private static final IEaseFunction[][] EASEFUNCTIONS = new IEaseFunction[][]{new IEaseFunction[] {EaseLinear.getInstance(),EaseLinear.getInstance(),EaseLinear.getInstance()},new IEaseFunction[] {EaseBackIn.getInstance(),EaseBackOut.getInstance(),EaseBackInOut.getInstance()},new IEaseFunction[] {EaseBounceIn.getInstance(),EaseBounceOut.getInstance(),EaseBounceInOut.getInstance()},new IEaseFunction[] {EaseCircularIn.getInstance(),EaseCircularOut.getInstance(),EaseCircularInOut.getInstance()},new IEaseFunction[] {EaseCubicIn.getInstance(),EaseCubicOut.getInstance(),EaseCubicInOut.getInstance()},new IEaseFunction[] {EaseElasticIn.getInstance(),EaseElasticOut.getInstance(),EaseElasticInOut.getInstance()},new IEaseFunction[] {EaseExponentialIn.getInstance(),EaseExponentialOut.getInstance(),EaseExponentialInOut.getInstance()},new IEaseFunction[] {EaseQuadIn.getInstance(),EaseQuadOut.getInstance(),EaseQuadInOut.getInstance()},new IEaseFunction[] {EaseQuartIn.getInstance(),EaseQuartOut.getInstance(),EaseQuartInOut.getInstance()},new IEaseFunction[] {EaseQuintIn.getInstance(),EaseQuintOut.getInstance(),EaseQuintInOut.getInstance()},new IEaseFunction[] {EaseSineIn.getInstance(),EaseSineOut.getInstance(),EaseSineInOut.getInstance()},new IEaseFunction[] {EaseStrongIn.getInstance(),EaseStrongOut.getInstance(),EaseStrongInOut.getInstance()}};private int mCurrentEaseFunctionSet = 0;private final Sprite[] mBadges = new Sprite[3];private final Text[] mEaseFunctionNameTexts = new Text[3];// ===========================================================// Constructors// ===========================================================// ===========================================================// Getter & Setter// ===========================================================// ===========================================================// Methods for/from SuperClass/Interfaces// ===========================================================@Overridepublic EngineOptions onCreateEngineOptions() {this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera);}@Overridepublic void onCreateResources() {/* The font. */final ITexture fontTexture = new BitmapTextureAtlas(this.getTextureManager(), 256, 256, TextureOptions.BILINEAR);this.mFont = new Font(this.getFontManager(), fontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.WHITE);this.mFont.load();/* The textures. */this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 256, 128, TextureOptions.BILINEAR);BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");this.mNextTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "next.png", 0, 0);this.mBadgeTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "badge.png", 97, 0);this.mBitmapTextureAtlas.load();}@Overridepublic Scene onCreateScene() {this.mEngine.registerUpdateHandler(new FPSLogger());final Scene scene = new Scene();final HUD hud = new HUD();final Sprite nextSprite = new Sprite(CAMERA_WIDTH - 100 - this.mNextTextureRegion.getWidth(), 0, this.mNextTextureRegion, this.getVertexBufferObjectManager()) {@Overridepublic boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {if(pSceneTouchEvent.isActionDown()) {EaseFunctionExample.this.next();}return true;};};final Sprite previousSprite = new Sprite(100, 0, this.mNextTextureRegion, this.getVertexBufferObjectManager()) {@Overridepublic boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {if(pSceneTouchEvent.isActionDown()) {EaseFunctionExample.this.previous();}return true;};};previousSprite.setFlippedHorizontal(true);hud.attachChild(nextSprite);hud.attachChild(previousSprite);hud.registerTouchArea(nextSprite);hud.registerTouchArea(previousSprite);this.mCamera.setHUD(hud);/* Create the sprites that will be moving. */this.mBadges[0] = new Sprite(0, CAMERA_HEIGHT - 300, this.mBadgeTextureRegion, this.getVertexBufferObjectManager());this.mBadges[1] = new Sprite(0, CAMERA_HEIGHT - 200, this.mBadgeTextureRegion, this.getVertexBufferObjectManager());this.mBadges[2] = new Sprite(0, CAMERA_HEIGHT - 100, this.mBadgeTextureRegion, this.getVertexBufferObjectManager());this.mEaseFunctionNameTexts[0] = new Text(0, CAMERA_HEIGHT - 250, this.mFont, "Function", 20, this.getVertexBufferObjectManager());this.mEaseFunctionNameTexts[1] = new Text(0, CAMERA_HEIGHT - 150, this.mFont, "Function", 20, this.getVertexBufferObjectManager());this.mEaseFunctionNameTexts[2] = new Text(0, CAMERA_HEIGHT - 50, this.mFont, "Function", 20, this.getVertexBufferObjectManager());scene.attachChild(this.mBadges[0]);scene.attachChild(this.mBadges[1]);scene.attachChild(this.mBadges[2]);scene.attachChild(this.mEaseFunctionNameTexts[0]);scene.attachChild(this.mEaseFunctionNameTexts[1]);scene.attachChild(this.mEaseFunctionNameTexts[2]);scene.attachChild(new Line(0, CAMERA_HEIGHT - 110, CAMERA_WIDTH, CAMERA_HEIGHT - 110, this.getVertexBufferObjectManager()));scene.attachChild(new Line(0, CAMERA_HEIGHT - 210, CAMERA_WIDTH, CAMERA_HEIGHT - 210, this.getVertexBufferObjectManager()));scene.attachChild(new Line(0, CAMERA_HEIGHT - 310, CAMERA_WIDTH, CAMERA_HEIGHT - 310, this.getVertexBufferObjectManager()));return scene;}@Overridepublic void onGameCreated() {this.reanimate();}// ===========================================================// Methods// ===========================================================public void next() {this.mCurrentEaseFunctionSet++;this.mCurrentEaseFunctionSet %= EASEFUNCTIONS.length;this.reanimate();}public void previous() {this.mCurrentEaseFunctionSet--;if(this.mCurrentEaseFunctionSet < 0) {this.mCurrentEaseFunctionSet += EASEFUNCTIONS.length;}this.reanimate();}private void reanimate() {this.runOnUpdateThread(new Runnable() {@Overridepublic void run() {final IEaseFunction[] currentEaseFunctionsSet = EASEFUNCTIONS[EaseFunctionExample.this.mCurrentEaseFunctionSet];final Text[] easeFunctionNameTexts = EaseFunctionExample.this.mEaseFunctionNameTexts;final Sprite[] faces = EaseFunctionExample.this.mBadges;for(int i = 0; i < 3; i++) {easeFunctionNameTexts[i].setText(currentEaseFunctionsSet[i].getClass().getSimpleName());final Sprite face = faces[i];face.clearEntityModifiers();final float y = face.getY();face.setPosition(0, y);face.registerEntityModifier(new MoveModifier(3, 0, CAMERA_WIDTH - face.getWidth(), y, y, currentEaseFunctionsSet[i]));}}});}// ===========================================================// Inner and Anonymous Classes// ===========================================================}
--------------------------------------------------------------------
EaseFunctions 改变了修饰符的作用过程。
修饰符修饰对象在默认情况下是线性的。
而如果采用了不同类型的EaseFunction,则可以将其变为非线性的一个过程。
只上传了InOut类型的,单独In和Out可以类推出来
(1)EaseBackInOut
(2)EaseBounceInOut
这个可用于模拟球掉落地面的效果
(3)EaseCubicInOut
三次曲线的,可模拟电梯的运动
Cubic是立方体的意思。
(4)EaseElasticInOut
用于仿真弹簧或者橡胶棒
(5)EaseExponentialInOut
其实还有集中类型的EaseFunction,但觉得区别不是特别大,所以就没有将图贴出来了。
详情见API。
0 0
- AndEngine Example(9):EaseFunctionExample
- AndEngine之EaseFunctionExample
- AndEngine之DEMO学习(十二)EaseFunctionExample
- 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(7):EntityModifierExample
- AndEngine Example(8):PathModifierExample
- AndEngine-----Example中Simple例子的总结
- Andengine
- andengine
- AndEngine中引用布局文件example.lvl——实现场景的加载
- AndEngine----初识AndEngine
- example
- example
- Android开源工具库
- Linux多线程编程--学习笔记--多线程简介
- Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作
- IReport报表分组与分组统计
- 百度地图--定位功能之MyLocationOverlay,PopupOverlay的使用
- AndEngine Example(9):EaseFunctionExample
- java lock 详解
- 用VS2010建立解决方案
- C/C++中算法运行时间的三种计算方式
- java中equals() 和“==”的比较
- 获取年月日和星期
- KeySet() 和 EntrySet()
- treeview控件能用的从sql数据源到HierarchicalDataSourceControl数据源转换器
- Codeforces Round #236 (Div. 2) E. Strictly Positive Matrix