2015-09-25 1 views
1

Я изучаю Corona, и я пытаюсь использовать событие столкновения. Целью следующей программы является то, что скала движется к машине, используя переход. И распечатайте строку, чтобы сообщить о столкновении, где она встречается.corona + collision не работает

Однако, это не работает. Более того, я даже не могу получить сообщение «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

Рабочий код с локальным и глобальным (Runtime) слушателя:

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).

Некоторые типы корпусов будут - или не будут - сталкиваться с другими типами кузова. В столкновение между двумя физическими объектами, по крайней мере один из объектов должен быть динамическим, так как это единственный тип тела, который сталкивается с любым другим типом. См. Руководство по физическим телам для получения подробной информации о телах .

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

Вот некоторая информация о композиторе API, и вы, что вы, вероятно, следует использовать scene:show: https://coronalabs.com/blog/2014/01/21/introducing-the-composer-api-plus-tutorial/