gpt4 book ai didi

c++ - 如何相对移动角度?

转载 作者:行者123 更新时间:2023-11-28 08:09:05 25 4
gpt4 key购买 nike

我一直在互联网上查找如何以指定距离的角度从 A 点移动到 B 点。但是,当我尝试对其进行编码时,相机就乱七八糟,我在随机方向移动。我在 C++ 中使用 SDL/OpenGL,这是我的播放器功能。现在,我正试图让玩家沿着角度向前移动。

void player_action()
{

if (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEMOTION:
{
player.rotxl = (screen->w)/2;
player.rotxd = event.motion.x - player.rotxl;
player.rotx = player.rotx + (player.rotxd/4);
if (player.rotx < 0)
{
player.rotx = player.rotx + 360;
};
if (player.rotx > 360)
{
player.rotx = player.rotx - 360;
}
};
break;

case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_w:
{player.zvel = 8.0f;}; break;
case SDLK_a:
{player.xvel = 8.0f;}; break;
case SDLK_s:
{player.zvel = -8.0f;}; break;
case SDLK_d:
{player.xvel = -8.0f;}; break;
case SDLK_ESCAPE:
{running = false;}; break;
default: break;

}; break;

case SDL_KEYUP:
switch(event.key.keysym.sym)
{
case SDLK_w:
{player.zvel = 0.0f;}; break;
case SDLK_a:
{player.xvel = 0.0f;}; break;
case SDLK_s:
{player.zvel = 0.0f;}; break;
case SDLK_d:
{player.xvel = 0.0f;}; break;
default: break;
};
break;
};

};

player.x = player.x + float(player.zvel*cos((double)player.rotx));
player.z = player.z + float(player.zvel*sin((double)player.rotx));

glRotatef(player.rotx, 0.0f, 1.0f, 0.0f);
glTranslatef(player.x, player.y, player.z);

SDL_WarpMouse((screen->w/2), (screen->h/2));
};

最佳答案

如果我是正确的,数学函数 sincos 都以弧度表示角度,不是 player.rotx 好像是。尝试以下操作:

player.x = player.x + float(player.zvel*cos((double)player.rotx*0.0174532925));
player.z = player.z + float(player.zvel*sin((double)player.rotx*0.0174532925));

我们将 player.rotx 乘以 pi/180,这就是我们将度数转换为弧度的方式。

不确定这是否是您唯一的问题,但它肯定是其中之一。

关于c++ - 如何相对移动角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com