0

你好,学校练习我需要创建一个游戏,我决定创建 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

}

}
4

3 回答 3

2

而不是使用drawOvaland fillOval,您应该看看drawArcand fillArc

请参阅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);

这样,吃豆人的嘴会在迷宫中移动一段他自己大小的距离时,会自动进行一次开合循环。(您可能需要稍微调整数字以适应您的设置。)

当然,你仍然需要一个线程来运行整个游戏,但是吃豆人嘴的动画也可以这样完成,不需要额外的线程。

于 2012-10-08T18:53:51.907 回答
1

因此,这里有几件事需要您解决。

1. 绘制人物

我只会在这里解决绘制 Pacman 的问题。

想想吃豆人游戏,吃豆人的角色有两种状态——闭嘴和张嘴(在每个基本方向上!)。这对于我们稍后为吃豆人制作动画时很重要,所以首先,让我们使用图形库fillArc中的方法来建立我们的吃豆人形状。

张嘴吃豆人的例子:

  g.setColor(Color.yellow);
  g.fillArc(0,0,150,150,30,300);

这将在窗口的左上角创建 pacman,pacman 的嘴朝向屏幕的右侧。fillArc 方法的最后两个参数控制这个开口——第 5 个参数是起始角度,第 6 个参数是整个弧的角度。您可以由此推断,起始角 0 是从圆弧中心到屏幕右侧的水平线。还要记住数学上的一个完整的圆是 360 度。

使用这些信息,尝试向上、向下和向左画出张开嘴的吃豆人。完成此操作后,填充整个弧线以画出 Pacman 的嘴巴。还要考虑图形库中可用于绘制鬼魂的其他方法!

2. 动画吃豆人

对于这个任务,您可能想要实现某种 Thread 结构来为 Pacman 设置动画,这比您在此处演示的要复杂得多。由于我们不知道您的程序规范,而且您还没有演示任何与动画相关的代码,所以我不愿进一步说明这一点。但是,我将引导您访问有关此问题的一些链接:

于 2012-10-08T21:10:27.323 回答
0

我建议利用Area/ Path2DAPI。

看看图形 2D

您可以查看此答案中的示例代码作为示例

于 2012-10-08T19:10:23.947 回答