box2d系列之 加冲力(impulse)
来源:互联网 发布:php微信支付代码 编辑:程序博客网 时间:2024/04/28 14:49
//新建两个影片剪辑 :一个的连接名为: Ground 一个为Box
下面是codes
package {
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.*;
import Box2D.Dynamics.Joints.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class MyBox2d extends Sprite {
private var m_world:b2World;
private var m_timeStep:Number;
private var m_iterations:uint;
private var phsScale:uint=30;
private var AABB:b2AABB;
private var body:b2Body;
private var bodyDef:b2BodyDef;
private var gravity:b2Vec2;
private var boxDef:b2PolygonDef;
/*
* @author :Dream@Night~夜梦惊魂
*
*/
public function MyBox2d() {
m_timeStep=1.0/30.0;
m_iterations=10;
createWorld();
createGround();
createBox();
addEventListener(Event.ENTER_FRAME,Update,false,0,true);
stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
trace(this.getChildAt(1));//测试表明对象没有添加进舞台
//stage.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
private function createWorld():void {
AABB= new b2AABB();
AABB.lowerBound.Set(-100.0, -100.0);
AABB.upperBound.Set(100.0, 100.0);
gravity=new b2Vec2(0,10.0);
//gravity.Set(0,10.0);
m_world=new b2World(AABB,gravity,true);
}
private function createGround():void {
bodyDef = new b2BodyDef();
var X:Number= 20/(phsScale*2);
var Y:Number= 700/(phsScale*2);
bodyDef.position.Set(X,Y);
boxDef = new b2PolygonDef ();
boxDef.vertexCount=4;
boxDef.density=0;
boxDef.restitution=0.2;
boxDef.friction=0.3;
boxDef.SetAsBox(30,2);
bodyDef.userData= new Ground();//Ground
bodyDef.userData.width=30*2*phsScale;
bodyDef.userData.height=2*2*phsScale;
body=m_world.CreateBody(bodyDef);
body.CreateShape(boxDef);
body.SetMassFromShapes();
addChild(bodyDef.userData);
}
private function createBox():void {
for (var i:uint=0; i<5; ++i) {
bodyDef = new b2BodyDef();
bodyDef.position.x=Math.random()*15+1;
bodyDef.position.y=Math.random();
var crate_width:Number=1.5;
var crate_height:Number=1.5;
boxDef = new b2PolygonDef();
boxDef.SetAsBox(crate_width, crate_height);
boxDef.density=1.0;
boxDef.friction=0.5;
boxDef.restitution=0.2;
bodyDef.userData = new Box();
bodyDef.userData.width=crate_width*2*phsScale;
bodyDef.userData.height=crate_height*2*phsScale;
body=m_world.CreateBody(bodyDef);
body.CreateShape(boxDef);
body.SetMassFromShapes();
addChild(bodyDef.userData);
}
}
private function onDown(e:MouseEvent):void {
var body=getBodyAtMouse();
if (body) {
body.WakeUp();
//添加向上的冲力
var impulse:b2Vec2=new b2Vec2(0,-80);
body.ApplyImpulse(impulse,body.GetWorldCenter());
if (Math.random()<0.382) {
body.ApplyTorque(450);
} else {
body.ApplyTorque(-450);
}
}
}
private function getBodyAtMouse():b2Body {
var body:b2Body;
var mouseBox2dX=stage.mouseX/phsScale;
var mouseBox2dY=stage.mouseY/phsScale;
var mousePosition:b2Vec2=new b2Vec2(mouseBox2dX,mouseBox2dY);
var AABB:b2AABB= new b2AABB();
AABB.lowerBound.Set(mouseBox2dX-0.001,mouseBox2dY-0.001);
AABB.upperBound.Set(mouseBox2dX+0.001,mouseBox2dY+0.001);
var shapes:Array= new Array();
var maxCount:uint=6;
var count:int=m_world.Query(AABB,shapes,maxCount);
for (var i:uint=0; i<count; i++) {
if (shapes[i].m_body.IsStatic()==false) {
var shape=shapes[i] as b2Shape;
var shapeXform=shape.m_body.GetXForm();
var inside:Boolean=shape.TestPoint(shapeXform,mousePosition);
if (inside) {
body=shape.m_body;
}
}
}
return body;
}
//释放内存
private function onUp(e:MouseEvent):void {
trace("nothing to be done !");
}
//直接copy这个模板
private function Update(e:Event):void {
m_world.Step(m_timeStep, m_iterations);
// Go through body list and update sprite positions/rotations
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
if (bb.m_userData is Sprite) {
bb.m_userData.x=bb.GetPosition().x*30;
bb.m_userData.y=bb.GetPosition().y*30;
bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
}
}
}
}
}
demo : http://11611.jjii.net/swf/MyDoneB2.swf
- box2d系列之 加冲力(impulse)
- box2d系列之创建b2Revolutejoint
- box2d系列之 反作用力的实现
- Bullet之了解Force Torque Impulse
- Bullet之了解Force Torque Impulse
- box2d 系列之用b2ContactListener管理碰撞检测
- BOX2d 系列:绘制曲线
- box2d系列: 绘制圆
- 冲量(impulse)
- Impulse Train
- Java 加解密技术系列之 BASE64
- Java 加解密技术系列之 MD5
- Java 加解密技术系列之 SHA
- Java 加解密技术系列之 HMAC
- Java 加解密技术系列之 DES
- Java 加解密技术系列之 AES
- Java 加解密技术系列之 PBE
- Java 加解密技术系列之 RSA
- Introduction to Oracle Locking and Enqueue
- 利用iptables防火墙保护Oracle数据库【经典博客】
- 用C++实现的双向链表
- 讨论风采和蓝天白云的校园
- 爬虫调研之Hetrix(1): 使用方法
- box2d系列之 加冲力(impulse)
- 在RedHat7.0下安装Oracle的经历【经典博客】
- 爬虫调研之Hetrix(2):架构设计参考
- Oracle数据安全面面观【经典博客】
- 漂亮code的表现
- 盘口挂单技巧
- 自动备份Oracle数据库【经典博客】
- 2009.10.11 OA 项目组一周工作报告(论重构)
- 超初级的linux后门制作方法【经典博客】