我试图在我正在教自己的游戏编程的一次性pacman游戏中展示pacman角色的著名开合动画。

我正在做的是绘制张口图像,然后在完全相同的(x / y)位置重新绘制张口图像。但这是行不通的,我一直都在看闭口动画。

如果我将其循环放置,系统只会冻结,并且您会在张开的嘴巴上看到闪烁的图像,但是看不到要替换的图像。

我已经测试并确保两个图像都正确且按预期加载。

这是我的startAnim()函数,当您双击该applet时会调用它:

public void beginGame() //Called from engine.java
{
    isRunning=true;
    repaint();
    pacman.startAnim();
}

public void startAnim() //In different class, pacman.java
{
    Image orig;
    while (engine.isRunning)
    {
        orig=this.getCurrentImg();
        draw(engine.getGraphics());
        this.setCurrImg(currImg2);
        this.draw(engine.getGraphics());
        this.setCurrImg(orig);
        this.draw(engine.getGraphics());
        try
        {
            Thread.sleep(100);
        }
        catch (InterruptedException e) {}
    }
}

public void draw(Graphics g) //Called from engine.paint()
{
    g.drawImage(getCurrentImg(), getX(),
            getY(), engine);
}

最佳答案

您必须在两张图像之间睡觉。否则,您只会看到最后绘制的图像。

例如。

while( running )
{
    image 1
    draw
    sleep
    image 2
    draw
    sleep
}


像这样的东西:

public void startAnim() //In different class, pacman.java
{
                            final int  cnt  = 2;
    Image[] imgs = new Image[ cnt  ];
    int         step = 0;

    imgs[ 0 ] = closedMouthImage;
    imgs[ 1 ] = openMouthImage;

            while ( engine.isRunning )
            {
                this.setCurrImg( imgs[ step ] );
                    draw(engine.getGraphics());
                step = ( step + 1 ) % cnt;
                    try
                    {
                                Thread.sleep(100);
                    }
                    catch (InterruptedException e) {}
            }
}

09-27 05:40