Total Pageviews

Monday, April 21, 2014

physics.addBody()

ចំនែកហ្វាំងសិនរបស់វាមានដូចខាងក្រោមះ
Physics.addBody()
នៅពេលអ្នកចាប់ផ្តើមសរសេរកូដសំរាប់ហ្គេម ពេលនោះការប្រើប្រាស់ Physics ពិតជាមាន អត្ថប្រយោជន៏ណាស់។ សំរាប់ Physics.addBody គឺប្រើសំរាប់ដាក់ឪ្យគ្រប់ទាំង display object ទៅក្នុង Simulated physical object ជាមួយតែបន្ទាត់codeតែមួយ Line, ដែលយើងនឹងដាក់ assignment របស់ Physical properties ដូចខាងក្រោមះ
១. បើសិនជាមិនមាន Shape ពេលនោះ Body boundaries នឹងត្រូវ snap ទៅកាន់ rectangle boundaries របស់ Display object
២. បើសិនវាជាតំលៃ Radius ពេលនោះ body boundaries នឹងក្លាយជាមូល(circle) ហើយ ចំនុចកណ្តាល់ស្ថិតនៅចំកណ្តាល់របស់ display object ដែលប្រើសំរាប់បង្កើត Physics body
៣. បើសិន Shape ជា Table ពេលនោះ body boundaries នឹងតាម Polygon ដែលផ្តល់ដោយ Shape។ សូមសំគាល់ថា ចំនួនSide ច្រើនបំផុតរបស់គ្រប់ Shape នីមួយៗគឺ៨ ។ ហើយគ្រប់ទាំងមុំកែងរបស់វាគឺ convex។ ការដាក់ Shape table នឹងត្រូវ override  a radius property។ បើសិនជាវាត្រូវបានដាក់ឪ្យច្បាស់លើធាតុដូចគ្នា។ ចំណែក Shape Coordinates ត្រូវតែជា Clockwise។ ចុងក្រោយបំផុត vertex​ទី១​&ចុង ក្រោយត្រូវតែខុសគ្នា។
៤. បើសិនវាជា outline table ពេលនោះ body boundaries នឹងតាម​ outline provided តាមរយះ outline
៥.​ ចំណែក body shape ត្រូវតែជា Table នៃ Local x & y coordinate pairs ដែលទាក់ទង់នឹងចំនុចកណ្តាលរបស់ Display Object
៦. ចំណែក Complex body ត្រូវតែសាងសង់តាមរយះ multiple body elements & shapes។ ក្នុង ករណីដែល overall shape របស់ Object ជា concave or shape មានច្រើនជាង៨ចំនុច សូមប្រើ multiple body elements ក្នុងការសាងសងវា។ សូមមើល physics bodies សំរាប់ពណ័មានថែម
៧. គ្រប់ទាំង body elements គួរតែមាន own physical properties
៨. សំរាប់ body element index ត្រូវជាផ្នែករបស់ Collision event ដូចនេះពេលវាអាចស្វែងរក ផ្នែកណាដែលត្រូវជា Complex body ដែលទាក់ទង់នឹង Collision

ចំណាំះ
១. នៅពេលបំលៃង Object មួយទៅជា Physics object, ពេលនោះ Physics engine “owns” Object ហើយមានច្បាប់វាលើ Object នោះ។ Engine ក៏ Assume ថា ចំនុច anchor point គឺស្ថិតនៅចំនុចកណ្តលរបស់ Object
២. អាច Scale Object Up & down ប៉ុន្តែ Physics engine នៅតែមើលឃើញ Object ដូចមុនពេលវាផ្លាស់ប្តូរ
៣. សូមកុំបន្ថែម Physics ទៅលើ Line Object ដោយប្រើជាមួយនឹង display.newLine() ទាល់តែដាក់វា Static
៤. សូមកុំបន្ថែម add physics body អំឡុងពេល Collision event។ សូមរង់ចាំទាល់តែ next application cycle
៥. សូមមើល Physics bodies & Limitations សំរាប់ពត័មានបន្ថែម
ចុះ Syntax របស់ Physics addBody មានអីដែរ?

Rectangular body
Physics.addBody ( object, [ bodyType, ] { density = d, friction = f, bounce = b [, filter = f ] } )
Circular body
Physics.addBody ( object , [ bodyType, ] { density = d, friction = f, bounce = b, radius = r [, filter = f ] } )
Physics.addBody ( object, [bodyType, ] { density = d, friction = f, bounce = b, shape = s [, filter = f ] } )
Multi-Element body
Physics.addBody ( object, [bodyType, ]
            { density = d1, friction = f1, bounce = b1, shape = s1}
{ density = d2, friction = f2, bounce = b2, shape = s2}
{ density = d3, friction = f3, bounce = b3, shape = s3}
)
Outline body
Physics.addBody ( object, [ bodyType, ] { density = d, friction = f, bounce = b, outline = { x1,y1,x2,y2,x3,y3,…} [, filter = f ] } )

សំរាយកូដះ
Object(តំរូវការ)វាជាឈ្មោះរបស់ Display Object ដែលត្រូវ Add a physics body
bodyType(ជំរើស) វាជា String ដែលប្រភេទរបស់ Body type អាចជា Optional string parameter មុនពេល the first body element។ ហើយវាមានតាមប្រភេទរបស់វា “static” “dynamic” & “kinematic” ដែលតំលៃដើមរបស់វាគឺ dynamic។ សូមមើល object.BodyType សំរាប់ពត័មានច្រើនទៀត។
Density(ជំរើស) វាជាចំនួនលេខដែលប្រើសំរាប់ Multiplied តាមរយះ body’s shape ក្នុងការ កំនត់ Mass។ អាស្រ័យតាមរូមមន្តរបស់វាគឺ 1.0 សំរាប់ទឹក, ចំណែកវត្ថុស្រាល់ជាងវាគឺមាន density ក្រោម ១.០ ចំណែកវត្ថុធ្ងន់ជាងមានតំលៃធំជា 1.0 តំលៃដើមរបស់វាគឺ ១.០
Friction(ជំរើស) វាជាចំនួនលេខដោយមិនមាន តំលៃ non-negative ដែលតំលៃ 0.0 គឺមានន័យថាមិនមាន friction ចំណែក 1.0 មានន័យថា fairly strong friction។ តំលៃដើមគឺ 0.0
Bounce(ជំរើស) វាជាចំនួនលេខដែលកំនត់ថាតើមាន Object’s velocity ណាដែលនឹងត្រឡប់ បន្ទាប់ពី Collision។ តំលៃដើមគឺ 0.2
Radius(ជំរើស)​ វាជាចំនួនលេខ Radius of bounding cirlce
Shape()វាជា shape array ដែលផ្ទុកនៅ shape’s vertices: { x1,y1,x2,y2, …, xn,yn} បើសិនជាយើងមាន pentagonShape = {0, -37,37,-10,23,34,-23,34,-37,-10} ចំនុច Coordinates ត្រូវតែជា Clockwise order ហើយលទ្ធផលត្រូវតែជា convex គ្រប់ទាំង Angle points។ សំរាប់ Physcis engine សន្មត់ថា 0,0 points គឺជាចំនុចកណ្តាលរបស់ object។ ចំណែក negative x នឹងស្ថិតនៅ left of object’s center and negative y will be top of the object’s center

Outline(ជំរើស) វាជាអារ៉េ ដែលផ្ទុកដោយ shape’s vertices {x1,y1,x2,y2,…,xn,yn} ដែលកូដវាមាន​outline = {0,-37,37,-10,23,34,-23,34,-37,-10} សំរាប់ Outline មានការសាងសងត្បិតត្បៀង ជាង A shape ។ outline អាចជា convex Or concave
Filter(ជំរើស)​ វាជាតារាង (table) សំរាប់តំលៃ Filter (see collision detection for more info)
categoryBits = cb ដែល cb គឺជា category របស់ Object ។តំលៃដើម 0x0001
maskBits = mb ដែល mb គឺជា category ដែល shape would accept for collision។ តំលៃដើម 0xffff
groupIndex = gb ដែល gb ជាចំនួនច្បាស់លាស់ណាមួយដែលមិនមាន collide ទាល់តែសោះ(negative) or always collide (position) តំលៃដើមគឺ ០ (disabled) បើសិនជា groupIndex ត្រូវបានបញ្ចូល non-zero it overrides the maskBits setting


No comments:

Post a Comment