Powered By Blogger

วันจันทร์ที่ 29 สิงหาคม พ.ศ. 2554

From lesson 1 to lesson 17 It so long ):

























package
{
import Box2D.Collision.b2AABB;
import Box2D.Collision.b2Bound;
import Box2D.Collision.Shapes.b2PolygonDef;
import Box2D.Collision.Shapes.b2PolygonShape;
import Box2D.Common.Math.b2Vec2;
import Box2D.Dynamics.b2Body;
import Box2D.Dynamics.b2BodyDef;
import Box2D.Dynamics.b2DebugDraw;
import Box2D.Dynamics.b2World;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;

/**
* ...
* @author ... ney
*/
public class NEY extends MovieClip
{

protected var _world:b2World;

public static const RATIO:Number = 40;
private var _fallingCrate:b2Body;

public function NEY()
{
   

setupWorld();
createWallsAndFloor();
addACrate();
setupDebugDraw();
addEventListener(Event.ENTER_FRAME, newFrameEvent);


}

private function setupDebugDraw():void
{
var spriteToDrawOn:Sprite = new Sprite();
addChild(spriteToDrawOn);

var artistForHire:b2DebugDraw = new b2DebugDraw();
artistForHire.m_sprite = spriteToDrawOn;
artistForHire.m_drawScale = RATIO;
artistForHire.SetFlags(b2DebugDraw.e_shapeBit);
artistForHire.m_lineThickness = 2.0;
artistForHire.m_fillAlpha = 0.6;

_world.SetDebugDraw(artistForHire);



}

private function newFrameEvent(e:Event):void
{
_world.Step(1.0 / 30.0, 10);


trace("Falling crate is at " + _fallingCrate.GetPosition().x + ", " + _fallingCrate.GetPosition().y);
}

private function addACrate():void
{
var fallingCrateDef:b2PolygonDef = new b2PolygonDef();
fallingCrateDef.SetAsBox(25 / RATIO, 25 / RATIO);
fallingCrateDef.friction = 0.8;
fallingCrateDef.restitution = 0.3;
fallingCrateDef.density = 0.7;

var fallingBodyDef:b2BodyDef = new b2BodyDef();
fallingBodyDef.position.Set(250 / RATIO, -30 / RATIO);
fallingBodyDef.angle = 30 * Math.PI / 180;

_fallingCrate = _world.CreateBody(fallingBodyDef);
_fallingCrate.CreateShape(fallingCrateDef);
_fallingCrate.SetMassFromShapes();


}

private function createWallsAndFloor():void
{
var bigLongShapeDef:b2PolygonDef = new b2PolygonDef();
bigLongShapeDef.vertexCount = 4;
b2Vec2(bigLongShapeDef.vertices[0]).Set(0 / RATIO, 0 / RATIO);
b2Vec2(bigLongShapeDef.vertices[1]).Set(550 / RATIO, 0 / RATIO);
b2Vec2(bigLongShapeDef.vertices[2]).Set(550 / RATIO, 10 / RATIO);
b2Vec2(bigLongShapeDef.vertices[3]).Set(0 / RATIO, 10 / RATIO);
bigLongShapeDef.friction = 0.5;
bigLongShapeDef.restitution = 0.3;
bigLongShapeDef.density = 0.0;

var floorBodyDef:b2BodyDef = new b2BodyDef();
floorBodyDef.position.Set(0 / RATIO, 390 / RATIO);

var floorBody:b2Body = _world.CreateBody(floorBodyDef);

floorBody.CreateShape(bigLongShapeDef);
floorBody.SetMassFromShapes();

trace ("My world now has" + _world.m_bodyCount + "bodies in it");

var tallSkinnyShapeDef:b2PolygonDef = new b2PolygonDef();
tallSkinnyShapeDef.SetAsBox(5 / RATIO, 195 / RATIO);
tallSkinnyShapeDef.friction = 0.5;
tallSkinnyShapeDef.restitution = 0.3;
tallSkinnyShapeDef.density = 0.0;

var wallBodyDef:b2BodyDef = new b2BodyDef();
wallBodyDef.position.Set(5 / RATIO, 195 / RATIO);

var leftWall:b2Body = _world.CreateBody(wallBodyDef);
leftWall.CreateShape(tallSkinnyShapeDef);
leftWall.SetMassFromShapes();

wallBodyDef.position.Set(545 / RATIO, 195 / RATIO);
var rightWall:b2Body = _world.CreateBody(wallBodyDef);
rightWall.CreateShape(tallSkinnyShapeDef);
rightWall.SetMassFromShapes();

trace ("My world now has" + _world.m_bodyCount + "bodies in it");


}

private function setupWorld():void
{

var universeSize:b2AABB = new b2AABB();
universeSize.lowerBound.Set( -3000 / RATIO, -3000 / RATIO);
universeSize.upperBound.Set(3000 / RATIO, 3000 / RATIO);

var gravity:b2Vec2 = new b2Vec2(0, 10);

var ignoreSleeping:Boolean = true;


_world = new b2World(universeSize, gravity, ignoreSleeping);

trace ("My world has" +_world.GetBodyCount() +"bodies in it!");






}



}

}


นี่คือ code ที่ลองเขียนไปพร้อมกับ tutorial ในขั้นแรกจะเป็นการสร้าง world กำหนดค่า pixel / meter กำหนดค่าแรงโน้มถ่วง ต่อมาจะเป็นการสร้าง wall และตัว body โดยการ definition ค่าต่างๆเช่น  shape,density, friction และ restriction เมื่อได้วัตถุแล้วจะเป็นการกำหนดจุดตกต่างๆโดยการกำหนดในแกน x,y ส่วน background ด้านหลังของงานนั้นอยู่ในส่วนของโปรแกรม flash cs5 ที่ลองมั่วๆเอาเพราะไม่เคยใช้มาก่อน (:

ไม่มีความคิดเห็น:

แสดงความคิดเห็น