蛇运动平稳

时间:2018-04-19 15:53:03

标签: java user-interface animation awt smoothing

我创造了我的第一款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像素?

在我将蛇转向另一个方向后,如何制作角落?

1 个答案:

答案 0 :(得分:0)

创建用于转动线段的图块[使用一个并旋转它,或者对于不同的转弯使用4个]。保持一个转弯队列。从头部到第一个转弯。从第一个转弯到下一个转弯,直到你用完蛇来画。当蛇的末端反过来瓦片从队列中移除那个转动瓦片。