如标题中所述,我不仅要从外部Lua文件中调用一个对象,而且我还希望group:insert()
将此对象放入我的菜单页面,其中包含外部lua中的属性文件。这可能和/或有效吗?我真的很想确保在我的项目中不重复数据。
修改的
到目前为止,这是我的代码: 组:insert()函数给我一个错误,指出它正在期待一个表,我可能一直试图调用一个函数,在这种情况下我应该使用“:”而不是“。”
这是menu.lua:
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local widget = require "widget"
local m = require ("myData")
local menuFunction = require("menuFunction")
local menuSwipe
-- =======================
-- menuSwipe()
-- =======================
menuSwipe = function(self, event)
local phase = event.phase
local touchID = event.id
if(phase == "began") then
elseif(phase == "moved") then
elseif(phase == "ended" or phase == "cancelled") then
if(m.menuActivator > 0) then
menuDown(m.invisiBar, event)
else
--m.layerInfo = layers
transition.to( menuFunction.menuBar, { x = menuFunction.menuBar.x, y = 0, time = 200 } )
--transition.to( layers, { x = menuFunction.menuBar.x, y = h, time = 100 } )
m.invisiBar = display.newRect( 0,0,w,25,6)
m.invisiBar.alpha = 0
m.menuActivator = 1
end
end
end
-- ++++++++++++++++++++++
-- menuDown()
-- ++++++++++++++++++++++
function menuDown(self, event)
local phase = event.phase
local touchID = event.id
if(phase == "began") then
elseif(phase == "moved") then
elseif(phase == "ended" or phase == "cancelled") then
if(m.menuActivator == 1) then
transition.to( menuFunction.menuBar, { x = m.menuInfo.x, y = h*.964, time = 200 } )
--transition.to( group, { x = 0, y = 0, time = 10 } )
m.menuActivator = 0
end
end
end
function scene:createScene( event )
local group = self.view
group:insert( menuFunction.menuBar ) -- *** ERROR occurs here
end
function scene:enterScene( event )
local group = self.view
end
function scene:exitScene( event )
local group = self.view
end
function scene:destroyScene( event )
local group = self.view
end
scene:addEventListener( "createScene", scene )
scene:addEventListener( "enterScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )
return scene
这是menuFunction.lua:
local m = require("myData")
local menu = require ("menu")
local w = display.contentWidth
local h = display.contentHeight
local menuFunction = {}
--menuBar
menuFunction.menuBar = display.newImage( "images/menuBar1.png")
menuFunction.menuBar.x = w*(1/2)
menuFunction.menuBar.y = h*1.465
menuFunction.menuBar.height = h
menuFunction.menuBar:setReferencePoint(display.TopLeftReferencePoint)
menuFunction.menuBar.touch = menu.menuSwipe
menuFunction.menuBar:addEventListener("touch", menuFunction.menuBar)
return menuFunction
这是确切的错误消息:
ERROR: table expected. If this is a function call, you might have used '.' instead of ':'
message**
答案 0 :(得分:1)
这有几个问题,它们似乎都与您的错误无关,但修复它们也会修复错误或使错误原因更明显。请修正以下内容并更新:
虽然Lua允许,但不要使用循环包含,其中A包含B,其中包含A.而不是菜单需要menuFunction,然后在menuFuntion中调用创建函数:
-- menuFunction.lua
local m = require("myData")
-- require("menu") -- BAD! :)
local w = display.contentWidth
local h = display.contentHeight
local menuBar = display.newImage( "images/menuBar1.png")
menuBar.x = w*(1/2)
menuBar.y = h*1.465
menuBar.height = h
menuBar:setReferencePoint(display.TopLeftReferencePoint)
local menuFunction = { menuBar = menuBar }
function createMenuBar(menuSwipe)
menuFunction.menuBar.touch = menuSwipe
menuFunction.menuBar:addEventListener("touch", menuFunction.menuBar)
return menuFunction
end
-- menu.lua
function createScene(event)
local mf = require('menuFunction')
mfFunction = mf.createMenuBar(menuSwipe)
group:insert(menuFunction.menuBar)
end
其次,在对组的四次调用中:insert()前三个引用代码中未显示的对象,看不到与问题相关的内容,应删除它们或者如果您认为相关,评论为什么他们的代码现在显示,或显示他们的代码。
答案 1 :(得分:1)
每次调用此代码时是否会发生这种情况,或者是第一次出现任何机会然后崩溃?在您的情况下,代码可以在您第一次进入场景时工作,但第二次执行时,它可能会崩溃[如果您删除其间的场景]。
当你做“要求”时一个文件,其内容被执行,返回值保存在全局包表中。当您再次需要相同的文件时,返回的值将取自全局包表,而代码不会再次执行。
因此,如果您有任何机会在应用程序的某个位置需要此文件,然后调用:removeSelf()并且没有menuBar的引用,则将删除显示对象并且其引用将不再存在,并且调用再次要求,不会重新创建对象。完全删除场景也将删除显示对象。
所以你想要实现的是非常明智的[与@Schollii所说的相反],但你的"模块"如果你想在运行时删除它们,应该允许创建多个对象。
我不会更正你的代码,只是一个如何实现这个目标的简单例子:
-- menu.lua
local menuCreator = {}
menuCreator.newMenu = function(params)
local menu = display.newGroup()
-- create your menu here
return menu
end
return menuCreator
现在随时都可以:
local menuCreator = require("menu.lua")
您可以致电:
local menu = menuCreator.newMenu(someParams)
在任何需要的地方为自己准备一个漂亮的新菜单。 如果它没有一直显示在屏幕上,那么最好在需要时创建一个新的,然后将其从内存中删除。