现在的位置: 首页 > 综合 > 正文

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

2012年09月07日 ⁄ 综合 ⁄ 共 2342字 ⁄ 字号 评论关闭

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

  1. var MouseX:Number;
  2. var MouseY:Number;
  3. var R:int=115;
  4. var t:Number=1;
  5. stage.addEventListener(Event.ENTER_FRAME,Run);
  6. function Run(event:Event):void
  7. {
  8.     VX.text=Math.round(mouseX).toString();//取整数
  9.     VY.text=Math.round(mouseY).toString();//这样写就要不断执行
  10.     var X:Number=Math.round(mouseX)-Player.x;
  11.     var Y:Number=Math.round(mouseY)-Player.y;
  12.     var rot:Number=Math.atan2(Y,X)*180/Math.PI;//Math.atan2 计算出来的是弧度单位,因此要转换个度角度很重要不要忘记了
  13.     Player.rotation=rot;//注意rotation以度为单位,所以
  14. }//计算枪转动
  15. var ball:Ball; //炮弹
  16. var angle:Number=0; //角度
  17. var vx:Number=0;
  18. var vy:Number=0;
  19. stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
  20. function MouseDown(event:MouseEvent):void
  21. {
  22.     angle=Player.rotation;
  23.     trace(angle);
  24.     ball=new Ball();
  25.     addChild(ball);
  26.     var ballX:Number=Player.x+R*Math.cos(angle*Math.PI/180);//子弹x方向
  27.     var ballY:Number=Player.y+R*Math.sin(angle*Math.PI/180);//子弹y方向
  28.     ball.x=ballX;//子弹x初始位置
  29.     ball.y=ballY;//子弹y初始位置 
  30.     ball.vx=10*Math.cos(angle*Math.PI/180);//子弹x方向 的速度,技巧就是在这里
  31.     ball.vy=10*Math.sin(angle*Math.PI/180);//子弹y方向 的速度
  32.     ball.addEventListener(Event.ENTER_FRAME,BallMove);
  33.     
  34. }
  35. function BallMove(event:Event):void
  36. {
  37.     var mc:MovieClip=event.currentTarget  as MovieClip;
  38.     mc.x+=mc.vx;
  39.     mc.y+=mc.vy;//技巧就是这里
  40. }

 

 

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

 

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,

 

写成一个类的写法去完成这个事情。具体的就不再去研究,希望有用

抱歉!评论已关闭.