如何在java中制作3帧步行动画

时间:2013-06-27 03:50:39

标签: java animation

我正在使用java进行游戏,当玩家侧身行走时,它看起来非常俗气。我被建议使用三帧动画,我一直在尝试这么多搜索,我似乎无法弄明白。

dir 是我用来获取玩家看的方式,0是前进的。
精灵是获取图像,玩家F,玩家F_1和玩家F_2都是前进角色。
行走是动画的布尔值 动画是动画的缩写。

if (dir == 0) {
    sprite = Sprite.playerF;
    if (walking) {
        if (anim % 40 > 20) {
            sprite = Sprite.playerF_1;
        } else {
            sprite = Sprite.playerF_2;
        }
    }
}

我先谢谢你,帮助我创建一个3帧动画。

2 个答案:

答案 0 :(得分:3)

我会这样做。

此方法可以根据您的需要扩展到尽可能多的方向(例如包括对角线)和帧,而无需对大块的其他if块进行硬编码。

创建一个枚举以保留可能的方向。

enum Direction{
    Forward,
    Backward,
    Left,
    Right       
};

然后创建一个EnumMap,使用方向作为键,并具有Sprite数组的值

EnumMap<Direction,Sprite[]> animations = null;

然后将每个动画的帧添加到各自的方向

animations.put(Direction.Forward,new Sprite[]{Sprite.Sprite.playerF,Sprite.playerF_1,Sprite.playerF_2});

现在要做你的绘图更新功能,你所要做的就是

if(walking){
     sprite = animations.get(dir)[getFrame(anim)];
}

现在处理决定使用什么帧。假设anim是某种帧计数器,并且您希望比每帧更新频率更低。

用于循环,例如。 1,2,3,1,2,3,......动画:

int getFrame(int anim){
     return (anim / UPDATE_FREQUENCY) % FRAME_COUNT;
}  

或用于弹跳动画,例如。 1,2,3,2,1,2,3,...在绘图部分保留一个变量,以跟踪绘制的数字框架以及当前的方向。

int getFrame(int anim, int frameNum, Boolean incrementDirection){
    int frame;
    if(anim % UPDATE_FREQUENCY == 0){
       if(Math.abs(frameNum) == FRAME_COUNT-1)
                 frameNum = 0-frameNum;
        frameNum ++;
    }
    return frameNum;
}

要实现此版本,绘图代码将更改为

int frame = 1;

if(walking){
     frame = getFrame(anim,frame);
     sprite = animations.get(dir)[Math.abs(frame)];
}

答案 1 :(得分:2)

只需添加if / elseif链中的第三个选项:

    if (walking) {
        if (anim % 40 >= 30) {
            sprite = Sprite.playerF_2;
        else if (anim % 40 >= 20) {
            sprite = Sprite.playerF_1;
        } else if (anim % 40 >= 10) {
            sprite = Sprite.playerF_2;
        } else {
            sprite = Sprite.playerF_3;
        }
    }