《Pro Android Games》的第二个案例,总体来说还是比较好理解的,其游戏的逻辑与SpaceBlaster基本相似,有趣的是在构建多边形的算法上——坐标的旋转、平移、判断点是否在多边形内部。这次也就重点说说这些算法(其实感觉这些算法也很好理解的,汗,其实没什么可以说的。。。),在这之前首先将相关的三个类的UML图给出:

想想,这两个算法真的没什么好说的,坐标的旋转是高中知识,画画图也能解出;至于判断点是否在多边形(包括凹多边形)内部,则是利用射线法(网上copy的):
注意到如果从P作水平向左(或者右)的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑。假如考虑边(P1,P2),
1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同,则直接忽略这种情况
2)如果线段水平,则射线要么与其无交点,要么有无数个,这种情况也直接忽略
3)再判断相交之前,先判断P是否在边(P1,P2)的上面(叉积),如果在,则直接得出结论:P再多边形内部。
接下来的一周应该是先研究一下JNI和NDK!PS:测试代码在这里~
本文详细解析了游戏开发中多边形算法的核心概念,包括坐标旋转、平移及判断点是否在多边形内部的方法。通过提供直观的解释和实例,帮助开发者更好地理解和实现这些算法。
1014

被折叠的 条评论
为什么被折叠?



