【问题标题】:Snake smooth movement蛇平滑运动
【发布时间】:2018-09-30 04:58:29
【问题描述】:

我创建了我的第一个游戏 Snake,它运行良好,但我想让蛇的动作流畅,所以..

我创建了具有 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;
        }

其中 x[] 和 y[] 是具有蛇坐标的数组(头部是 x[0] 和 [0]),点 - 蛇的长度(包括身体和头部)并且 DOT_SIZE 是具有值 == 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 像素的步长移动。 我的主要想法是每 25 毫秒以 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 个像素的步长使蛇的运动平滑,并且能够以 10x10 像素的图像分辨率每 10 个像素将蛇转向另一个方向?

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

【问题讨论】:

    标签: java user-interface animation awt smoothing


    【解决方案1】:

    为转弯段创建图块[使用一个并旋转它,或 4 个用于不同的转弯]。保持转弯队列。从头部拉到第一回合。从第一轮到下一轮,直到你用完蛇来画。当蛇的末端是轮流瓦时,从队列中移除该轮瓦。

    【讨论】:

    • Hmm.. 如果我使用例如 5 张分辨率为 2x10 像素的图像而不是一张分辨率为 10x10 像素的图像,这会产生很大的影响吗? (但这将使我能够更好地为蛇转弯段设置动画)。你刚刚给了我一个关于队列的好主意,并为转弯段创建了另一个图像。但是我的身体图像在中间有一个点,所以我可能应该在几个不同的图像上剪切转向片段,我将尝试制作动画。这就是我问这个的原因。
    • 如果蛇身上没有图案,您可以围绕网格的内角旋转这 5 个矩形。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多