我正在为Android制作类似小行星的游戏。我正在阅读“安卓游戏编程”。我正在实施交叉数算法。应用程序已完成并且可以正常运行,但我不明白这部分代码:
if (((cp2.currentPoint.y > cp1.currentPoint.y) !=
(cp2.currentPoint2.y > cp1.currentPoint.y)) &&
(cp1.currentPoint.x < (cp2.currentPoint2.x - cp2.currentPoint2.x) *
(cp1.currentPoint.y - cp2.currentPoint.y) / (cp2.currentPoint2.y - cp2.currentPoint.y) + cp2.currentPoint.x))
cp1.currentPoint
是第一个对象的第一个顶点(因此它是一个点),cp2.currentPoint
是第二个对象的第一个顶点,cp2.currentPoint2
是第二个点。这两点构成了我们的路线。
这部分我不明白:
(cp2.currentPoint2.x - cp2.currentPoint2.x)
结果总是为0,为什么我要这样做?
答案 0 :(得分:0)
如你所说,它总是为零,你不需要它。也许其他一些价值观可能存在但却被遗忘了。所以只需要把它拿出去清理你的代码。
答案 1 :(得分:0)
我读了这本书。作者(约翰·霍顿(John Horton)”在第331页写道:“好吧,现在,我们可以依靠数学家设计和完善的巧妙算法,而不仅仅是我自己。”我认为,那本书中与数学相关的代码非常糟糕,John不会自欺欺人(您的代码可以重写:
if (((cp2.currentPoint.y > cp1.currentPoint.y) !=
(cp2.currentPoint2.y > cp1.currentPoint.y))
&&
((cp1.currentPoint.x < cp2.currentPoint.x)||
(cp1.currentPoint.x < cp2.currentPoint.x)))
'if'语句的第一行是检查 点的y位置在所形成的线的高度内 两点。其他两行确保虚构的来源 ray始终位于要测试的行的左侧。
此外,约翰·霍顿(John Horton)还在为一本好书《开始Android游戏》撒谎 Mario Zechner讲,这本书大约需要600页 构建一个简单的复古Snake游戏-彻底说谎!我建议您阅读Mario Zechner写的书。