В Corona есть 2 различных типа прослушивателей событий, прослушиватели функций и прослушиватели таблиц . Упоминаемая вами локальная функция работает, потому что эта функция вызывается непосредственно при срабатывании события. Corona не поддерживает передачу табличных функций, поэтому передача в этом случае не будет работать.
Чтобы это работало, вам нужно использовать прослушиватель таблиц следующим образом:
function foo:touch(event)
self.x = event.x
self.y = event.y
end
foo:addEventListener("touch", foo)
Это работает, потому что слушатель события будет пытаться вызвать функцию в таблице foo с тем же именем, что и у события - в этом примере "touch".
Если вам нужно сохранить имя функции в виде перетаскивания, вы можете обойти это ограничение, добавив его после определения функции:
player.touch = player.drag
Это в основном перенаправляет сенсорный вызов на функцию перетаскивания.