Module 从外部模块调用函数的事件侦听器

Module 从外部模块调用函数的事件侦听器,module,coronasdk,addeventlistener,Module,Coronasdk,Addeventlistener,正如标题所述,我有一个事件监听器,它从我的rocket类调用一个函数 但我在调用上述函数时收到一个错误,代码如下 火箭类 module(..., package.seeall) function rocket() local rocket = {} local rocket_mt = { __index = rocket } -- metatable local sprite local rockettop, rocketbottom, speedX, speedY function

正如标题所述,我有一个事件监听器,它从我的rocket类调用一个函数

但我在调用上述函数时收到一个错误,代码如下

火箭类

module(..., package.seeall)

function rocket()

local rocket = {}
local rocket_mt = { __index = rocket }  -- metatable
local sprite
local rockettop, rocketbottom, speedX, speedY


function rocket.new()   -- constructor

local newRocket = {
sprite = "red-rocket.png"

}
return setmetatable( newRocket, rocket_mt )
end 

function rocket:draw(x,y,group)

local spritesheetdata = {
width = 30,
height = 55,
numFrames = 7,
sheetContentWidth = 210,
sheetContentHeight = 55,
}


local spritesheet = graphics.newImageSheet( "red_rocket.png", spritesheetdata )



local spritesequencedata = {

 { name = "idle", frames = {1}, 
   } ,

 { name = "afterburn",
   start = 2,
   count = 2,
   time = 500,
   loopCount = 0, -- optional default 0(infinite)
   loopDirection = "forward" -- optional (default)
   } ,
   {  name = "explode",
   start = 4,
   count = 4,
   time = 1200,
   loopCount = 1
     }
 }

   sprite = display.newSprite( spritesheet, spritesequencedata)
   rockettop = {-14.5, 5, 0, -25,14.5,5}
   rocketbottom = {-14.5,7,-14.5,6,14.5,6,14.5,7}


   physics.addBody(sprite, {shape = rockettop},{bounce = 0.5,friction = 0.6, shape =  rocketbottom} )
   sprite.angularDamping = 2
   sprite.x = x
   sprite.y = y
   sprite:setSequence("idle")
   sprite:play()
   group:insert (sprite)

   end

function rocket:thrust(event)

speedX = 0.0025 * (math.sin(sprite.rotation*(math.pi/180)))
speedY = -0.0025 * (math.cos(sprite.rotation*(math.pi/180)))
if(event.phase =="began") then

  sprite:applyLinearImpulse(speedX, speedY, sprite.x, sprite.y)

  return true
  end
  sprite:setSequence("afterburn")
  sprite:play()

end

   return rocket


 end
和控制

module(..., package.seeall)
rocket = require("rocketclass")



local controlthrust = display.newImage("thrust control.png")
controlthrust.y = display.contentWidth/1.6   
controlthrust.x = display.contentWidth/1.1


local controlleft = display.newImage("direction controls.png")
controlleft.y = display.contentWidth/1.6

local controlright = display.newImage("direction controls.png")
controlright.y = display.contentWidth/1.6
controlright.x = display.contentWidth/6
controlright.rotation = 180



controlthrust:addEventListener("touch",rocket:thrust)
从控制台接收到的错误是:

控件。lua:21:尝试调用方法“推力” 堆栈回溯: C:函数中的“错误” ?:在函数“gotoScene”中
…nts\corona projects\rocket lander-classes\menu.lu

我看不出您在哪里调用rocket.new()。我认为你需要做这样的事情:

 rocketclass = require("rocketclass")

 rocket = rocketclass.new()

在设置触摸处理程序之前。

感谢您的回复,我在level1.lua(未显示)中完成了此操作。不过,我已通过重新创建rocket类并删除不推荐的方法模块(…,package.seeall)修复了此问题。如果您愿意,我现在可以完全控制我的rocket,并且所有三个lua文件都在交互,请告诉我