Event Collision
សំរាប់
physics
engine collision events ត្រូវបាន exposed តាមរយះ
Corona event-listener modelជាមួយនឹង three type
events “collision”,”preCollision” & “postCollision”
នៅពេលដែល
event
ត្រូវបានរកឃើញជាមួយនឹង table listener នៅក្នុង
object, ពេលនោះ certain properties ត្រូវបានដាក់ជំនួស
Object1
à target
Object2
à other
Element1
à selfElement
Element2
à otherElement
ចំណាំះ
សំរាប់ទីតាំង
X
& Y វាអាច influenced ដោយសារ physics.getAverageCollisionPositions()
& physics.setReportCollisionInContentCoordinates()
Event
position
អំឡុងពេលដែលវាបានបញ្ចប់
ended
phase, the X & Y positions តែងតែសូន្យ។ នេះជាដែនកំនត់របស់ Box2D។ នៅពេលដែល collision ទាក់ទង់នឹង circle ហើយបើសិនជា collision result ត្រូវបានត្រឡប់នៅក្នុង
local space ពេលនោះ local space position នៃ collision គឺតែងតែសូន្យ 0,0 នេះជាដែនកំនត់របស់ Box2D
Modifying
Objects
សំរាប់
object
ទាក់ទង់នឹង collision ដែលមិនត្រូវបានលុបចេញ
ឬក៏ it’s properties ក្នុងអំឡុងពេល collision event។ ចូរប្រើ timer.performWithDelay()
បើសិនជាចង់ modify object position values ឬក៏
other properties ជាមួយនឹង collision events។ ការលុបចេញនៅ object or modifying the properties នៅក្នុង collision event ដែលអាចធ្វើឪ្យវា Crash។
Properties:
event.contact
ក្នុងអំឡុងពេលដែល
Collision
វាមាន multiple contact points ដែលកើតឡើង។
វាអាច manipulate គ្រប់ contact points ទាំងអស់ក្នុងការបង្កើត certain effects។
ចំណាំះ
សូមកុំ hold
onto ទៅកាន់ contact object។ វាគ្រាន់តែជា valid
នៅក្នុង scope នៃ collision listener
Properties:
Event.contact.istouching
តើវត្ថុ២បានប៉ះគ្នាទេ? (read-only)
Event.contact.isEnabled
តើ collision នឹងត្រូវដោះស្រាយឬ? (read-write)
Event.contact.bounce
វាជា bounce factor របស់ collision
(read-write)
Event.contact.friction
វាជា friction factor របស់ collision
(read-write)
សូមមើលកូដះ
local
platform = display.newImage( "platform.png" )
platform.collType
= "passthru"
physics.addBody(
platform, "static", { bounce=0.0, friction=0.3 } )
function
character:preCollision( event )
local collideObject = event.other
if ( collideObject.collType ==
"passthru" ) then
event.contact.isEnabled = false --disable
this specific collision!
end
end
event.element1
វាជាចំនួនលេខរបស់
event.object1’s
element ដែលបាន hit ជាមួយនឹង collision
event.element2
វាជាចំនួនលេខរបស់
event.object2’s
element ដែលបាន hit ជាមួយនឹង collision
event.object1
វាជា
reference
ទៅកាន់ first object នៅក្នុង collision
សូមមើលកូដះ
local
function onCollision( event )
if ( event.phase == "began" )
then
print( "began: " ..
event.object1.myName .. " & " ..
event.object2.myName )
elseif ( event.phase == "ended" )
then
print( "ended: " ..
event.object1.myName .. " & " ..
event.object2.myName )
end
end
event.object2
វាជា
reference
ទៅកាន់ second object នៅក្នុង collision
សូមមើលកូដះ
local
function onCollision( event )
if ( event.phase == "began" )
then
print( "began: " ..
event.object1.myName .. " & " ..
event.object2.myName )
elseif ( event.phase == "ended" )
then
print( "ended: " ..
event.object1.myName .. " & " ..
event.object2.myName )
end
end
event.phase
សំរាប់
phase
collision ច្បាស់ណាមួយនៅក្នុង physics collision listener
& អាចជាមួួក្នុងចំណោមខាងក្រោមះ
Began: វាត្រូវបាន indicates ជាមួយនឹង collision
រវាង two bodies នៅចំនុចចាប់ផ្តើម contact
Ended:
វាត្រូវបាន indicates ជាមួយនឹង collision
រវាង two bodies ត្រូវបានបំពេញ
សូមមើលកូដះ
local
crate1 = display.newImage( "crate.png", 100, 200 )
physics.addBody(
crate1, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate1.myName = "first crate"
local
crate2 = display.newImage( "crate.png", 100, 120 )
physics.addBody(
crate2, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate2.myName = "second crate"
local
function onCollision( event )
if ( event.phase == "began" )
then
print( "began: " ..
event.object1.myName .. " & " ..
event.object2.myName )
elseif ( event.phase == "ended" )
then
print( "ended: " ..
event.object1.myName .. " & " ..
event.object2.myName )
end
end
Runtime:addEventListener(
"collision", onCollision )
event.name
វាជា
String
“collision”
event.x
វាជាចំនុចទីតាំងរបស់
X
នៅក្នុង global screen coordinates ដែល collision
event បានកើតឡើង
សូមមើលកូដះ
local
crate1 = display.newImage( "crate.png", 100, 200 )
physics.addBody(
crate1, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate1.myName = "first crate"
local
crate2 = display.newImage( "crate.png", 100, 120 )
physics.addBody(
crate2, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate2.myName = "second crate"
local
function onCollision( event )
if ( event.phase == "began" )
then
print( "began: " ..
event.object1.myName .. " & " ..
event.object2.myName .. " at " .. event.x ..
"," .. event.y )
elseif ( event.phase == "ended" )
then
print( "ended: " ..
event.object1.myName .. " & " ..
event.object2.myName .. " at " .. event.x ..
"," .. event.y )
end
end
Runtime:addEventListener(
"collision", onCollision )
event.y
វាចំនុចទីតាំងរបស់
Y
នៅក្នុង global screen coordinates ដែល collision
event បានកើតឡើង
សូមមើលកូដះ
local
crate1 = display.newImage( "crate.png", 100, 200 )
physics.addBody(
crate1, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate1.myName = "first crate"
local
crate2 = display.newImage( "crate.png", 100, 120 )
physics.addBody(
crate2, { density = 1.0, friction =
0.3, bounce = 0.2 } )
crate2.myName = "second crate"
local
function onCollision( event )
if ( event.phase == "began" )
then
print( "began: " ..
event.object1.myName .. " & " ..
event.object2.myName .. " at " .. event.x ..
"," .. event.y )
elseif ( event.phase == "ended" )
then
print( "ended: " ..
event.object1.myName .. " & " ..
event.object2.myName .. " at " .. event.x ..
"," .. event.y )
end
end
Runtime:addEventListener(
"collision", onCollision )
No comments:
Post a Comment