Java 蛇行

Java 蛇行,java,user-interface,animation,awt,smoothing,Java,User Interface,Animation,Awt,Smoothing,我已经创造了我的第一个游戏蛇,它工作得很好,但我想使蛇的动作平滑,所以 我已经创建了250毫秒延迟的计时器: 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()

我已经创造了我的第一个游戏蛇,它工作得很好,但我想使蛇的动作平滑,所以

我已经创建了250毫秒延迟的计时器:

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;
        }
左、右、上、下方向-是我按下键后改变的变量,允许我控制蛇。之后,我用上面显示的代码重新绘制框架(在框架处绘制snake)

因此,我的蛇以每250ms 10像素的步幅移动。 我的主要想法是以每25ms 1个像素的步幅使蛇的运动平滑,但其他事情不应该改变。我的意思是,举例来说,我可以每10个像素将我的蛇转向另一个方向(应该是因为图像分辨率是10x10像素)。我已经创建了counter what repaits frame 10次,然后调用其他方法(按键、在frame处设置苹果等),并插入DOT_SIZE=1以平滑地移动snake。但是问题出现了,因为图像分辨率为10x10像素,所以我的图像开始在这段代码中相互重叠(1像素的步骤,图像分辨率为10x10像素):

for (int z = dots; z > 0; z--) {
            x[z] = x[(z - 1)];
            y[z] = y[(z - 1)];
        }
因此,问题是:

如何以1像素的步长使蛇的运动平滑,并能够以10x10像素的图像分辨率每10像素将蛇转向另一个方向


在我将蛇转向另一个方向后,如何使拐角变得平滑?

创建用于旋转线段的平铺[使用一个平铺并旋转它,或为不同的旋转创建4个平铺]。排队轮候。从头部到第一个回合抽签。从第一个回合到下一个回合,直到你的蛇用完为止。当蛇的末端是轮转平铺时,将该轮转平铺从队列中移除

嗯。。如果我使用5幅分辨率为2x10像素的图像,而不是一幅分辨率为10x10像素的图像,这会有很大影响吗?(但这将使我能够更好地设置蛇转弯段的动画)。你刚才给了我一个关于排队和创建另一个转弯段图像的好主意。但是我的身体图像在中间有一个点,所以我可能会在几个不同的图像上剪下片段,我会尝试动画。这就是为什么我问这个问题。如果蛇上没有图案,你可以围绕网格的内角旋转这5个矩形。
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;
        }
for (int z = dots; z > 0; z--) {
            x[z] = x[(z - 1)];
            y[z] = y[(z - 1)];
        }