Сделайте два объекта осязаемыми, которые были созданы с помощью функции (LUA, Corona)

Я считаю, что это настоящий вопрос новичков,

но у меня есть следующий код:

local function createCircle()
[...]
circle = display.newCircle( positionX, positionY, circleRadius )
[...]
end

function circle:touch( event )
   if event.phase == "ended" then
      scaleCircle(self,scaleUp)
   end
   return true;
end
circle:addEventListener("touch", circle)

Я немного почистил его, чтобы сосредоточиться на важных вещах.

Моя проблема прямо сейчас: я могу коснуться одного круга и масштабировать его. Но это работает только для одного из кругов (я хочу создать как 3 или 4 из них). И я думаю, это работает только для последнего созданного круга.

Я предполагаю, что главная проблема заключается в том, что все круги, созданные мной с помощью createCircle (), называются «круг». Таким образом, evenListener работает только для созданного мной круга.

Любые идеи, как я могу выбрать другие круги, которые я создал?

Спасибо :)

3
nl ja de

2 ответы

Вот как я это решил:

local function createCircle()
  --[[ MORE CODE ]]--
   table.insert(circleTable, display.newCircle( positionX, positionY, circleRadius ) )
   --[[ MORE CODE ]]--
end

function onObjectTouch(event)
   local self = event.target
   if event.phase == "ended" then
        --[[ MORE CODE ]]--
   end
   return true;
end

local function addTouchListeners()
   for _, circle in ipairs(circleTable) do
      circle:addEventListener("touch", onObjectTouch)
   end
end

createCircle()
addTouchListeners()

Я думаю, что Dream Eaters решение должно работать. Но у меня была другая ошибка при вызове моей функции createCircle (). Я решил это с созданием функции для TouchListeners и называть ее ПОСЛЕ функции createCircle ().

Надеюсь, это поможет другим людям с аналогичными проблемами.

1
добавлено

Вы используете ДОЛЖЕН использовать таблицы. Например:

circles = {}
local function createCircle()
  --[[ MORE CODE ]]--
  table.insert( circles, display.newCircle( positionX, positionY, circleRadius ) )
  --[[ MORE CODE ]]--
end
function circle:touch( event )
   if event.phase == "ended" then
      scaleCircle(self,scaleUp)
   end
   return true;
end
for _, circle in ipairs( circles ) do
  circle:addEventListener("touch", circle)
end
1
добавлено
Спасибо за Ваш ответ. Я попробую это.
добавлено автор lornz, источник
Я прочитал несколько руководств о таблицах. Ваше решение похоже на путь, но у меня все еще есть проблема: «function circle: touch (event)» дает мне ошибку, потому что «круг» на самом деле не определен. Как я могу обойти это? Я кодирую эту проблему сейчас в течение нескольких часов: /
добавлено автор lornz, источник
для правильной: «попытка индексирования глобального« круга »(значение nil)» - это сообщение об ошибке, которое я получаю.
добавлено автор lornz, источник
а также??? ........
добавлено автор hjpotter92, источник
pro.lua
pro.lua
411 участник(ов)

Правила: Тут можно обсуждать все, что связанно с луа-движки, интерпретаторы/компиляторы, питухан-биндинги, скрипты на сталкер и пр. Запрещена реклама! Срачи и оффтоп не желательны. За нарушение - бан github.com/rjpcomputing/luaforwindows Участник @ProDOT