快速业务通道

俯视视角游戏碰撞检测:限定移动类型和不限定移动类型

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08
Math.floor可换成int()或者其他取整方法,对as2同

得到bulletMapX = 20,bulletMapY = 10,即其在数组地图上坐标。
只检测数组地图上的(20,10)位置标识,即可判断炮弹应继续飞行还是爆炸,如果爆炸杀伤的目标是谁。
SLG游戏可能需要自动寻路。数组地图公认A*算法为先进高效的寻路方法,该算法可于百度搜索到,不再赘述。

3.2  游戏->俯视->限定移动->不完全限定移动
特点:某游戏主要使用键盘操作,玩家只能向上下左右移动,障碍物是矩形障碍,大小和坐标可能不统一,没有小于玩家大小的障碍。
举例:赤色要塞、魂斗罗2的第二关等ACT游戏,大部分手柄操作的ARPG如黄金太阳(GBA)、赛达尔传说(NDS前的版本)。
此类游戏可以使用点描述方法检测碰撞,用顶点作为碰撞点,其点碰描述整个物体碰撞的方法。
未命名-1.jpg
图中红色点即为顶点,其坐标为(player.x±20,player.y±20)
在“地图没有小于玩家的物体”条件下,“玩家碰撞物体”等价于“不少于1个顶点碰撞了物体”
使用DisplayObject/hitTestPoint前,需将所有地图上固定的物体放入一个容器内,而不要用for循环检测与每个物体的碰撞。
运动物体虽然可以放入这个容器,但是运动物体往往是玩家自身或者需要运动碰撞检测的敌人自身,放入容器会导致和自身的碰撞检测,恒为true,没有意义。
解决办法是将碰撞点向外侧移动。略微放大碰撞区域,这样就不会与自身碰撞。
未命名-2.jpg
如碰撞区域必须小于等于运动物体实际图形大小,那么必须单独在运动物体之间检测碰撞(运动物体数量少使用for循环,如果运动物体过多需较高的解决方法,参加4楼使用BitmapData/hitTest的办法),不能使用这个方法。
如地图上的固定元素有小于玩家宽高大小,但是不小于玩家宽高大小一半的大小,请适当增加碰撞点数量
未命名-3.jpg

(4):360度不限定移动类型

特点:可能使用键盘或鼠标操作,玩家可以向任意方向移动,障碍物形状未必固定,大小和坐标未必统一,所有元素自由度非常高。
举例:赛车类游戏,大部分战争题材纵版游戏
此类游戏可以使用位图碰撞、点描述和函数描述的办法检测碰撞。

4.1  游戏->俯视->不限定移动->位图碰撞
使用BitmapData/hitTest
具体办法是将玩家用BitmapData.draw方法转成位图数据(注意,这个方法不会考虑玩家的缩放)
地图可能非常大(比如2000x1500)这个转换成位图效率非常低下。
正确的做法是根据玩家坐标,只描绘玩家周围的一小部分位图。
描绘区域高度有 玩家

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号