gpt4 book ai didi

java - 如何用双缓冲在Java中显示Pacman的张嘴/闭嘴动画?

转载 作者:行者123 更新时间:2023-12-01 17:40:57 25 4
gpt4 key购买 nike

我正在制作一个一次性吃 bean 人游戏,试图在自学游戏编程的过程中展示吃 bean 人角色著名的张嘴/闭合动画。

我正在做的是绘制张开嘴的图像,然后在完全相同的 (x/y) 位置重新绘制闭合的嘴图像。但这不起作用,我只看到一直闭着嘴的动画。

如果我将其放入循环中,系统就会卡住,并且您会看到张开嘴的图像闪烁,但您看不到图像被替换。

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

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

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

最佳答案

你必须在两张图片之间 sleep 。否则你只会看到最后绘制的图像。

例如。

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

关于java - 如何用双缓冲在Java中显示Pacman的张嘴/闭嘴动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/622375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com