你好学校运动我需要创建一个游戏,我决定创建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
}
}
答案 0 :(得分:2)
您应该查看drawOval
和fillOval
,而不是使用drawArc
和fillArc
。
关于嘴巴的动画:鉴于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 :(得分:1)
所以这里有一些事情你需要解决。
<强> 1。绘图字符
我只会在这里描绘Pacman。
考虑到Pacman游戏,Pacman的角色有两种状态 - 嘴巴闭合,嘴巴张开(在每个主要方向!)。这对于我们稍后动画Pacman很重要,所以首先,让我们使用Graphics library中的fillArc
方法建立我们的pacman形状。
开口吃豆子的例子:
g.setColor(Color.yellow);
g.fillArc(0,0,150,150,30,300);
这将在窗口的左上角创建pacman,pacman的嘴朝向屏幕右侧。 fillArc方法的最后两个参数控制此开口 - 第五个参数是起始角度,第六个参数是整个弧的角度。由此可以推断,起始角度θ是从弧形中心到屏幕右侧的水平线。还记得从数学上看,一个完整的圆是360度。
使用此信息,尝试向上,向下和向左绘制张开嘴的Pacman。在你这样做之后,填满整个弧线以画出Pacman,嘴巴闭合。还可以考虑使用图形库中的其他方法来绘制鬼魂!
<强> 2。动画吃豆人
对于这个任务,你可能想要实现某种Thread结构来动画Pacman,这比你在这里演示的要复杂得多。由于我们不知道您的程序规格,并且您还没有展示任何与动画有关的代码,我对此进行更深入的讨论犹豫不决。但是,我将引导您了解有关此事的一些链接:
答案 2 :(得分:0)