首先,如果我的英语不是很好,我很抱歉,因为我是巴西人,所以我会试着正确地描述我的问题。
好吧,我正在开发一款基于2D平铺的游戏。在实体中,我正在进行Projectile
课程。目前,弹丸可以向北/向南/向西/向东移动,但我需要让它向任何方向移动。我搜索了一下,但没有找到任何关于Ray 2D的好教程或例子(仅发现关于基于光线的照明)。
例如:
x
\ x
\ /
\ /
f f
[x = projectile start position, f = projectile end position]
假设射弹由X和Y组成(宽度和高度无关紧要),并且每个蜱都会移动,我怎样才能实现这个目标?
答案 0 :(得分:1)
我对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);
}
答案 1 :(得分:0)
假设你问每个帧如何移动一个固定数量的点,这很简单:
射弹已经有一个X和Y(它的位置),我建议为它的方向/速度创建另一个X和Y然后在每个帧上将速度加到位置(Position += velocity
)。因为您要添加到当前位置,所以方向/速度对于该对象是局部的,例如,如果您想要正确,只需使方向/速度的X为正。
我不认为使用光线进行简单移动是一种非常有效的方法,除非您要实现与瓷砖的碰撞(如果是这样,链接将有助于此) - 无论如何您都需要存储方向。
我建议查找向量(基本上是X和Y作为一类有用的函数)。它们对于存储具有坐标(如位置和方向)的任何东西都非常有用 Here是我在学习光线时所遵循的教程,它是向量的一个很好的介绍和编程的一般数学方面。