您的位置:首页 > 其它

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

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

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,

 

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