Java 基于图像阵列的角色动画

Java 基于图像阵列的角色动画,java,arrays,animation,Java,Arrays,Animation,我在游戏中设置角色移动动画时遇到问题。我使用的是16个元素的图像数组 第一个循环进行得很顺利,但之后角色就没有动画了。它会移动,但不会改变仅显示该循环第一个元素的图像。如果我改变方向,一个循环会再次下降,并以同样的方式停止 有什么想法吗 这是我的密码: public void paintHero(Graphics g) { // paint character offG.drawImage(heroCurrent, hero.getHeroX(), hero.getHeroY()

我在游戏中设置角色移动动画时遇到问题。我使用的是16个元素的图像数组

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

有什么想法吗

这是我的密码:

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];
    }
}

没有方向更改时,您不会更新精灵。应该是:

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];
    }
}

我成功了,但成为霍塞斯特真的不知道为什么现在能成功。我在每个if语句之后添加了draw,并保留了第一个if语句。如果有人能解释,我将不胜感激

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);
    }
}

不会改变任何事情的工作方式,但您不需要执行hero.isMovingUp==true。ifhero.isMovingUp也可以。很遗憾,编辑之前的答案还是一样的。只经历了一个周期。编辑完成后,我会在向右移动时找到IndexAutofBound,因为它试图访问Herospites[16]。@Kokufuu现在怎么样?现在它会在应该静止的时候不停地旋转…:当它移动时,仍然是同一个问题。