C++11 c++;SDL如何创建从a点到b点的矢量

C++11 c++;SDL如何创建从a点到b点的矢量,c++11,sdl-2,C++11,Sdl 2,我制作了一个名为Player的对象和一个名为Zombie的对象,我想为Player添加一个射击功能,子弹从point Player移动到我拿着鼠标的点,这是如何实现的?让我们先消除其他方向,想象一下方向是从左到右。 首先需要获得鼠标的位置,可以使用 SDL_GetMouseState(int* placeX, int* placeY) 这会将鼠标的x位置推到placeX,将鼠标的y位置推到placeY 现在你还需要得到玩家的位置,这可以通过在循环中获得玩家的纹理的矩形来实现。 因此,如果角色处

我制作了一个名为Player的对象和一个名为Zombie的对象,我想为Player添加一个射击功能,子弹从point Player移动到我拿着鼠标的点,这是如何实现的?

让我们先消除其他方向,想象一下方向是从左到右。 首先需要获得鼠标的位置,可以使用

SDL_GetMouseState(int* placeX, int* placeY)
这会将鼠标的x位置推到placeX,将鼠标的y位置推到placeY

现在你还需要得到玩家的位置,这可以通过在循环中获得玩家的纹理的矩形来实现。 因此,如果角色处于

(x,y)(0,10)

带着

(w,h)(20,40)

子弹的来源就在角色的右中角,这使得它在

(20,20)

那么实际的当前项目符号源位于

(x,y)->(20,30)(基本上是rect.x+bulletsource.x和rect.y+ 来源:Bullettle.y)

现在你要做的就是

if(bullet.x < placeX)//this makes it look like the bullet is moving to the right
{
bullet.x++ //this moves the bullet closer to the right
Redraw bullet //you have to redraw to see the changes
}
if(bullet.x
对y做同样的事情,它实际上不必是if语句

当您有多个项目符号方向时,同样的逻辑也适用

您只需将项目符号的来源视为x轴和y轴的中心,并检查鼠标单击是否位于某个象限(对角线)内或轴的直线(直项目符号)附近


一旦你知道鼠标所在的象限或直线,你只需更改要使用的纹理(对角线子弹朝向东北或只是一个普通的简单子弹朝向北方)。

谢谢你的帮助,但我使用atan2解决了这个问题,并计算了角度。当我得到角度时,我只是将速度*cos(角度)的值添加到x变量,将速度*sin(角度)的值添加到y变量。

计算光标和播放器之间的像素距离。确定子弹路径的适当坡度,并选择任意速度。将项目符号向下移动一定的
x
,向下移动一定的
y
(y/x应与坡度匹配)。我假设你只关心线性路径。谢谢!但这真的只适用于45度吗?如果我试着射击一些东西,比如说相对于玩家12度,子弹会不会上升45度,直到位置正确,然后直接向右移动?你可以修改代码,使它无缝地向12度以上的位置移动。你需要一些数学知识:)。