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环境,我想在这里移动玩家角色,就像你在暗黑破坏神中一样。仅使用操纵杆。那么,这意味着-操纵杆的水平轴使角色绕其垂直轴旋转,操纵杆的垂直轴使玩家向前/向后移动?