1

私のゲームでは 2 つのオブジェクトが互いに衝突していますが、別のオブジェクトとの衝突後にオブジェクトの角度を変更したいと考えています。衝突後、オブジェクトの方向を 180 度に変更したいです。衝突に物理学を使用しました。助けや提案があれば..ありがとう

4

1 に答える 1

1

以下を使用して、物体の線形速度の x、y 成分を取得してみてください。

vx, vy = myBody:getLinearVelocity()

次のようにリセットします。

myBody:setLinearVelocity(-vx,-vy ) 

詳細については、Corona - Physics Bodiesを参照してください。

サンプル:

local physics = require( "physics" )
physics.start()

-- Create ground and bodies ---
local ground = display.newImage( "ground.png" )
ground.x = display.contentWidth / 2
ground.y = 445
ground.myName = "ground"

local crate1 = display.newCircle(0,0,30,30)
crate1.x = 180; crate1.y = 350
crate1.myName = "first crate"

local crate2 = display.newCircle(0,0,30,30)
crate2.x = 220; crate2.y = -50
crate2.myName = "second crate"

-- physics.setDrawMode( "debug" ) -- Uncomment this line to see the physics shapes

-- Adding physics --
physics.addBody( ground, "static", { friction=0.5, bounce=0.3 } )
physics.addBody( crate1, { density=3.0, friction=0.5, bounce=0.3,radius = 30} )
physics.addBody( crate2, { density=3.0, friction=0.5, bounce=0.3,radius = 30} )

crate1:setLinearVelocity( 0, -400 )

-- Collision function --
local function onGlobalCollision( event )
  if ( event.phase == "began" ) then
    print(event.object1.myName .. " & " .. event.object2.myName .. " collision began" )
    vx_1, vy_1 = crate2:getLinearVelocity()     -- get the velocities of crate2
    crate2:setLinearVelocity(-vx_1,-vy_1 )      -- reset the velocities of crate2

    vx_2, vy_2 = crate1:getLinearVelocity()     -- get the velocities of crate1
    crate1:setLinearVelocity(-vx_2,-vy_2 )      -- reset the velocities of crate1
  end   
end
Runtime:addEventListener( "collision", onGlobalCollision )

コーディングを続ける.............. :)

于 2013-08-05T19:34:18.753 に答える