我试图在屏幕上直线移动一个精灵,朝着我触摸屏幕的位置,我做的是在每个循环中更新(),它检查当前精灵的位置xy = =到目的地x,y.如果它没有精灵的x和y ……
事情是..它不是直线移动…因为有些情况下x或y坐标首先到达目的地x或y …我如何改变它以便x和y都相遇目的地在一起?
事情是..它不是直线移动…因为有些情况下x或y坐标首先到达目的地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
这是最原始的版本.本文包含一个更好的通用算法,您应该看一下.
原文地址:https://www.jb51.cc/java/239911.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。