Labels

Tuesday, February 16, 2010

PyBox2D Hello World

#!/usr/bin/env python
# coding = utf-8
"""
Box2D-г ашиглаж багахан физик симулацийг бид хийх гэж байна. 
Том хэмжээтэй хөдөлгөөнгүй газрыг төлөөлөх бие болон жижиг 
динамик хайрцаг үүсгэнэ
Санамж:
Энэ жишээгээр ямар нэгэн график үзүүлэхгүй бөгөөд текст байдлаар харуулна.
"""


from Box2D import *
 
# Ертөнцийн хэмжээг зааж өгнө. Хэрэв биес хязгаарт нь хүрвэл 
# симулац ажилласаар байх боловч програм удаашрах талтай
worldAABB=b2AABB()
worldAABB.lowerBound = (-100, -100)
worldAABB.upperBound = ( 100,  100)

# Гравитацийн вектор утгыг тодорхойлж байна.
# Өөрөөр хэлбэл яль чиглэлд юм унах вэ гэдгийг зааж өгч байна.
gravity = b2Vec2(0, -10)
 
# Биесийг sleep хийх боломжийг олгох
doSleep = True
 
# world буюу ертөнцийг төлөөлөх объектийг үүсгэх
# энэ нь хатуу биесийг дотроо агуулан симулацийг ажиллуулдаг
world = b2World(worldAABB, gravity, doSleep)

# ground body буюу нөгөө хөдөлгөөнгүй газрыг төлөөлөх биеийг үүсгэх
groundBodyDef = b2BodyDef()
groundBodyDef.position = [0, -10]
 
# ground body зориулж санах ой хуваарьлах
# world-руу бие нэмэгдэж орох болно
groundBody = world.CreateBody(groundBodyDef)
 
# ground-д зориулж хайрцаг дүрс үүсгэх
groundShapeDef = b2PolygonDef()
 
# 50 10 ийн харьцаа бүхий хэмжээтэй
groundShapeDef.SetAsBox(50, 10)
 
# ground биелүү дүрсийг нь нэмж өгөх.
groundBody.CreateShape(groundShapeDef)
 
# Динамик буюу хөдөлгөөнт биеийг тодорхойлох. 
# байрлалийг нь мөн оноогоод санах ойд хуваарилан авч байна
bodyDef = b2BodyDef()
bodyDef.position = (0, 4)
body = world.CreateBody(bodyDef)
 
# Динамик биед зориулж  1 1 хэмжээтэй квадрат дүрс үүсгэж байна
shapeDef = b2PolygonDef()
shapeDef.SetAsBox(1, 1)
 
# хөдөлгөөнт хайрцагны density буюу хувийн жинг 0-ээс ялгаатай 1
# гэж өгснөөр динамик шинж чанартай болно. Өөрөөр хэлбэл доошоогоо унана
shapeDef.density = 1
 
# Үрэлтийн коэффициентэд дахин өөр утга өгч байна
shapeDef.friction = 0.3
 
# динамик биед дүрсийг нь олгож байна.
shape=body.CreateShape(shapeDef)
 
# Харин одоо динамик биеийн дүрсний утга буюу хэмжээ дамжааных нь
# шинж чанар дээр суурьлан түүний масс буюу хувийн жинг тооцоолж өгч байна
body.SetMassFromShapes()
 
# Симулац хийхэд бэлтгэх. 1/60 -ийн хугацааны давтамжтай байх буюу
# 60Hz  бөгөөд 10 давтамж/8-н байрлал гэсэн итерацитай хийгдэнэ.
# Энэ тохиргоо нь ихэнхи тоглоомуудад өндөр чанартай үүрэг гүйцэтгэнэ
timeStep = 1.0 / 60
vel_iters, pos_iters = 10, 8
 
# Энэ бол манай тоглоомын жижиг цикл
for i in range(60):
    # Симулацийн ганц алхамд үйлдэл хийж байна.
    # хугацаа алхам нь засагдсан байдалтай хэвлэгдэнэ. 
    world.Step(timeStep, vel_iters, pos_iters)
 
    # Биеийн байрлал болон өнцөгийн утгыг терминалруу хэвлэж харуулах
    print body.position, body.angle

Доор screenshoot-ийг хавсаргав

2 comments:

Гүнчин-Ишийн Шаравсамбуу said...

python хэл судлаж байж гэнэт Pygame pybox2d энэ тэр гэх нь жаахан учир дутагдалтай байнаа. Та бүгд юу гэж бодож байна?

Bilgee said...

joohon hetsuu l ym bn. Python dongoj sudalj bga bolohoor