2014-12-11 3 views
0

У меня возникла проблема с обнаружением всех объектов в таблице для конкретного столкновения. Я могу только увеличить счет, когда первый объект в таблице попал в снежок. Вот код, который я использую для создания и столкновения объекта. У меня есть вызов функции для createSnowBall() после нажатия кнопки. Эта часть отлично работает.Обнаружение столкновений с помощью lua с использованием Corona

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

local snowBalls = {} 
local ornaments = {} 
local score = 0 

local scoreText = display.newText("Score: " .. score, 70, 25, native.systemBoldFont, 32) 

function createSnowBall() 
    snowBall = display.newImageRect("snowball.png", 20, 20) 
    snowBall.x = gun.x 
    snowBall.y = HEIGHT - 110 
    physics.addBody(snowBall, { density = 1.0, friction = 1, bounce = 0, radius = 20 }) 
    snowBall.isSnowBall = true 
    snowBalls[#snowBalls+1] = snowBall 
    moveSnowBall(snowBall) 
    return snowBall 
end 

function createOrnament(num) 
     if num == 1 then 
      ornament = display.newImageRect("blueO.png", 30, 40) 
     elseif num == 2 then 
      ornament = display.newImageRect("redO.png", 30, 40) 
     elseif num == 3 then 
      ornament = display.newImageRect("greenO.png", 30, 40) 
     end 
    ornament.isOrnament = true 
    ornaments[#ornaments+1] = ornament 
    ornament.x = math.random(50, 270) 
    ornament.y = 3 
    local radius = 15 
    physics.addBody(ornament, { density = 1.0, friction = 1, bounce = 1, radius = radius }) 
    ornament:applyForce(35, 70, ornament.x + 4, ornament.y + 4) 
    return ornament 
end 
createOrnament(math.random(1, 3)) 

function snowBallCollision(event) 
    if event.phase == "began" then 
     local target = event.other 
      if target.isSnowBall then 
       score = score + 5 
       scoreText.text = "Score: " .. score 
      end 
    end 
end 

ornament:addEventListener("collision", snowBallCollision) 
+0

Я попытался с помощью, функция орнамент: snowBallCollision (событие) с Snowball: addEventListener ("столкновение", орнамент), но проблема, которую я имею там, заключается в том, что snowBall создается при нажатии кнопки и, следовательно, ноль заранее. – jeppy7

ответ

1

Эта проблема возникает из-за линии:

ornament:addEventListener("collision", snowBallCollision) 

Здесь вы только добавление слушателя к объектам только один раз, и что получат назначенные объектам, которые ранее выработанных и еще не уничтожены ,

Так, просто удалите эту строку из кода, и всякий раз, когда вы вызываете строку:

createOrnament(math.random(1, 3)) 

Замените его:

local myOrnament = createOrnament(math.random(1, 3)) -- Since 'createOrnament' returns the object 
myOrnament:addEventListener("collision", snowBallCollision) -- assign listener to the newly created object 

Это присвоит слушатель всего свой «myOrnament ' объекты.

Keep Coding ............. :)

+0

Да, я понял это примерно в 2 часа ночи. Я включил слушателя в функцию createOrnament. Просто простая логика, когда все остальные поля таблицы орнаментов работают внутри функции. Теперь мой счет обновляется, когда у любого из объектов есть столкновение. Наверное, я просто использовал для размещения слушателей в нижней части всего моего кода. Ты роняешь Кришну! – jeppy7

Смежные вопросы