首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用图像数组的字符动画

使用图像数组的字符动画
EN

Stack Overflow用户
提问于 2014-11-04 18:44:43
回答 2查看 76关注 0票数 0

我有一个问题,动画我的角色的运动在我的游戏。我用的是一个由16个元素组成的图像数组。

第一个周期进行得很好,但在那之后,角色就没有动画了。它会移动,但不会改变图像,只显示该周期的第一个元素。如果我改变方向,一个周期再次下降,并以同样的方式停止。

有什么想法吗?

这是我的代码:

代码语言:javascript
复制
public void paintHero(Graphics g) {
    // paint character
    offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);
    // show first image of the cycle where the character stands
    if (hero.getMoveX() == 0 && hero.getMoveY() == 0)
        heroFrame = 0;
    else {
        heroFrame++;
        if (heroFrame == 16)
            heroFrame = 0;
        // I'm dividing heroFrame by 4 to slow down the animation
        if (hero.isMovingUp() == true)
            heroCurrent = heroSprites[4 + heroFrame / 4];
        if (hero.isMovingDown() == true)
            heroCurrent = heroSprites[0 + heroFrame / 4];
        if (hero.isMovingLeft() == true)
            heroCurrent = heroSprites[8 + heroFrame / 4];
        if (hero.isMovingRight() == true)
            heroCurrent = heroSprites[12 + heroFrame / 4];
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-05 11:04:19

我成功了,但我不知道为什么它现在起作用了。我在每个if语句之后添加了抽签,并保留了第一个语句。如果有人能解释的话,我们会非常感激的。

代码语言:javascript
复制
public void paintHero(Graphics g) {

    offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);

    if (hero.getMoveX() == 0 && hero.getMoveY() == 0)
        heroFrame = 0;
    else {
        heroFrame++;
        if (heroFrame == 16)
            heroFrame = 0;
    }

    if (hero.isMovingUp()) {
        heroCurrent = heroSprites[4 + heroFrame / 4];
        offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);
    }
    if (hero.isMovingDown()) {
        heroCurrent = heroSprites[0 + heroFrame / 4];
        offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);
    }
    if (hero.isMovingLeft()) {
        heroCurrent = heroSprites[8 + heroFrame / 4];
        offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);
    }
    if (hero.isMovingRight()) {
        heroCurrent = heroSprites[12 + heroFrame / 4];
        offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-04 18:53:03

在没有改变方向的情况下,您不会更新精灵。它应该是:

代码语言:javascript
复制
public void paintHero(Graphics g) {
    // paint character
    offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY(), this);

    //always update frame
    heroFrame++;
    if (heroFrame == 16)
        heroFrame = 0;

    // show first image of the cycle where the character stands
    if (hero.getMoveX() == 0 && hero.getMoveY() == 0)
        heroCurrent = heroSprites[heroFrame];//update even if character isnt moving
    else {
        // I'm dividing heroFrame by 4 to slow down the animation
        if (hero.isMovingUp())
            heroCurrent = heroSprites[4 + heroFrame / 4];
        else if (hero.isMovingDown())
            heroCurrent = heroSprites[0 + heroFrame / 4];
        else if (hero.isMovingLeft())
            heroCurrent = heroSprites[8 + heroFrame / 4];
        else if (hero.isMovingRight())
            heroCurrent = heroSprites[12 + heroFrame / 4];
        else//stand still
            heroCurrent = heroSprites[heroFrame];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26742647

复制
相关文章

相似问题

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