您的位置:首页 > 其它

Flash 游戏设计笔记: 制作炮台

2012-02-17 19:51 246 查看
郁闷很久,终于把这个小东西做出来了。下面是一些简单的代码,因为是在文档里面直接写的,这里只是想分享一下里面的代码

var MouseX:Number;

var MouseY:Number;

var R:int=115;

var t:Number=1;

stage.addEventListener(Event.ENTER_FRAME,Run);

function Run(event:Event):void

{

VX.text=Math.round(mouseX).toString();//取整数

VY.text=Math.round(mouseY).toString();//这样写就要不断执行

var X:Number=Math.round(mouseX)-Player.x;

var Y:Number=Math.round(mouseY)-Player.y;

var rot:Number=Math.atan2(Y,X)*180/Math.PI;//Math.atan2 计算出来的是弧度单位,因此要转换个度角度很重要不要忘记了

Player.rotation=rot;//注意rotation以度为单位,所以

}//计算枪转动

var ball:Ball; //炮弹

var angle:Number=0; //角度

var vx:Number=0;

var vy:Number=0;

stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);

function MouseDown(event:MouseEvent):void

{

angle=Player.rotation;

trace(angle);

ball=new Ball();

addChild(ball);

var ballX:Number=Player.x+R*Math.cos(angle*Math.PI/180);//子弹x方向

var ballY:Number=Player.y+R*Math.sin(angle*Math.PI/180);//子弹y方向

ball.x=ballX;//子弹x初始位置

ball.y=ballY;//子弹y初始位置

ball.vx=10*Math.cos(angle*Math.PI/180);//子弹x方向 的速度,技巧就是在这里

ball.vy=10*Math.sin(angle*Math.PI/180);//子弹y方向 的速度

ball.addEventListener(Event.ENTER_FRAME,BallMove);

}

function BallMove(event:Event):void

{

var mc:MovieClip=event.currentTarget as MovieClip;

mc.x+=mc.vx;

mc.y+=mc.vy;//技巧就是这里

}

基本的原理:第一要使用到反余切球一个角度。


var rot:Number=Math.atan2(Y,X)*180/Math.PI;d

这里利用这个函数来球一个角度A,也就是一个炮台的转动的角度。

这个角度同样是子弹发射的角度。

第二,当我们按下鼠标的时候,触发了一个按下的事件,这个事件实际上的作用产生一个子弹,原理很简单只要new 进来就可以,

ball=new Ball();
addChild(ball);

然后 初步分布他的初始位置,和初始的方向位置

var ballX:Number=Player.x+R*Math.cos(angle*Math.PI/180);//子弹x方向
var ballY:Number=Player.y+R*Math.sin(angle*Math.PI/180);//子弹y方向
ball.x=ballX;//子弹x初始位置
ball.y=ballY;//子弹y初始位置

接着:为子弹分一个初始的速度,和一个监听。注意一个小小的细节,如果ball.vx 改成vx ,和ball.vy改成vy 猜想一下会有什么问题呢?

ball.vx=10*Math.cos(angle*Math.PI/180);//子弹x方向 的速度,技巧就是在这里
ball.vy=10*Math.sin(angle*Math.PI/180);//子弹y方向 的速度
ball.addEventListener(Event.ENTER_FRAME,BallMove);

最后是子弹运动

function BallMove(event:Event):void
{

var mc:MovieClip=event.currentTarget as MovieClip;
mc.x+=mc.vx;
mc.y+=mc.vy;//技巧就是这里

}

如果我改成了vx 和vy

function BallMove(event:Event):void
{

var mc:MovieClip=event.currentTarget as MovieClip;//改成Movieclip类型
mc.x+= vx;
mc.y+= vy;//注意}

当我发炮弹的时候,其他子对象也会跟着一起走。之前由于没有注意到这个地方,一直都很郁闷到今天才解决了这个问题

知道这个原理后,日后我们就可以制作一些炮弹的小游戏。



再一个想法:那就是炮弹作为一个MovieClip 类,那么这个类可以带属性,其中一个是他的速度

ball.vx,

ball,vy,

写成一个类的写法去完成这个事情。具体的就不再去研究,希望有用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: