1

私はこのシーンを持っています。地球がブラックホールと衝突したときに爆発スプライトを再生したいと思います。

ここに画像の説明を入力

だから私はこれを書いた:

local function onCollision( event )
    if ( event.phase == "began" ) then   
        if(event.object1.name =="blackholeSprite" or event.object2.name =="blackholeSprite") then
            explosionSprite.x=event.x
            explosionSprite.y=event.y
        explosionSprite:play()
        timer.performWithDelay( 1500, gameOver )        
        end 
    end

end

event.x問題は、ボールとブラックホールが衝突して爆発が起こらないことevent.yです。スクリーンショットからわかるように、爆発は左上隅で発生します。なぜこれが起こるのか分かりますか?

4

1 に答える 1

1

おそらく、衝突イベントの「落とし穴」の下のドキュメントで報告されていることが原因です。

落とし穴

x と y の位置は、 と の影響を受ける可能性がphysics.getAverageCollisionPositions()ありphysics.setReportCollisionsInContentCoordinates()ます。

イベント位置

「終了」段階 (「衝突検出ガイド」を参照) では、X と Y の位置は常にゼロです。これは Box2D の制限です。

また、衝突に円が含まれる場合、衝突結果がローカル空間で返される場合 (「 」を参照physics.setReportCollisionsInContentCoordinates())、衝突のローカル空間位置は常に 0,0 です。これは Box2D の制限です。

問題を解決するには、イベントから座標を取得するのではなく、オブジェクト自体 (の 1 つ) から座標を取得してみてください。

于 2013-09-22T08:41:34.817 に答える