我试图在我正在教自己的游戏编程的一次性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) {}
}
}