你好,我需要创建一个游戏,我决定创建Pacman。一切都很顺利,但有一件事我做不到,那就是画一个帕克曼和他的鬼魂。。我做了一个椭圆形的,但现在怎么办?我希望pacman的嘴也能随着它的移动而张开和闭合。有人能帮忙画这个吗?
以下是我现在所拥有的:
package h04PacMan;
import java.awt.*;
public class DrawPacMan {
public void drawPacMan(Graphics g, int x, int y, Color color) {
g.setColor(color); // set color
g.fillOval(x, y, 50, 50); // paint
g.setColor(Color.black);
g.drawOval(x, y, 50, 50); // outline
// mouth?
}
public void drawGhost(Graphics g, int x, int y, Color color) {
g.setColor(color); // color
// here goes shape
}
}
您应该了解drawArc
和fillArc
,而不是使用drawOval
和fillOval
。
请参阅java.awt.Graphics.
关于嘴巴的动画:考虑到pacman不断移动,你可以将pacman的位置与正弦函数结合起来,得到一个漂亮而平滑的嘴巴运动,比如:
angle = 20 * (Math.sin((x + y)*2*Math.PI/50) + 1); # alt. betw. 0 and 40
g.fillArc(x, y, 50, 50, angle/2, 360-angle);
这样,当Pacman在迷宫中移动一段自己大小的距离时,他的嘴会自动做一个开合循环。(你可能需要稍微调整一下数字以适应你的设置。)
当然,你仍然需要一个线程来运行整个游戏,但Pacman嘴巴的动画也可以通过这种方式完成,而不需要额外的线程。
因此,这里有几件事需要解决。
1.绘制字符
我只在这里介绍绘画Pacman。
想想吃豆人游戏,吃豆人的角色有两种状态——闭着嘴和张开嘴(每个基本方向!)。这对于我们稍后制作Pacman动画时非常重要,因此,首先,让我们使用图形库中的fillArc
方法来建立我们的Pacman形状。
开口吃豆人示例:
g.setColor(Color.yellow);
g.fillArc(0,0,150,150,30,300);
这将在窗口的左上角创建pacman,pacman的嘴朝向屏幕的右侧。fillArc方法的最后两个参数控制这个开口——第五个参数是起始角度,第六个参数是整个圆弧的角度。由此可以推断,起始角度0是从圆弧中心到屏幕右侧的水平线。还要记住,从数学上讲,一个完整的圆圈是360度。
利用这些信息,试着画张着嘴的吃豆人,面朝上、面朝下、面朝左。完成后,填满整个弧线,闭上嘴巴画出吃豆人。还可以考虑图形库中可以用来绘制重影的其他方法!
2.Pacman动画
对于这个任务,你可能想要实现某种线程结构来动画Pacman,这比你在这里演示的要复杂得多。由于我们不知道你的程序规范,而且你还没有演示任何与动画相关的代码,我很犹豫是否要进一步阐述。然而,我将引导您访问有关此事的一些链接:
- 有关一般概述,请查看Java教程-并发
- 如果您在这个项目中使用Swing,那么您可能希望在线程中使用SwingWorker
我建议利用Area
/Path2D
API。
看看图形2D
你可以看看这个答案中的示例代码,看看