如何进行射线/方向2D系统?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何进行射线/方向2D系统?相关的知识,希望对你有一定的参考价值。

首先,我很抱歉,如果我的英语不是很好,因为我是巴西人,所以我会试着正确地描述我的问题。

好吧,我正在开发一个基于2D平铺的游戏。在实体内,我正在制作一个Projectile课程。目前,弹丸可以向北/向南/向西/向东移动,但我需要让它向任何方向移动。我搜索了一下但没有找到关于Ray 2D的任何好的教程或例子(仅发现关于基于光线的照明)。

例如:

x        
            x
           /
          /
    f     f

[x = projectile start position, f = projectile end position]

假设弹丸由X和Y组成(宽度和高度无关紧要)并且每个蜱都会移动,我该如何实现呢?

答案

我没有lwjgl的经验。

但是,这看起来像是一个数学问题。因此,如果你知道“轨迹”的距离和角度,你可以从极坐标(距离,角度)转换为笛卡尔坐标(x,y)。

转换很简单:x = distance * cos(angle)y = distance * sin(angle)。然后你只需要添加起始坐标的x和y。

我建议玩examples of processing以获得lwjgl解决方案的感觉。

作为处理的入门者,您可以使用以下代码段:

//start coordinates
float startx;
float starty;

//radius
float r;
//angle
float theta;


void setup() {
    size(640, 360);
    background(0);

   // Initialize all values
   startx = width/2;
   starty = height/2;
   r = random(startx);
   theta = -0.5;
}

void draw() {
    // Translate the origin point to the center of the screen
    translate(startx, starty);

   // Convert polar to cartesian
   float x = r * cos(theta);
   float y = r * sin(theta);

   // Draw the ellipse at the cartesian coordinate
   ellipseMode(CENTER);
   fill(200);
   ellipse(x, y, 12, 12);

   color c = #FFCC00;
   stroke(c);
   line(0,0,x,y);
}
另一答案

假设你问每个帧如何移动一个固定量的点,这很简单:射弹已经有一个X和Y(它的位置),我建议为它的方向/速度创建另一个X和Y然后在每个帧上添加到位置的速度(Position += velocity)。因为您要添加到当前位置,所以方向/速度对于该对象是局部的,例如,如果您想要直接使方向的/速度X为正。

我不认为使用光线进行简单移动是一种非常有效的方法,除非你要实现与瓷砖的碰撞(如果是这样,链接将有助于此) - 你仍然需要存储方向。

我建议查找向量(基本上是X和Y作为一类有用的函数)。它们对于存储具有坐标(如位置和方向)的任何内容非常有用。 Here是我在学习光线时所遵循的教程,它是向量的一个很好的介绍和编程的一般数学方面。

以上是关于如何进行射线/方向2D系统?的主要内容,如果未能解决你的问题,请参考以下文章

Unity---2d射线检测

Unity射线检测(持续更新)

unity为啥射线投射到UI上面会返回空?

unity中的射线检测

Unity——UI的交互

如何在片段着色器中进行自定义模板测试