Несколько появившихся объектов при столкновении - Corona SDK - PullRequest
1 голос
/ 18 августа 2011

Пожалуйста, помогите!Я пытаюсь породить 5 шаров один за другим с неба и заставить их исчезнуть, как только они упадут на землю или когда они столкнутся с другим контролируемым пользователем объектом, который находится на земле.Хорошо, что я могу успешно порождать шары, как положено, но когда они ударяются о землю (или другой контролируемый пользователем объект на земле), они не исчезают.За последние 2 дня я прошел через тонну примеров кода, но не могу понять, как это сделать.Игра действительно запускается, но терминал отладки выдает сообщение об ошибке: ошибка во время выполнения - попытка проиндексировать глобальное «я».Вот исходный код:

local randomBall = function()
    ball = display.newImage( "hardball.png" )
    ball.x = math.random (30, 450); ball.y = -20
    physics.addBody( ball, { density=2.9, friction=0.5, bounce=0.7, radius=24 } )
    local function whenHit (event)
        if(event.phase == "began") then
            self:removeSelf()       
        end
    end
    ball:addEventListener("collision", whenHit)
end

timer.performWithDelay( 500, randomBall, 5 )

Ответы [ 2 ]

0 голосов
/ 11 февраля 2014

Как правильно создавать объекты: https://coronalabs.com/blog/2011/09/14/how-to-spawn-objects-the-right-way/

0 голосов
/ 19 августа 2011

Сказать, на какой строке была эта ошибка, было бы неплохо, но я вижу, что ваша проблема в функции whenHit ()

Это относится к переменной 'self', только вы никогда не определяете эту переменную. Предположительно, вы хотите, чтобы эта функция действовала как метод 'ball', поэтому объявление функции должно использовать синтаксис двоеточия и выглядеть примерно так: ball: collision (event)


Обратите внимание, что в Corona есть два способа настройки прослушивателей событий. Это объясняется здесь в их документации: http://developer.anscamobile.com/content/events-and-listeners

А затем эта страница в их документации объясняет, как это относится к событиям столкновения: http://developer.anscamobile.com/content/game-edition-collision-detection

Похоже, то, что вы пытаетесь сделать, это прослушиватель таблицы на шаре, в этом случае ваш вызов addEventListener должен быть ball: addEventListener ("collision", ball), а затем функция ball: collision (событие)

Другой метод, который они описывают, - это глобальная функция прослушивателя, которая затем использует event.object1 внутри функции для ссылки на объект, который столкнулся.

...