java – 在线性路径中从一个点移动一个对象
发布时间:2020-05-24 08:56:48 所属栏目:Java 来源:互联网
导读:我试图在屏幕上直线移动一个精灵,朝着我触摸屏幕的位置,我做的是在每个循环中更新(),它检查当前精灵的位置xy = =到目的地x,y.如果它没有精灵的x和y …… 事情是..它不是直线移动…因为有些情况下x或y坐标首先到达目的地x或y …我如何改变它以便x和y都相遇目的
|
我试图在屏幕上直线移动一个精灵,朝着我触摸屏幕的位置,我做的是在每个循环中更新(),它检查当前精灵的位置xy = =到目的地x,y.如果它没有精灵的x和y ……
我目前的精灵对象的伪代码 destX = destination X
destY = destination Y
posX = current X
posY = current Y
public void update(){
if(destX > posX && destY < posY)
{
posX++;
posY--;
}
else if (destX > posX && destY > posY){
posX++;
posY++;
}
else if(destX < posX && destY > posY)
{
posX--;
posY++;
}
else if(destX < posX && destY < posY){
posX--;
posY--;
}
else if(destX < posX)
posX--;
else if(destX > posX)
posX++;
else if(destY < posY)
posY--;
else if(destY > posY)
posY++;
解决方法退房: http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm这个简单的算法将告诉你两点之间的一条线上的每个X,Y坐标.您可以使用此算法计算它需要访问的所有位置,将坐标存储在数组中,并在更新位置时迭代数组. 来自文章: function line(x0,x1,y0,y1)
int deltax := x1 - x0
int deltay := y1 - y0
real error := 0
real deltaerr := abs (deltay / deltax) // Assume deltax != 0 (line is not vertical),// note that this division needs to be done in a way that preserves the fractional part
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
if error ≥ 0.5 then
y := y + 1
error := error - 1.0
这是最原始的版本.本文包含一个更好的通用算法,您应该看一下. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
