假设我有一个向量(x,y)并且它通过旋转与原点对齐(例如,向上指向30度)。
如果我想将该向量相对于方向移动一个单位(因此,一个单位向前朝向30度),我将如何进行此操作?
我正在努力将一个简单的第三人称游戏放在一起,我希望能够旋转角色并将其向前移动而不管轮换如何,我对于如何做到这一点感到很失落。
编辑:
在回答了这个问题之后,我继续探究如何进行向后,向左和向右移动,所以我想如果有人需要帮助的话,我会把它粘在这里作为参考。
鉴于Gunther2的代码, 要获得向后运动,只需从当前位置减去位移:
position -= displacement;
要获得左侧运动,请将位移变量更改为
displacement.x = (float)Math.Sin(angle + PI/2);
displacement.y = (float)Math.Cos(angle + PI/2);
如果Sin / Cos接受度数而不是弧度,则将PI / 2替换为90.
然后减去位移:
position -= displacement;
要获得正确的动作,只需按照相同的步骤添加新的位移:
position += displacement;
答案 0 :(得分:4)
首先你需要一个代表角度的矢量:
Vector2 displacement;
displacement.x = (float)Math.Sin(angle);
displacement.y = (float)Math.Cos(angle);
然后,由于此向量(x,y)的长度始终为1,因此将其乘以您行进的距离。如果你想旅行1,那么X和Y已经是他们需要的尺寸了。
displacement *= speed; // Assuming your Vector2 *= operator supports a scalar
将位移添加到当前位置:
position += displacement;