首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Andengine的超快动画速度

Andengine的超快动画速度
EN

Stack Overflow用户
提问于 2013-06-18 10:30:18
回答 2查看 505关注 0票数 1

我正在使用Andengine在Android上构建我的游戏,我使用AnimatedSprite来画一个正在奔跑的忍者。我使用changeFrameDuration方法根据忍者移动的速度来修改动画速度。

我不知道为什么动画有时会很快,而根据我设置的帧持续时间值,它应该很慢。

我打印了日志,以了解为什么我的忍者动画非常快,并且当前的瓦片索引显示了一些有趣的事情……

代码语言:javascript
复制
** Here the ninja is animated very slowly like supposed **
06-17 23:03:08.868: I/Ninja(15495): Animation frame duration : 1639 with current tile index : 0
06-17 23:03:08.888: I/Ninja(15495): Animation frame duration : 2048 with current tile index : 0
06-17 23:03:08.908: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:08.928: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:08.948: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:08.968: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:08.988: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.008: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.028: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.048: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.068: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.088: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.108: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.129: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.149: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.169: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.189: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0
06-17 23:03:09.209: I/Ninja(15495): Animation frame duration : 2561 with current tile index : 0

** Here it starts behing animated very fast (when supposed to be not very fast) **
06-17 23:03:09.229: I/Ninja(15495): Animation frame duration : 741 with current tile index : 0
06-17 23:03:09.249: I/Ninja(15495): Animation frame duration : 521 with current tile index : 2
06-17 23:03:09.269: I/Ninja(15495): Animation frame duration : 421 with current tile index : 3
06-17 23:03:09.289: I/Ninja(15495): Animation frame duration : 361 with current tile index : 3
06-17 23:03:09.309: I/Ninja(15495): Animation frame duration : 320 with current tile index : 4
06-17 23:03:09.329: I/Ninja(15495): Animation frame duration : 290 with current tile index : 5
06-17 23:03:09.349: I/Ninja(15495): Animation frame duration : 266 with current tile index : 5
06-17 23:03:09.369: I/Ninja(15495): Animation frame duration : 248 with current tile index : 6
06-17 23:03:09.389: I/Ninja(15495): Animation frame duration : 232 with current tile index : 7
06-17 23:03:09.409: I/Ninja(15495): Animation frame duration : 220 with current tile index : 7
06-17 23:03:09.429: I/Ninja(15495): Animation frame duration : 208 with current tile index : 8
06-17 23:03:09.449: I/Ninja(15495): Animation frame duration : 199 with current tile index : 8
06-17 23:03:09.469: I/Ninja(15495): Animation frame duration : 190 with current tile index : 9
06-17 23:03:09.489: I/Ninja(15495): Animation frame duration : 183 with current tile index : 9
06-17 23:03:09.509: I/Ninja(15495): Animation frame duration : 176 with current tile index : 10
06-17 23:03:09.529: I/Ninja(15495): Animation frame duration : 170 with current tile index : 10
06-17 23:03:09.549: I/Ninja(15495): Animation frame duration : 165 with current tile index : 11
06-17 23:03:09.569: I/Ninja(15495): Animation frame duration : 160 with current tile index : 11

** Here it starts behing animated at a normal rate (slowly accelerating) **
06-17 23:03:09.589: I/Ninja(15495): Animation frame duration : 155 with current tile index : 0
06-17 23:03:09.609: I/Ninja(15495): Animation frame duration : 151 with current tile index : 0
06-17 23:03:09.629: I/Ninja(15495): Animation frame duration : 147 with current tile index : 0
06-17 23:03:09.649: I/Ninja(15495): Animation frame duration : 143 with current tile index : 0
06-17 23:03:09.669: I/Ninja(15495): Animation frame duration : 140 with current tile index : 0
06-17 23:03:09.689: I/Ninja(15495): Animation frame duration : 137 with current tile index : 0
06-17 23:03:09.709: I/Ninja(15495): Animation frame duration : 134 with current tile index : 1
06-17 23:03:09.729: I/Ninja(15495): Animation frame duration : 131 with current tile index : 1
06-17 23:03:09.749: I/Ninja(15495): Animation frame duration : 128 with current tile index : 1
06-17 23:03:09.769: I/Ninja(15495): Animation frame duration : 126 with current tile index : 1
06-17 23:03:09.789: I/Ninja(15495): Animation frame duration : 124 with current tile index : 1
06-17 23:03:09.809: I/Ninja(15495): Animation frame duration : 121 with current tile index : 1
06-17 23:03:09.829: I/Ninja(15495): Animation frame duration : 119 with current tile index : 2
06-17 23:03:09.849: I/Ninja(15495): Animation frame duration : 117 with current tile index : 2
06-17 23:03:09.869: I/Ninja(15495): Animation frame duration : 115 with current tile index : 2
06-17 23:03:09.889: I/Ninja(15495): Animation frame duration : 113 with current tile index : 2
06-17 23:03:09.909: I/Ninja(15495): Animation frame duration : 112 with current tile index : 3
06-17 23:03:09.929: I/Ninja(15495): Animation frame duration : 110 with current tile index : 3
06-17 23:03:09.949: I/Ninja(15495): Animation frame duration : 108 with current tile index : 3
06-17 23:03:09.969: I/Ninja(15495): Animation frame duration : 107 with current tile index : 3
06-17 23:03:09.989: I/Ninja(15495): Animation frame duration : 105 with current tile index : 3
06-17 23:03:10.009: I/Ninja(15495): Animation frame duration : 104 with current tile index : 4
06-17 23:03:10.029: I/Ninja(15495): Animation frame duration : 103 with current tile index : 4
06-17 23:03:10.049: I/Ninja(15495): Animation frame duration : 101 with current tile index : 4
06-17 23:03:10.070: I/Ninja(15495): Animation frame duration : 100 with current tile index : 4
06-17 23:03:10.090: I/Ninja(15495): Animation frame duration : 99 with current tile index : 5
06-17 23:03:10.110: I/Ninja(15495): Animation frame duration : 98 with current tile index : 5
06-17 23:03:10.130: I/Ninja(15495): Animation frame duration : 97 with current tile index : 5

现在关于我的代码,这里是重要的部分。

首先,我有一个扩展BaseScene的GameScene。

代码语言:javascript
复制
public class GameScene extends BaseScene {
private static final String TAG = "GameScene";
private static final int TIME_BETWEEN_EACH_POSITION_BROADCAST = 250;

private AutoParallaxBackground parallaxBackground;
private Ninja player;
private Vector<Ninja> ninjas;
public int time;
public boolean isStarted = false;
private int timeSinceLastPositionBroadcast = 0;

@Override
protected void onManagedUpdate(float pSecondsElapsed) {
    super.onManagedUpdate(pSecondsElapsed);
    if(isStarted){
        int timeElapsed = Math.round(pSecondsElapsed*1000);
        Log.d(TAG, "Last time: "+time+", time elapsed: "+timeElapsed+", current time: "+(time+timeElapsed));
        time += timeElapsed;
        for(Ninja ninja : ninjas){
            ninja.update(pSecondsElapsed);
        }
        centerScreenOnPlayer();
        parallaxBackground.setParallaxChangePerSecond(player.getSpeed()/120f);
        timeSinceLastPositionBroadcast += timeElapsed;
        if(timeSinceLastPositionBroadcast >= TIME_BETWEEN_EACH_POSITION_BROADCAST){
            timeSinceLastPositionBroadcast -= TIME_BETWEEN_EACH_POSITION_BROADCAST;
            MessageManager.getInstance().broadcastPosition(time, player.getX(), player.getY());
        }
    }
}

private void centerScreenOnPlayer(){
    float newCenterX = player.getX()+200;
    float newCenterY = player.getY()+25;
    camera.setCenter(newCenterX, newCenterY);
}
}

然后我有了扩展AnimatedSprite的忍者类。

代码语言:javascript
复制
public class Ninja extends AnimatedSprite {

    public void update(float secondsElapsed){
        updateX(secondsElapsed);
        updateY();
        updateAnimationSpeed();
        float maxSpeedParticleEmitterX = this.getX() + this.getWidth()/4;
        float maxSpeedParticleEmitterY = this.getY() + this.getHeight()/4;
        if(this.getWidth() != this.getWidthScaled()){
            maxSpeedParticleEmitterX -= this.getWidth()/4 * scaleModificationPercentage;
            maxSpeedParticleEmitterY -= this.getHeight()/4 * scaleModificationPercentage;
        }
        maxSpeedParticleEmitter.setCenter(maxSpeedParticleEmitterX, maxSpeedParticleEmitterY);
        maxSpeedParticleSystem.setCurrentTileIndex(this.getCurrentTileIndex());
        slice.setX(this.getX()+this.getWidth());
        slice.setY(this.getY());
    }

    private void updateAnimationSpeed(){
        float divideBy = currentSpeed;
        if(divideBy < 10)
            divideBy = 10;
        int frameDuration = (int) (ANIMATION_SPEED * MAX_MOVEMENT_SPEED / divideBy);    //y = k / x ... where k = 50 * 600 ... (normal max animation speed * max speed)
        if(this.isPlayer)
            Log.i(TAG, "Animation frame duration : "+frameDuration+" with current tile index : "+this.getCurrentTileIndex());
        this.changeFrameDuration(frameDuration);
    }
}

有没有人知道为什么我的动画雪碧会快速改变它的瓦片索引,而它应该改变得很慢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 09:04:35

我猜AnimatedSprite不应该让它的帧持续时间在运行中发生如此剧烈的变化(从> 2000到< 1000)。我不知道为什么它改变帧的速度比预期的快,但我设法解决了我的问题,当帧持续时间超过500帧时停止动画,当帧持续时间低于500帧时重新开始。

票数 0
EN

Stack Overflow用户

发布于 2013-06-19 07:34:28

我认为你想要做的是使用ANIMATION_SPEED * (currentSpeed/MAX_MOVEMENTSPEED) -括号很重要。你想要一个百分比(当前/最大值)乘以一个常数(AnimationSpeed)

代码语言:javascript
复制
int animationSpeed = (int) (ANIMATION_SPEED * (currentSpeed / MAX_MOVEMENT_SPEED));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17159701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档