郁闷很久,终于把这个小东西做出来了。下面是一些简单的代码,因为是在文档里面直接写的,这里只是想分享一下里面的代码
- 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,
写成一个类的写法去完成这个事情。具体的就不再去研究,希望有用