MarteEngine: Animate sprite

mac2022-06-30  20

在完成Basic Collision教程后,是让一些精灵做一些动画效果的时候了。不再只是一些静态的图像,而是能执行一些动态的动作。

 

 

Animation

 

如果你细化做游戏,你可能已经知道一些动画的基础知识:很多时候你只是在不同的图像之间快速切换,以至于人眼会看到一个流畅的移动效果。使用MarteEngine你可以用简单的3个步骤实现它:

加载spritesheet: sprite sheet包含不同的图像(例如向右移动的英雄)。设置不同的动画: 让MarteEngine了解不同帧和它的持续时间。更新动画:按照你的游戏逻辑更新动画。

 

public  class Player  extends Entity {      /**      *  @param  x     *            , x coordinate on screen where Player starts     *  @param  y     *            , y coordinate on screen where Player starts      */      public Player( float x,  float y) {          super(x, y);          //  load spriteSheet         SpriteSheet playerSheet = ResourceManager.getSpriteSheet("player");         setupAnimations(playerSheet);     }      private  void setupAnimations(SpriteSheet playerSheet) {         setGraphic(playerSheet);         duration = 150;         addAnimation("STAND_DOWN",  false, 0, 0);         addAnimation(ME.WALK_RIGHT,  true, 2, 0, 1, 2, 3, 4, 5);     }          @Override      public  void render(GameContainer container, Graphics g)              throws SlickException {          super.render(container, g);     }          @Override      public  void update(GameContainer container,  int delta)              throws SlickException {          super.update(container, delta);                   if (check(ME.WALK_RIGHT)) {             currentAnim = ME.WALK_RIGHT;              if (collide(SOLID, x + 10, y) ==  null) {                 x = x+ 10;             }         }     } }

 这个例子首先使用MarteEngine的ResourceManager加载spritesheet。你会看到有一个叫做setupAnimations的私有方法(添加这个方法仅仅是为了解释起来简单),这个方法通过动画逻辑创建了不同的动画。最后一步当玩家按下右箭头时,我们设置当前动画为WALK_RIGHT.在这个Entity的下一次渲染时,super.render

被调用,这将导致动画使用你在setupAnimations中设置的持续时间被更新。

 

在MarteEngine的test目录下的MoveAvatarTest类中,你可以看到一个更好的更复杂的例子。

完成本教程后你可以继续学习Tweens 。

 

 

 

 

 

转载于:https://www.cnblogs.com/cuizhf/archive/2012/03/03/2378331.html

最新回复(0)