蛇运动平稳

我创造了我的第一款游戏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)

3 years ago

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