我的游戏中有一个角色必须顺利旋转才能达到理想的角度.考虑angle当前角度和touchAngle所需角度始终在0到360之间.我想在每次游戏更新中将+ 1/-1添加到当前角度以获得所需的角度touchAngle.问题首先是它必须选择方向,它必须在0到360之间.这是我的伪代码:
int touchAngle;
float angle;
public void update()
{
if ((int)angle != touchAngle) angle += ???
}
Run Code Online (Sandbox Code Playgroud)
由于您的值在整个时间间隔内始终是标准化的,因此[0 360]这不应该太难.您只需要区分两种不同的情况:
angle < touchAngle
angle > touchAngle
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我们想要逆时针旋转,因此必须进行更新angle =+ 1(假设您希望每个更新周期都转1).在第二种情况下,我们想要顺时针转动,所以更新应该是angle -= 1.
问题是这并不总是最短的旋转方式.例如,如果:
angle == 359
touchAngle == 1
Run Code Online (Sandbox Code Playgroud)
我们不想一直使用358,357,356 ...而是我们想要逆时针旋转2个单位:360,1.这可以通过比较角度之间的距离来实现abs(angle - touchAngle).
如果这个值大于180它意味着我们走错了方向,那么我们必须这样做
if(angle < touchAngle) {
if(abs(angle - touchAngle)<180)
angle += 1;
else angle -= 1;
}
else {
if(abs(angle - touchAngle)<180)
angle -= 1;
else angle += 1;
}
Run Code Online (Sandbox Code Playgroud)
当然所有这些直到((int)angale != touchAngle).我可能在案件中犯了错误,但这是原则.
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |