游手好学教程 – AS3实现飞机游戏角色的移动

 

最近做了一个纯俯视的射击类游戏,涉及到地图不规则边缘的碰撞检测,也在鼠标操作以及键盘操作飞机上犹豫了一下。现在分别做出鼠标和键盘的飞机操作做个比较,不知道大家偏好那种. 也放出源码和大家分享交流,代码很简单,我接触AS3不久,经验比较少,大家多多指点,共同进步啊。

游戏是纯俯视的,控制飞机,无论是键盘还是鼠标都会运用到三角函数的知识,分别计算出飞机在X轴和Y轴上的速度,然后在游戏的循环函数(ENTER_FRAME或者Timer)里面控制飞机在X轴和Y轴上的增加或者减少,原理大概就是这样的。

下面,先看看SWF演示吧,默认是键盘操作,方向键控制,点击相关按钮切换到鼠标操作,鼠标操作我这里做的其实就是一个简单的跟随.

下边是实现该移动功能的文档类代码,你可以封装成单独的player类去运用.

/**
* 键盘与鼠标控制游戏中的人物
* Author: Vincent chan
* URL: http://www.9stg.com
*/

package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.MouseEvent;

public class IndexDoc extends MovieClip
{
private var player:MovieClip;
private var up:Boolean = false;
private var down:Boolean = false;
private var left:Boolean = false;
private var right:Boolean = false;
private var decay:Number = .95;
private var speedX:Number = 0;
private var speedY:Number = 0;
private var speedZ:Number = .5;
private var speedR:Number = 4;
private var speed:Number = 0;
private var maxSpeed:Number = 10;
private var style:String = “key”;

public function IndexDoc()
{
//初始化UI
initUI();
//初始化事件
initEvent();
}

private function initUI():void
{
player = fly_mc;
this["key_btn"].buttonMode = true;
this["mouse_btn"].buttonMode = true;
}

private function initEvent():void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUPHandler);
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
this["key_btn"].addEventListener(MouseEvent.CLICK, changeStyle);
this["mouse_btn"].addEventListener(MouseEvent.CLICK, changeStyle);
}

private function changeStyle(e:MouseEvent):void
{
//点击按钮选择鼠标或者键盘模式
switch(e.currentTarget.name)
{
case “mouse_btn”:
style = “mouse”;
break;

case “key_btn”:
style = “key”;
break;
}
}

private function gameLoop(e:Event):void
{
//使用键盘
if(style == “key”)
{
useKey();
}
//使用鼠标
if(style == “mouse”)
{
useMouse();
}
}

private function useKey()
{
//键盘控制player的移动
if(up)
{
speedX += speedZ*Math.sin(player.rotation*(Math.PI/180));
speedY += speedZ*Math.cos(player.rotation*(Math.PI/180));
player.gotoAndStop(2);
}
else
{
speedX *= decay;
speedY *= decay;
player.gotoAndStop(1);
}

speed = Math.sqrt((speedX*speedX)+(speedY*speedY));

if( speed > maxSpeed )
{
speedX *= maxSpeed/speed;
speedY *= maxSpeed/speed;
}

player.y -= speedY;
player.x += speedX;

//控制player的角度
if(right)
{
player.rotation += speedR;
}
if(left)
{
player.rotation -= speedR;
}

//player越界处理
if( player.y < 0 ){
player.y = stage.stageHeight;
}
if( player.y > stage.stageHeight ){
player.y = 0;
}
if( player.x < 0 ){
player.x = stage.stageWidth;
}
if( player.x > stage.stageWidth ){
player.x = 0;
}
}

private function useMouse():void
{
var dx : Number = mouseX – player.x;
var dy : Number = mouseY – player.y;

player.x += dx/10;
player.y += dy/10;

var angle : Number = Math.atan2(dy, dx) * 180 / Math.PI;

player.rotation = angle + 90;
}

private function keyDownHandler(e:KeyboardEvent):void
{
switch( e.keyCode )
{
case Keyboard.UP:
up = true;
break;

case Keyboard.DOWN:
down = true;
break;

case Keyboard.LEFT:
left = true;
break;

case Keyboard.RIGHT:
right = true;
break;
}
}

private function keyUPHandler(e:KeyboardEvent):void
{
switch( e.keyCode )
{
case Keyboard.UP:
up = false;
break;

case Keyboard.DOWN:
down = false;
break;

case Keyboard.LEFT:
left = false;
break;

case Keyboard.RIGHT:
right = false;
break;
}
}

}
}


1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

本站游戏文字以及教程均为个人原创,转载请注明转自 9STG.COM 游手好学并加上本站链接。更多经典游戏来自COMEONGAME.COM

收藏分享:

2,250 人关注


你可能还喜欢


发表回复

您必须 登录 才能发表回复!