Total Pageviews

Monday, April 21, 2014

អ្នកស្អប់រូបវិទ្យាទេ? Library Physics របស់ Corona SDK


ហេតុអ្វីត្រូវប្រើ Physics? សំរាប់ Physics ត្រូវបានគេប្រើជាទូទៅសំរាប់ កម្មវិធីដែលទាក់ទង់នឹង simulation of object ដែលធ្វើចលនា, ប៉ះទង្គិច មានការ interact under varios physical forces ដូចជា gravity។ សំរាប់ Corona SdK បានផ្តល់នូវភាពងាយស្រូលក្នុងការបន្ថែម physics ទៅកាន់កម្មវិធីរបស់អ្នកបាន។ សំរាប់ការធ្វើការជាមួយនឹង physics ត្រូវតែទាក់ទង់នឹង display objects។​ ដែលវាអាចជា graphics objects, images, vector objects or animated sprites អាចបង្កើតជាមួយនឹង physic បានហើយវានឹង interact ជាមួយនឹង other objects នៅក្នុង simulation
ចំនុចសំខាន់ះ
សូមមើលនៅចំនុចសំខាន់ខ្លះរបស់ Physics នៅពត៏មានដូចខាងក្រោមះ
Physics setup
ដើម្បីប្រើប្រាស់វា ត្រូវការ Library, បន្ទាត់ខាងក្រោមជាការហៅវាមកប្រើ
Local physics = require (“physics”)
Start / pause / stop
សំរាប់ហ្វាំងសិនខាងក្រោមនេះប្រើជាការ Start / Pause / Stop របស់ Physics simulation
Physics.start()either instantiates or resume the simulation (if paused) ការចាប់ផ្តើម physics simulation មុនពេលចាប់ផ្តើមហៅ any other physics functions
Physics.pause() ប្រើសំរាប់ Pause the physics simulation
Physics.stop() វានឹងឈប់នូវ Physics ទាំងអស់

Sleeping bodies
បើសិនជា Physics body មិនទាក់ទង់នឹង Collision detection វានឹង​”sleep” បន្ទាប់ពីរយះពេល a few seconds។ ដូចនេះការប្រើ body.isSleepingAllowed = false
សូមមើលកូដះ
Physics.start (true)
Physics.start (false)


Simulation options:
សំរាប់ Physics engine មាន​features ខ្លះជា global simulation options។ ដែលវាជួយបន្ថែមនូវសមត្ថភាពច្រើន
Physics.setGravity() វានឹងបញ្ចូលនូវតំលៃ X & Y components របស់ global gravity vector, ដែលគិតជា Units m/s2។ សំរាប់តំលៃដើមរបស់វាគឺ (0, 9.8) to simulate standard earth gravity, ដែលនឹង pointing downward on the Y axis
Physics.setGravity (0,6)

Physics.setScale() ប្រើសំរាប់បញ្ចូលនូវ​ internal pixels per meter ratio ដែលប្រើក្នុងការបំលែងរវាង On-Screen Corona coordinates and simulated physics coordinates។ វាត្រូវធ្វើម្តងមុនពេលដែល Physical objects are instantiated។ ការផ្លាស់ប្តូរវានឹងប៉ះពាល់ដល់ការបង្ហាញ។ មើលរូបមន្តវា
Physics.setScale (60)

Physics.setDrawMode()ប្រើសំរាប់បញ្ចូល១ក្នុងចំណោមបី “rendering modes” សំរាប់ Physics engine។​ នៅពេលដែល Features រត់លើ devicesit’s most useful in the corona Simulator when debugging enexpected physics engine behavior:
physics.setDrawMode( "hybrid" )  --overlays collision outlines on normal display objects
physics.setDrawMode( "normal" )  --the default Corona renderer, with no collision outlines
physics.setDrawMode( "debug" )   --shows collision engine outlines only
ពេលនោះ Physics data ត្រូវបង្ហាញដោយការប្រើប្រាស់ Color vector graphics which reflect object types and attributes:
Orange: dynamic physics bodies
Dark blue: kinematic physics bodies
Green: stat, non movable physics bodies
Gray: a body that is sleeping due to lack of activity
Light blue: physical joints
  

Limitations
សំរាប់ដែនកំនត់របស់វាគឺថា ការបង្ហាញនៅ display objects ជាមួយនឹង physics bodies អាចបង្ហាញនៅចំនុចខុសគ្នានៅក្នុង display groups សំរាប់ z-index layering purposes។ បើសិនជាចង់ស្វែងរក collisions រវាង Objects នៅក្នុងក្រុមខុសគ្នា។ វាមិនអាច move/shift/scale groups independently of each other ពីព្រោះនៃការ underlying Box2D functionality។ វាអាច move/scale a series of groups ជុំវិញ unision or lock step។​ដូចជាក្រុមទាំងនេះនៅចំនុច coordinate origin។ បើសិនជា groups ត្រូវបាន moved or scaled independently of each other, Box2D collision system នឹងពិចារណាចំពោះ physics bodies នៅកន្លែងដើម, មិនមែននៅកន្លែងដែលវា modifying the group។ វាក៏បាន applied ចំពោះ “Hybrid” & ”Debug” draw mode simulation។ ទោះបីជា Draw modes អាចប្រាប់ទៅ bodies ឪ្យផ្លាស់ប្តូរនៅលទ្ធផលនៃ ការ modifying the group, the collision system នឹងនៅតែពិចារណាថាវាស្ថិតនៅកន្លែងដើមដដែល។


No comments:

Post a Comment