2015-09-25 78 views
1

我正在學習電暈,我正在嘗試使用碰撞事件。 以下程序的目標是搖滾正在使用transition.to轉向汽車。並打印一行以報告碰撞發生的位置。電暈+碰撞不起作用

但是,它不起作用。而且,我甚至不能收到「enterenter」的消息,程序甚至無法進入輸入函數的原因是什麼?

我的代碼如下。先謝謝你。

local composer = require("composer") 
local scene = composer.newScene() 


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

local function onLocalCollision(self, event) 

if (event.phase == "began") then 
    print(self.myName .. ": collision began with " .. event.other.myName) 

elseif (event.phase == "ended") then 
    print(self.myName .. ": collision ended with " .. event.other.myName) 
end 
end 


local widget = require "widget" 

function scene:create(event) 
print("entercreate") 
local sceneGroup = self.view 

local backgrd = display.newImage("background2.png",0,260) 
backgrd:scale(3,3) 
local car = display.newImage("car2.png",80,270) 
physics.addBody(car,"static") 
car.myName="Car" 

local rock = display.newImage("rock.jpg",520,280) 
rock:scale(0.05,0.05) 
physics.addBody(rock,"static") 
rock.myName="rock" 


sceneGroup:insert(backgrd) 
sceneGroup:insert(car) 
sceneGroup:insert(rock) 
transition.to(backgrd,{time=24000, x=-1800,onComplete=endScroll}) 
transition.to(rock,{time=4000, delay=2500,x=-40}) 
end 

function scene:enter(event) 
print("enterenter") 
physics.start() 
local sceneGroup = self.view 
Runtime:addEventListener("collision", onLocalCollision) 
end 



scene:addEventListener("create", scene) 
scene:addEventListener("enter", scene) 


return scene 

回答

0

工作代碼與本地和全球(運行)聽衆:

local widget = require "widget" 
local composer = require("composer") 
local scene = composer.newScene() 

local physics = require "physics" 
physics.start() 
physics.setGravity(0,0) 

local function onGlobalCollision(event) 
     local target = event.object1 
     local other = event.object2 

     if (event.phase == "began") then 
      print("GLOBAL: " .. target.name .. ": collision began with " .. other.name) 
     elseif (event.phase == "ended") then 
      print("GLOBAL: " .. target.name .. ": collision ended with " .. other.name)  
     end 
    end 

local function onLocalCollision(event) 
    local target = event.target 
    local other = event.other 

    if (event.phase == "began") then 
     print("LOCAL: " .. other.name .. ": collision began with " .. target.name) 
    elseif (event.phase == "ended") then 
     print("LOCAL: " .. other.name .. ": collision ended with " .. target.name)  
    end 
end 

function scene:create(event) 
    print("scene:create") 


    local sceneGroup = self.view 

    local car = display.newRect(100, 100, 100, 100) 
    car.name = "car" 
    physics.addBody(car) 

    local rock = display.newRect(250, 250, 100, 100) 
    rock.name = "rock" 
    rock:setFillColor(0.5, 0.5, 0.5) 
    physics.addBody(rock) 
    rock:addEventListener("collision", onLocalCollision) 

    sceneGroup:insert(car) 
    sceneGroup:insert(rock) 

    transition.to(rock,{time=4000, x = -40, y = -100}) 

    Runtime:addEventListener("collision", onGlobalCollision) 
end 

function scene:enter(event) 
    print("scene:enter")  
    local sceneGroup = self.view 

end 

scene:addEventListener("create", scene) 
scene:addEventListener("enter", scene) 


return scene 

,你有你的代碼的問題是這兩個機構是靜態的和兩個靜態物體之間不會發生衝突彼此,並沒有什麼在作曲家稱爲scene:enter(所以這就是爲什麼它不被稱爲,因此不是onLocalListener)。

有些身體類型會 - 或不會 - 與其他身體類型相撞。在 兩個物理對象之間的碰撞中,至少一個對象 必須是動態的,因爲這是與任何其他類型碰撞的唯一身體類型。有關主體 類型的詳細信息,請參閱Physics Bodies指南。

https://docs.coronalabs.com/daily/guide/physics/collisionDetection/index.html

這裏是關於作曲家API的一些信息,你會,你應該使用scene:showhttps://coronalabs.com/blog/2014/01/21/introducing-the-composer-api-plus-tutorial/