flash 自由移动 碰撞 弹开
发布网友
发布时间:2023-07-04 20:48
我来回答
共2个回答
热心网友
时间:2024-12-02 17:29
//AS3.0
//
package{
import flash.display.Sprite;
import flash.events.Event;
//定义类
public class MoveBalls extends Sprite {
//构造函数
public function MoveBalls() {
//初始化舞台
init();
}
//构建初始化函数
private function init() {
//创建一个圆形区域,小球将在此区域运动
var sp:Sprite=new Sprite();
addChild(sp);
//定义圆形区域位置和形状
sp.x=stage.stageWidth/2;
sp.y=stage.stageHeight/2;
sp.graphics.beginFill(0xffffff);
sp.graphics.drawCircle(0,0,150);
sp.graphics.endFill();
//使用循环添加10个小球
for (var i:int=0; i<10; i++) {
//定义初始化坐标
var xx:Number=MathR.Random(90)-30
var yy:Number=MathR.Random(90)-30
//定义坐标向量
var v0=new V2D(xx,yy);
//定义初始化速度
var vx:Number=MathR.Random(30)-15
var vy:Number=MathR.Random(20)-10
//定义速度向量
var v1=new V2D(vx,vy);
var ball:Sprite=Ball();
sp.addChild(ball);
//初始化运动小球
initball(ball,v0,v1);
}
}
//定义运动小球动画效果实现函数
private function initball(ball:Sprite,v0:V2D,v1:V2D) {
//注册帧循环事件函数到舞台
stage.addEventListener(Event.ENTER_FRAME,MoveBall);
//运动小球事件处理函数
function MoveBall(evt:Event):void {
//坐标向量加上速度向量,小球运动
v0.plus(v1);
//改变小球位置
render(ball,v0);
//若超过圆形区域范围
if (v0.length()>150) {
//设置位移向量长度为圆形半径
v0.setlength(150);
//改变小球位置
render(ball,v0);
//速度反向
v1.negate();
//速度向量方向角度
var ang1:Number=v1.getangle();
//位移向量方向角度
var ang2:Number=v0.getangle();
//速度方向旋转,ang1-ang2为速度方向和位移方向的夹角,旋转夹角的2倍,实现反射
v1.rotate(2*(ang1-ang2));
}
}
//改变小球位置方法
function render(a:Sprite,v:V2D) {
a.x=v._x;
a.y=v._y;
}
}
//创建小球
private function Ball():Sprite {
var ball:Sprite=new Sprite;
ball.graphics.beginFill(0xFF0000);
ball.graphics.drawCircle(0,0,5);
ball.graphics.endFill();
return ball;
}
}
}
import flash display Sprite;
class V2D {
//定义两个属性_x和_y
private var _x:Number;
private var _y:Number;
//构造函数
public function V2D(x:Number=0,y:Number=0) {
this._x=x;
this._y=y;
}
}
class MathR{
public function MathR(){}
//取得一个大于0小于n的整数
public static function Random(n:uint):uint{
return Math.round((n-1)*Math.random());
}
}
}
热心网友
时间:2024-12-02 17:29
要想模拟零重力的自由碰撞,请使用物理引擎,比如BOX2D,Nape ,物体的重力,角速度,扭矩,线速度等,都可以近乎完美的模拟。下面送你一个你要求的源文件,使BOX2D引擎,自己慢慢研究,如果看不懂,请学习相关BOX2D教程。如Box2DForFlashGame(中文版).pdf Box2DFlash.pdf