Flash 游戏设计笔记:鼠标类游戏(4)
2009-02-17 23:02
465 查看
Flash 游戏设计笔记:鼠标类游戏(1)
http://blog.csdn.net/hero82748274/archive/2009/02/11/3878304.aspx
Flash 游戏设计笔记:鼠标类游戏(2)
http://blog.csdn.net/hero82748274/archive/2009/02/16/3897058.aspx
Flash 游戏设计笔记:鼠标类游戏(3)
http://blog.csdn.net/hero82748274/archive/2009/02/17/3899443.aspx
一,旋转炮台***
之前我曾经写了一些炮台的***。这个炮台能够跟随鼠标旋转角度;他的原理很简单,使用Math.atan2(y,x)来求出对应的角度
如:(Fire 为场景上的Mc)
Fire.rotation=Math.atan2(mouseY-Fire.y, mouseX- Fire.x)*180/Math.PI;
Flash ***旋转炮台:http://blog.csdn.net/hero82748274/archive/2008/11/04/3219431.aspx
由于rotation 是角度,所以要进行弧度转换角度单位
我们在场景上加入了一些名为Fire的影片剪辑
二、子弹的运行轨迹
在fla 文件里面创建一个名为Ball的子弹类,当我们鼠标按下去就产生一个对象,而这个对象根据一个角度和一个速度进行运行,由于速度是矢量可以分解两个不同轴的速度一个是 dx 一个是dy
dx=speed*cos(angle);
dy=speed*sin(angle);
物理上 h=dy*t;
s=dx*t ;在一定时间内运行一个在某一个角度的恒速的运动
Flash上的物理:
这里我们只是计算机出它所在的子弹初始化位置:
2.1子弹的速度分量:
简单一点来说:根据角度来计算出速度speed 的两个分量;
ball.vx=speed*Math.cos(angle*Math.PI/180);
ball.vy=speed*Math.sin(angle*Math.PI/180);
2.2子弹运行
当我们指定了子弹的初始角度和初始速度,按理想状态(不引入重力),它会以这个方向一直运动下去。
接下来,我们所做的事情是让子弹能够按照这个速度和方向运行;
ball.addEventListener(Event.ENTER_FRAME,BallMove); 使用Event.ENTER_FRAME 事件让其每一帧产生渲染。
这样 每一关帧就会产生一个像素的位移,子弹的坐标也发生了改变。
在物理当中 S=v*t; 位移=速度X时间
而在flash里面,其实已经隐藏了时间,代替为帧
物体.x+=Speed*T 而T就是隐藏的帧
物体.y+=Speed*T
2.3引入重力
由于子弹在空中运行的时候,它受重力和其他阻力,假设我们忽略子弹其他阻力,使用重力让子弹能够在重力的过程中
以一个抛物线的运动轨迹运行,所以在y轴的速度分量当中,我们要加上重力的加速度。假设为2.
这样就可以模拟出一个简单的重力效果
效果:
酷吧:嘿嘿
加上一些位图
代码清单:
累了明天再修改。
http://blog.csdn.net/hero82748274/archive/2009/02/11/3878304.aspx
Flash 游戏设计笔记:鼠标类游戏(2)
http://blog.csdn.net/hero82748274/archive/2009/02/16/3897058.aspx
Flash 游戏设计笔记:鼠标类游戏(3)
http://blog.csdn.net/hero82748274/archive/2009/02/17/3899443.aspx
一,旋转炮台***
之前我曾经写了一些炮台的***。这个炮台能够跟随鼠标旋转角度;他的原理很简单,使用Math.atan2(y,x)来求出对应的角度
如:(Fire 为场景上的Mc)
Fire.rotation=Math.atan2(mouseY-Fire.y, mouseX- Fire.x)*180/Math.PI;
Flash ***旋转炮台:http://blog.csdn.net/hero82748274/archive/2008/11/04/3219431.aspx
由于rotation 是角度,所以要进行弧度转换角度单位
private function Run(event:Event):void { dx.text=String(mouseX); dy.text=String(mouseY); photo.x=mouseX; photo.y=mouseY; Fire.rotation=Math.atan2(mouseY-Fire.y, mouseX- Fire.x)*180/Math.PI; }
我们在场景上加入了一些名为Fire的影片剪辑
二、子弹的运行轨迹
在fla 文件里面创建一个名为Ball的子弹类,当我们鼠标按下去就产生一个对象,而这个对象根据一个角度和一个速度进行运行,由于速度是矢量可以分解两个不同轴的速度一个是 dx 一个是dy
dx=speed*cos(angle);
dy=speed*sin(angle);
物理上 h=dy*t;
s=dx*t ;在一定时间内运行一个在某一个角度的恒速的运动
Flash上的物理:
var ball:Ball=new Ball(); addChild(ball); ball.x=Fire.x+Math.cos(angle2*Math.PI/180)*85; ball.y=Fire.y+Math.sin(angle2*Math.PI/180)*85;
这里我们只是计算机出它所在的子弹初始化位置:
2.1子弹的速度分量:
ball.vx=(speed+1)*3*Math.cos(angle2*Math.PI/180);//子弹x方向 的速度,技巧就是在这里 ball.vy=(speed+1)*3*Math.sin(angle2*Math.PI/180);//子弹y方向 的速度
简单一点来说:根据角度来计算出速度speed 的两个分量;
ball.vx=speed*Math.cos(angle*Math.PI/180);
ball.vy=speed*Math.sin(angle*Math.PI/180);
2.2子弹运行
当我们指定了子弹的初始角度和初始速度,按理想状态(不引入重力),它会以这个方向一直运动下去。
接下来,我们所做的事情是让子弹能够按照这个速度和方向运行;
ball.addEventListener(Event.ENTER_FRAME,BallMove); 使用Event.ENTER_FRAME 事件让其每一帧产生渲染。
private function BallMove(e:Event):void { var myball:MovieClip=e.currentTarget as MovieClip; myball.x+=myball.vx; myball.y+=myball.vy; }
这样 每一关帧就会产生一个像素的位移,子弹的坐标也发生了改变。
在物理当中 S=v*t; 位移=速度X时间
而在flash里面,其实已经隐藏了时间,代替为帧
物体.x+=Speed*T 而T就是隐藏的帧
物体.y+=Speed*T
2.3引入重力
private function BallMove(e:Event):void { var myball:MovieClip=e.currentTarget as MovieClip; myball.vy+=2; myball.x+=myball.vx; myball.y+=myball.vy; }
由于子弹在空中运行的时候,它受重力和其他阻力,假设我们忽略子弹其他阻力,使用重力让子弹能够在重力的过程中
以一个抛物线的运动轨迹运行,所以在y轴的速度分量当中,我们要加上重力的加速度。假设为2.
这样就可以模拟出一个简单的重力效果
效果:
酷吧:嘿嘿
加上一些位图
代码清单:
package
{
import flash.display.MovieClip;
import flash.events.*;
import flash.text.TextField;
import flash.ui.Mouse;
public class Example3 extends MovieClip
{
private var dx:TextField;
private var dy:TextField;
private var photo:MousePhoto;
private var power:int=0;
private var Maxpower:Number=100;
private var angle:int=-45;
private var angle2:int;
private var speed:int=0;
public function Example3()
{
addEventListener(Event.ENTER_FRAME,Run);
stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,Mouseup);
init();
}
private function init():void
{
dx=new TextField ;
addChild(dx);
dx.width=50;
dx.height=20;
dx.x=30;
dx.y=30;
dx.border=true;
dy=new TextField ;
addChild(dy);
dy.width=50;
dy.height=20;
dy.x=30;
dy.y=53;
dy.border=true;
Mouse.hide();//隐藏鼠标
photo=new MousePhoto ;//创建代替鼠标的图
addChild(photo);
}
private function Run(event:Event):void { dx.text=String(mouseX); dy.text=String(mouseY); photo.x=mouseX; photo.y=mouseY; Fire.rotation=Math.atan2(mouseY-Fire.y, mouseX- Fire.x)*180/Math.PI; }
private function adds():void
{
stage.addEventListener(Event.ENTER_FRAME,addnum);
}
private function addnum(event:Event):void
{
speed=getScale();
trace(speed);
Mypower.scaleX=speed*10;
}
private function getScale():int
{
if (power>=-1 )
{//angle=-45;
power+=Math.tan(angle*180/Math.PI);
if (power==10)
{
angle=-135;
}
if (power==0)
{
angle=-45;
}
}
return power;
}
private function MouseDown(event:MouseEvent):void
{
adds();
}
private function BallMove(e:Event):void { var myball:MovieClip=e.currentTarget as MovieClip; myball.vy+=2; myball.x+=myball.vx; myball.y+=myball.vy; }
private function Mouseup(event:MouseEvent):void
{
stage.removeEventListener(Event.ENTER_FRAME,addnum);
Shoot();
}
private function Shoot():void
{
angle2=Fire.rotation;
var ball:Ball=new Ball();
addChild(ball);
ball.x=Fire.x+Math.cos(angle2*Math.PI/180)*90;
ball.y=Fire.y+Math.sin(angle2*Math.PI/180)*90;
ball.vx=(speed+1)*3*Math.cos(angle2*Math.PI/180);//子弹x方向 的速度,技巧就是在这里 ball.vy=(speed+1)*3*Math.sin(angle2*Math.PI/180);//子弹y方向 的速度
ball.addEventListener(Event.ENTER_FRAME,BallMove);
}
}
}
累了明天再修改。
相关文章推荐
- Flash 游戏设计笔记:鼠标类游戏(1)
- Flash 游戏设计笔记:鼠标类游戏(4)
- Flash 游戏设计笔记:鼠标类游戏(3)
- Flash 游戏设计笔记:鼠标类游戏(4)
- Flash 游戏设计笔记:鼠标类游戏(3)
- Flash 游戏设计笔记:鼠标类游戏(3)
- Flash 游戏设计笔记:鼠标类游戏(2)
- Flash 游戏设计笔记:鼠标类游戏(2)
- Flash 游戏设计笔记:鼠标类游戏(1)
- Flash 游戏设计笔记:鼠标类游戏(2)
- Flash 游戏设计笔记:鼠标类游戏(1)
- flash 游戏设计笔记:我的工具类(DateFormat)
- 每天学习多一点flash(36) as2.0 游戏设计笔记
- Flash游戏学习笔记:鼠标拖动
- Flash 游戏设计笔记: 制作炮台
- flash 游戏设计笔记:坚持几秒
- flash 游戏设计笔记:TextField确定一个坐标位置,坐标位置不动,文本是向上增长。
- flash 游戏设计笔记:回合制战斗怪物和人物站位坐标行角度分布
- 每天学习多一点flash(36) as2.0 游戏设计笔记
- flash 游戏设计笔记:人物行走一种做法