我正试图根据用户的触摸位置将对象移动到一个新的x,y位置,但我遇到了一堵砖墙。
目前,我正在手动编码轴的移动,但它产生了一个脚本,"x然后y",导致了一个平方移动。理想情况下,我想获得一条到达触摸位置的线性路径,而不是正方形。
我的基本移动计算在这里:
//check target not met on x axis
if(spriteX != spriteTargetX){
//check if its left or right
if(spriteTargetX<spriteX){
spriteX -=spriteSpeed;
}else{
spriteX +=spriteSpeed;
}
}
if(spriteY != spriteTargetY){
//check if its up or down
if(spriteTargetY<spriteY){
spriteY -=spriteSpeed;
}else{
spriteY +=spriteSpeed;
}
}
上面的算法总是导致正方形的移动。老实说,我不知道我是否应该进行某种距离/角度计算。有什么想法吗?
一种简单的方法是将运动方向表示为单位向量,并乘以速度。我将列出基本步骤,并给出一个示例,其中您处于(1,1)
,并希望以2
:的速度移动到(4,5)
- 获取目的地和当前目的地之间的差异。(diff.xanddiff.y(
diff.x = 3 diff.y = 4
- 获取从目的地到当前目的地的总距离
dist = 5 ( sqrt(3^2 + 4^2) = 5 )
- 将diff.x和diff.y除以距离
diff.x = 0.6 diff.y = 0.8
- 将diff.x和diff.y乘以所需速度
diff.x = 1.2 diff.y = 1.6
- 将diff.x和diff.y分别添加到sprite的x和y
sprite.x = 2.2 sprite.y = 2.6