Vector 如何创建光线/方向二维系统?
首先,如果我的英语不是很好,我很抱歉,因为我是巴西人,所以我会尽量体面地描述我的问题 嗯,我正在开发一个基于2D瓷砖的游戏。在实体中,我正在创建一个Vector 如何创建光线/方向二维系统?,vector,language-agnostic,raytracing,projectile,Vector,Language Agnostic,Raytracing,Projectile,首先,如果我的英语不是很好,我很抱歉,因为我是巴西人,所以我会尽量体面地描述我的问题 嗯,我正在开发一个基于2D瓷砖的游戏。在实体中,我正在创建一个投射物类。现在,炮弹可以向北/南/西/东移动,但我需要让它向任何方向移动。我搜索了一些,但没有找到任何关于Ray2D的好教程或示例(只找到基于光线的照明) 例如: x \ x \ / \ / f f [x = projectile start positio
投射物类。现在,炮弹可以向北/南/西/东移动,但我需要让它向任何方向移动。我搜索了一些,但没有找到任何关于Ray2D的好教程或示例(只找到基于光线的照明)
例如:
x
\ x
\ /
\ /
f f
[x = projectile start position, f = projectile end position]
假设射弹由X和Y组成(宽度和高度无关紧要),并且会移动每个刻度,我如何才能做到这一点?我没有lwjgl的经验
然而,在我看来这是一个数学问题。所以如果你知道“轨迹”的距离和角度,你可以从极坐标(距离,角度)转换到笛卡尔坐标(x,y)
转换很简单:
x=距离*cos(角度)
和
y=距离*sin(角度)
。
然后只需添加起始坐标的x和y
我建议您尝试一下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是一类有用的函数)。它们对于存储任何带有坐标(如位置和方向)的东西都非常有用。
这是我想学习光线时遵循的一个教程,它是对向量和编程的一般数学方面的一个很好的介绍。我不知道你想要什么信息。它是如何绘制投射物的轨迹的?或者你需要知道如何计算轨迹吗?有一点你的来源与提示,你是卡住了将是有益的。我需要计算的轨道尝试阅读this@HarryBlargle我认为OP不想知道如何划定界限。加上OP已经提到了LWJGL,所以后端渲染是这样的。@LeeALlan您可以使用该算法来查找投射物在每个刻度上应该位于的位置