Android游戏开发菜鸟之路(二)

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

Android游戏开发菜鸟之路(二)_第1张图片

想想,这两个算法真的没什么好说的,坐标的旋转是高中知识,画画图也能解出;至于判断点是否在多边形(包括凹多边形)内部,则是利用射线法(网上copy的):

注意到如果从P作水平向左(或者右)的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑。假如考虑边(P1,P2),

1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同,则直接忽略这种情况

2)如果线段水平,则射线要么与其无交点,要么有无数个,这种情况也直接忽略

3)再判断相交之前,先判断P是否在边(P1,P2)的上面(叉积),如果在,则直接得出结论:P再多边形内部。

接下来的一周应该是先研究一下JNI和NDK!

PS:测试代码在这里~

你可能感兴趣的:(游戏,android,算法,jni,测试,UML)