您的位置:首页 > 其它

AS3实现RPG游戏鼠标8方向操作

2008-06-24 12:29 155 查看
在宝宝姐的提醒下为地图引擎添加了鼠标操作的支持。现在既可以用键盘ASDW也可以用鼠标实现人物的8方向运动了。 ^-^

为了避免不必要的混乱,键盘和鼠标不能同时控制人物移动。先新增两个布尔值mouse和keyboard,分别代表当前是否被鼠标/键盘控制。若其中一个为真,则另一个输入设备不被响应。

下面是鼠标控制移动的逻辑。

先来对舞台进行一下划分,如下图:



相对于舞台上的人物而言,若鼠标在它的任一方向被按下,人物则改为向该方向移动;若鼠标在保持按下的情况下移动到另外一个区域,则人物的运动方向也随之更改;若鼠标弹起则停止运动。

根据之前的键盘8方向程序,人物的运动方向由一个数组dirArr来表示,这个数组保存着当前键盘上被按下的键的keyCode。如果有新键按下或旧键弹起,则更新这个数组,并调用setDir函数适当更改人物的运动方向。

这样一来要添加鼠标支持就非常简单了。让stage分别侦听MouseEvent.MOUSE_DOWN,MouseEvent.MOUSE_UP, MouseEvent.MOUSE_MOVE事件,并交由onMouseDir函数处理。当鼠标按下,先分析它相对于人物的位置(稍后介绍),然后根据位置将代表该方向的keyCode push进dirArr数组。当鼠标弹起,直接清空dirArr数组。若按下时有移动,先分析相对位置是否有变化,没有就什么都不做,有的话先清空dirArr数组,再把新的方向push进去。这3种情况最后都调用一下setDir函数更新人物运动方向就好了。

相对位置的分析如下。

这里要借助三角函数来判断鼠标当前相对于人物的方向,也就是要求出下图中角a的值。



Flash的坐标系和常用的直角坐标系稍有不同,它的y轴正方向是向下的,这里要稍微注意一下。要计算角a,先求出两直角边nx、ny以及斜边r,然后求余弦cos(a) = nx / r,最后求反余弦并取整。取整是为了节省运算,整数运算相对于浮点运算要快得多,这在有大量运算时尤为突出。另外需要注意的是当鼠标位于x轴之上时,角a会大于180度,而反三角函数只给出0~180的解,所以需要做一个转换:a = 360 - a。详细计算代码如下:

var nx:Number=mouseX-man.x;

var ny:Number=mouseY-man.y;

var r:Number=Math.sqrt(nx*nx+ny*ny);

var cos:Number=nx/r;

var angle:int=int(Math.floor(Math.acos(cos)*180/Math.PI));

if(ny<0){

angle=360-angle;

}

之后switch变量angle的值,push相应的keyCode:

var msArr:Array=new Array();

if(angle>337 || angle<23){

msArr.push(68);

} else if(angle>292){

msArr.push(68);

msArr.push(87);

} else if(angle>247){

msArr.push(87);

} else if(angle>202){

msArr.push(87);

msArr.push(65);

} else if(angle>157){

msArr.push(65);

} else if(angle>112){

msArr.push(65);

msArr.push(83);

} else if(angle>67){

msArr.push(83);

} else{

msArr.push(83);

msArr.push(68);

}

最后调用setDir函数就完成了。详细的代码参见源文件dirCtr.fla中onMouseEvent函数和parseMouseDir函数。希望对有兴趣的朋友有帮助。 ^-^

另有源文件PPCD.fla是perfectPixelCollisionDetection(精确到像素的任意不规则形状的碰撞检测)类的定义,Dir2.fla是舞台上走动的人物的定义,要正确运行需要这些代码,我人懒没特意分离出去,不好意思啦,不必理会它们。 ^-^

SWF效果:

[flash]http://uploadingit.com/files/480871_xzu7b/TestMapMouse.swf[/flash]

下载:http://uploadingit.com/files/480871_xzu7b/TestMapMouse.swf

源文件下载:http://uploadingit.com/files/480923_adhrb/mouse8dir.zip

源文件中关于键盘8方向移动参见原帖:【分享01】AS3实现RPG游戏8方向控制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: