C++ 如何使用模拟杆(操纵杆)输出值使用变换矩阵旋转对象?

C++ 如何使用模拟杆(操纵杆)输出值使用变换矩阵旋转对象?,c++,visual-studio-2017,C++,Visual Studio 2017,假设模拟棒输出值 float xaxisval = controller->left_stick_x_axis(); //-1 is left, 1 is right float yaxisval = controller->left_stick_y_axis(); //-1 is up, 1 is down 值从0到1,可用于灵敏度 我在3D环境中沿着操纵杆的方向移动角色,就像在暗黑破坏神这样的游戏中一样。我从X和Z位置添加和收回这些值来移动他。但是这个角色总是面对同样的死亡。

假设模拟棒输出值

float xaxisval = controller->left_stick_x_axis(); //-1 is left, 1 is right
float yaxisval = controller->left_stick_y_axis(); //-1 is up, 1 is down
值从0到1,可用于灵敏度

我在3D环境中沿着操纵杆的方向移动角色,就像在暗黑破坏神这样的游戏中一样。我从X和Z位置添加和收回这些值来移动他。但是这个角色总是面对同样的死亡。 如何使用这些值并将其转换为度数

xaxisval += controller->left_stick_x_axis() /100;
yaxisval += controller->left_stick_y_axis() /100;
distAdjust.SetTranslation(Vector4(xaxisval, 0, yaxisval));

rotateAdjust.RotationX(rotateDegrees);

player_->set_transform(player_transform *distAdjust *rotateAdjust)

我的问题是,移动只在固定旋转的情况下起作用,如果我旋转对象,那么它会移动到不同的方向

我不知道你的函数“rotateAdjust.RotationX(rotatedgrees);”到底是什么

但是,对于每一个游戏周期,你应该从你的操纵杆上取0到1的值,然后根据你的旋转速度乘以一个恒定的角度

const float Angle = 1.0f; // Or whatever you want. Set more to increase rotation speed.

...

// Game loop
while ( true )
{
  ...

  float xSensitivity = controller->left_stick_x_axis(); // example 0.33f for that cycle

  myGuy.xRotate(Angle * xSensitivity);

  ...
}

“角度”是一个常数,可以用度或弧度表示,具体取决于旋转函数。

是否尝试从x/y轴值计算角度?如果是这样,则来自
atan2
可以执行此操作。请查看上的示例,具体说明您想要什么样的运动。我想这是2D?@Nico不,这是一款深受喜爱的透视游戏,3D环境,我想在这里移动玩家角色,就像你在暗黑破坏神中一样。仅使用操纵杆。那么,这意味着-操纵杆的水平轴使角色绕其垂直轴旋转,操纵杆的垂直轴使玩家向前/向后移动?