我创造了我的第一款Snake游戏,效果非常好,但是我想让蛇的动作变得平滑,所以..
我创建了延迟250ms的计时器:
timer = new Timer(250, this);
timer.start();
导入两个图像10x10像素:
ImageIcon iid = new ImageIcon("dot.png");
dot = iid.getImage();
ImageIcon iih = new ImageIcon("head.png");
head = iih.getImage();
初始化蛇体和头部坐标:
dots = 3;
for (int z = 0; z < dots; z++) {
x[z] = 50 - z * DOT_SIZE;
y[z] = 50;
}
其中x []和y []是具有蛇坐标的数组(头部是x [0]和[0]),点 - 蛇长度(包括身体和头部)和DOT_SIZE是const值== 10,因为头部和身体图像是10x10像素。
然后我在画框画蛇:
for (int z = 0; z < dots; z++) {
if (z == 0) {
g.drawImage(head, x[z], y[z], this);
} else {
g.drawImage(dot, x[z], y[z], this);
}
}
然后每250毫秒重新计算一次蛇坐标:
for (int z = dots; z > 0; z--) {
x[z] = x[(z - 1)];
y[z] = y[(z - 1)];
}
if (leftDirection) {
x[0] -= DOT_SIZE;
}
if (rightDirection) {
x[0] += DOT_SIZE;
}
if (upDirection) {
y[0] -= DOT_SIZE;
}
if (downDirection) {
y[0] += DOT_SIZE;
}
左,右,上,下方向 - 是我按下键后变化的变量,让我控制蛇。在我用上面显示的代码重新绘制框架后(在框架上绘制蛇)。
所以我的蛇以每250毫秒10像素的步长移动。 我的主要想法是每隔25ms以1像素的步长使蛇运动平稳,但其他事情不应该改变。我的意思是,例如,我能够每隔10个像素将我的蛇变成另一个方向(这应该是因为图像分辨率是10x10像素)。我创建了计数器重新绘制框架10次,然后调用其他方法(按键,在框架等设置苹果)并插入DOT_SIZE = 1以移动蛇平滑。但问题出现是因为图像分辨率是10x10像素,因此我的图像在这段代码中开始相互重叠(1像素的步长,图像分辨率为10x10像素):
for (int z = dots; z > 0; z--) {
x[z] = x[(z - 1)];
y[z] = y[(z - 1)];
}
所以问题是:
如何通过1像素的步长使蛇的运动平滑,并且能够每10像素将蛇变成另一个方向,图像分辨率为10x10像素?
在我将蛇转向另一个方向后,如何制作角落?
答案 0 :(得分:0)
创建用于转动线段的图块[使用一个并旋转它,或者对于不同的转弯使用4个]。保持一个转弯队列。从头部到第一个转弯。从第一个转弯到下一个转弯,直到你用完蛇来画。当蛇的末端反过来瓦片从队列中移除那个转动瓦片。