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 ที่ลองมั่วๆเอาเพราะไม่เคยใช้มาก่อน (:

วันอาทิตย์ที่ 21 สิงหาคม พ.ศ. 2554

My work lesson#8




สามารถดู clip เรื่องของการสร้างขอบเขตความกว้างของงานได้ที่บล๊อกของสไปร์ทครับ (:

http://sprite-zaa.blogspot.com/

Box2D new version

http://sourceforge.net/projects/box2dflash/files/box2dflash/Box2DFlashAS3_2.0.2/Box2DFlashAS3_2.0.2_.zip/download

เนื่องจากตัวเก่าขาด Source code ไปบางตัวตัวนี่เป็นตัวใหม่ที่ผมหาเจอในตอนนี้มี source code ค่อนข้างมากพอสมควร ;D

lesson #8

Units

Flash : Everything's in pixel
ex. mySprite.x = 200;
      mySprite.y = 400;
My Sprite will be at 200,400 on screen

Box2D : Everything's in meters
ex. myBody.x = 5.0
     myBody.y = 8.0
My physic body will be at . . .. . on screen . I don't know answer now because I don't know what does 1 meter equal in pixel.

Ans . .. . We can define ratio of pixel to meter in Program.

ในส่วนของ lesson 8 จะกล่าวถึงการบอกให้ทราบถึงข้อกำหนดหน่วยของข้อมูลต่อตัวโปรแกรมที่ใช้โดย Flash จะให้ในหน่วยของ pixel แต่ Box2D จะใช้ meter เป็นการแสดงผลข้อมูล แต่ Box2Dจำเป็นต้องใช้ Flash ในการแสดงผลดังนั้นจึงต้องมีการกำหนดอัตราส่วนของ pixel และ meter ขึ้นมาในโปรแกรมโดยใช้คำสั่งว่า  Public Static const RATIO:Number = 40;  ตัวเลขด้านหลังแล้วแต่จะกำหนด

วันอาทิตย์ที่ 14 สิงหาคม พ.ศ. 2554

Tutorial Box2D lesson 4&5


Lesson 1.4: Understanding Box2D
Totally different units

-Flash uses pixels, Box2D uses meter
-Flash uses degrees, Box2D uses radians



Lesson 1.5: The kinda long and boring lesson on setting everything up
1. Start out project in FlashDevelop

2. Create our .fla file
3. Link to our Box2D libraries


You can download FlashDevelop and Box2D on Sprite blog (http://sprite-zaa.blogspot.com/)


และจากที่ได้ไปค้นหาข้อมูลมาเพิ่มเติมนอกจากจะใช้ FlashDevelop คู่กับ Box2D แล้วยังสามารถใช้ Flash Actionscript3.0 กับ Box2D ได้อีกด้วย
ที่มา http://9note.blogspot.com/search/label/Box2D

Ex Factorial C++

#include<stdAfx.h>                           <<< เลือกใช้แฟ้มข้อมูลที่ต้องการ
#include<conio.h>                            <<< เนื่องจาก function ที่ใช้งานประกาศไว้ที่แฟ้มเหล่านี้
int main()                                          <<< เริ่ม main function
{                                                    
int n=1;                                    <<< ประกาศตัวแปร local
int i;                                          <<< ประกาศตัวแปร local
printf("Factorial"" ");                 <<< ให้พิมพ์คำว่า "Factorial"
scanf("%i",&i);                         <<< รับและส่งค่าเข้าไปในตัวแปร i
while(i>1)                                <<< ระกาศเงื่อนไขของการน loop while
{                                             <<< เข้าสู่ Function while
n=n*i;                             <<< ประกาศเงื่อนไขของ Factorial ของ Function While                
i--;                                 <<< กำหนดค่าที่ใช้ในการหยุดการวน loop (i--,i=i-1)
}                                            <<< สิ้นสุดการทำงานของ Function while
printf("ans factorial=%i",n);     <<< print คำว่า ans factorial และต่อด้วยผลลัพธ์หรือค่า n
scanf("  ");                                <<< ใช้เพื่อหยุดหน้าจอโปรแกรม =.,=
}                                                    


จากการทำงานของ code C++ ข้างต้นใช้หลักการทำงานของการกำหนดค่าตัวแปรที่จำเป็นต่อการหาค่า Factorial คือ int n=1 (เพื่อใช้เป็นตัวเก็บค่าของผลลัพธ์) สาเหตุเนื่องมาจากการคำนวน Factorial คือการคูณด้วยจำนวนข้างต้น(i)ลบ 1 ไปเรื่อยๆจนกว่าค่า i จะมากกว่า 1 หรือ factorial i = n*i(n*(i-1))(n*(i-2))(n*(i-3)) .. . เมื่อ i >1 จะเป็นเท็จและค่า n จะหลุดออกจาก loop ในที่สุด






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

Ex C++


เป็นการรันรูป * ให้เรียงกันเป็นรูป 3 เหลี่ยมโดยเรากำหนดตัวแปร a,b โดยที่ a มีค่าได้ไม่เกิน 5 แถว ส่วน b คือ column \n เป็นตัวแสดงถึงการขึ้นบรรทัดใหม่และเพิ่มค่าทีละ 1 เรื่อยๆ ใช้ scanf เป็นตัวรับค่าและใช้ return 0 เป็นตัวส่งค่ากลับ