快速业务通道

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

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08

(3)4或8方向限定移动类型

如果你已经看到这里,我们已经对要制作的东西做了两次分类
第一次将整个“游戏”分类,取了“俯视”的一部分
第二次将“俯视”分类,取了4或8方向限定移动类型(下文简称“限定移动”)
这样的“化整为零”是结构化面向过程程序设计和面向对象程序设计的正确思路,我们将继续这个思路,直到问题简化到能用具体办法解决为止。
后文会用类似下面粗体字的明确书签标志当前的划分层次,避免逻辑混乱
每个类型本人会举大量经典游戏作为例子,方便对号入座
限定移动可以分为完全限定移动和不完全限定移动。
前者的每个元素(玩家、敌人、地图元素等)必须与地图的分格一一对应
后者只是限制了玩家的操作是4方向或8方向的,但是未必对应地图的分格

3.1  游戏->俯视->限定移动->完全限定移动
特点:某游戏主要使用键盘操作,玩家只能向上下左右移动,障碍物是矩形障碍,大小和坐标非常统一,对齐到网格,等同于玩家大小的障碍。
举例:传统rpg、传统slg、吃豆精灵、推箱子、包括部分方块类。此类游戏的首选碰撞方式是“数组地图”,数组地图是一个二维数组:


var map:Array = [

[1,1,1,1,1,1,1,1,1,1],

[1,0,0,0,0,0,1,0,0,1],

[1,0,0,0,1,1,1,0,0,1],

[1,0,0,0,1,0,0,0,0,1],

[1,0,0,0,1,1,1,1,0,1],

[1,0,0,0,0,0,0,0,0,1],

[1,1,1,1,1,1,1,1,1,1]];

这是一张简易的数组地图。我们可以用“0”来表示“空地”,用“1”来表示“石头”
玩家有自己在数组地图上的坐标。
玩家(player)的现坐标为(3,2),注意,数组是从0开始计数的,而不是1
如果操作玩家向左移动,那么检测(3-1,2)是否为0,该位置是0,返回false,玩家可以移动
如果该位置操作玩家向右移动,检测到(3+1,2)是1,返回true,发生“碰撞”,禁止玩家的移动
玩家和敌人在地图上随时写入数组,如玩家用2标识,敌人用3标识,
某单位移动时将数组地图对应该单位坐标清零,并在该单位的新坐标处把0修改为该单位标识
此类游戏存在投射性武器不写入数组
武器检测碰撞时,根据武器的坐标计算出该武器属于数组地图的哪一格
例如真实地图的每格宽度为20
炮弹真实坐标(212.5,113),以bullet.x和bullet.y表示:

var bulletMapX:uint = Math.floor(bullet.x/20);

var bulletMapY:uint = Math.floor(bullet.y/20);

//其中的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号