Я пытаюсь найти какое-то столкновение, но я не могу понять, в чем проблема.Corona/Lua и collisions: «попытка конкатенации поля« имя »(значение nil)«
Ошибка я получаю
...\main.lua:178:attempt to concatenate field 'name' (a nil value)
Что у меня есть это: у меня есть коробка («корабль»), который остается при фиксированном X координат, но движется вверх и вниз. Он предназначен для прохождения «туннеля», состоящего из двух прямоугольников с промежутком между ними, и я пытаюсь обнаружить столкновение между судном и стенами туннеля (т. Е. Прямоугольники).
Эта ошибка возникает при столкновении. Многие из моих кодов - это просто измененные версии официальной документации Corona, и я просто не могу понять, в чем проблема.
Вот соответствующие фрагменты кода:
function playGame()
-- Display the ship
ship = display.newRect(ship);
shipLayer:insert(ship);
-- Add physics to ship
physics.addBody(ship, {density = 3, bounce = 0.3});
...
beginRun();
end
function beginRun()
...
spawnTunnel(1100); -- this just calls the createTunnel function at a specific location
gameListeners("add");
...
end
function gameListeners(event)
if event == "add" then
ship.collision = onCollision;
ship:addEventListener("collision", ship);
-- repeat above two lines for top
-- and again for bottom
end
end
-- Collision handler
function onCollision(self,event)
if (event.phase == "began") then
-- line 178 is right below this line ----------------------------------
print(self.name .. ": collision began with " .. event.other.name)
end
-- Create a "tunnel" using 2 rectangles
function createTunnel(center, xLoc)
-- Create top and bottom rectangles, both named "box"
top = display.newRect(stuff);
top.name = "wall";
bottom = display.newRect(stuff);
bottom.name = "wall";
-- Add them to the middleLayer group
middleLayer:insert(top);
middleLayer:insert(bottom);
-- Add physics to the rectangles
physics.addBody(top, "static", {bounce = 0.3});
physics.addBody(bottom, "static", {bounce = 0.3});
end
я только получаю сообщение об ошибке, как только два объекта приходится сталкиваться, так что кажется, что столкновение происходит, и он был определен. Но по какой-то причине self.name и event.other.name ноль.
Я думал, что свойство .name, которое я добавил, было обычным? Насколько мне известно, любое свойство может быть добавлено в таблицу lua, и это было одним из них. Так что имя не имеет значения. Тем не менее, я изменил его, чтобы быть уверенным. Ошибка осталась прежней (кроме имени name -> myName). Кроме того, обработчик столкновений называется только AFTER createTunnel. Я отредактировал свое оригинальное сообщение, потому что оставил это. Я все еще получаю ошибку. Я даже попытался переместить функцию createTunnel над функцией onCollision безрезультатно. – Gakor