#!/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:
python хэл судлаж байж гэнэт Pygame pybox2d энэ тэр гэх нь жаахан учир дутагдалтай байнаа. Та бүгд юу гэж бодож байна?
joohon hetsuu l ym bn. Python dongoj sudalj bga bolohoor
Post a Comment