Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 如何创建光线/方向二维系统?_Vector_Language Agnostic_Raytracing_Projectile - Fatal编程技术网

Vector 如何创建光线/方向二维系统?

Vector 如何创建光线/方向二维系统?,vector,language-agnostic,raytracing,projectile,Vector,Language Agnostic,Raytracing,Projectile,首先,如果我的英语不是很好,我很抱歉,因为我是巴西人,所以我会尽量体面地描述我的问题 嗯,我正在开发一个基于2D瓷砖的游戏。在实体中,我正在创建一个投射物类。现在,炮弹可以向北/南/西/东移动,但我需要让它向任何方向移动。我搜索了一些,但没有找到任何关于Ray2D的好教程或示例(只找到基于光线的照明) 例如: x \ x \ / \ / f f [x = projectile start positio

首先,如果我的英语不是很好,我很抱歉,因为我是巴西人,所以我会尽量体面地描述我的问题

嗯,我正在开发一个基于2D瓷砖的游戏。在实体中,我正在创建一个
投射物
类。现在,炮弹可以向北/南/西/东移动,但我需要让它向任何方向移动。我搜索了一些,但没有找到任何关于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您可以使用该算法来查找投射物在每个刻度上应该位于的位置