Corona Sdk-是否有方法调用和分组:insert()另一个lua文件中的对象?
正如标题中所述,我不仅希望从外部Lua文件调用对象,而且还希望Corona Sdk-是否有方法调用和分组:insert()另一个lua文件中的对象?,lua,coronasdk,Lua,Coronasdk,正如标题中所述,我不仅希望从外部Lua文件调用对象,而且还希望group:insert()。这是否可行和/或有效?我只想确保数据不会在整个项目中重复 编辑 以下是我目前的代码: group:insert()函数向我抛出一个错误,指出它需要一个表,并且我可能试图调用一个函数,在这种情况下,我应该使用“:”而不是“.” 这是menu.lua: local storyboard = require( "storyboard" ) local scene = storyboard.newScene()
group:insert()。这是否可行和/或有效?我只想确保数据不会在整个项目中重复
编辑
以下是我目前的代码:
group: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**
这有几个问题,其中似乎没有一个与您的错误相关,但修复它们也会修复错误或使错误的原因更加明显。请修复并更新以下内容:
- 虽然Lua允许,但不要使用循环包含,其中A包含B,其中包括A。而是使用菜单要求菜单功能,然后在菜单功能中调用创建函数:
-- 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
- 在对group的四个调用中,第二个调用是:insert(),前三个引用的对象没有显示在代码中,也没有看到与问题相关的对象,它们应该被删除,或者如果您认为相关,请注释为什么现在显示它们的代码,或者显示它们的代码
是每次调用此代码时都会发生这种情况,还是它在第一次运行时碰巧会崩溃?在您的情况下,代码可以在您第一次进入场景时工作,但在您第二次进入场景时,它可能会崩溃[如果您删除中间的场景]
对文件执行“require”操作时,将执行其内容,并将返回值保存在全局包表中。当您再次需要相同的文件时,返回的值取而代之的是全局包表,代码不会再次执行
因此,如果您在应用程序的某个位置需要此文件,然后调用:removeSelf()并取消菜单栏的引用,则显示对象将被删除,其引用将不再存在,再次调用require将不会重新创建该对象。完全移除场景也将移除显示对象
因此,您想要实现的是非常合理的(与@scholli所说的相反),但是如果您想在运行时删除多个对象,您的“模块”应该允许创建多个对象
我不会纠正您的代码,只是一个简单的示例,说明如何实现这一点:
-- 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)
在你需要的地方给自己准备一份新的菜单。
如果它不是一直显示在屏幕上,最好在需要时创建一个新的,然后从内存中删除它。你在互联网上搜索过它吗?我确实搜索过,但没有任何有用的结果。。我了解了如何在另一个lua文件中保存数据,以及如何从另一个lua文件调用函数,但是尝试这两种方法只会产生错误。因此,我希望有人能告诉我一个好方法,从另一个lua文件中插入一个对象及其属性。那么,也许你应该把你的代码放在这里。请标记错误发生的行以及你收到的准确(副本)错误消息。感谢Krystian深思熟虑的回复!事实上,这就是我为了让它发挥作用而做的事情。很抱歉,我可能应该在这里发布我不久前就发现了这一点,但希望这将有助于其他人在未来。再次感谢!不用担心,只要+1,如果你真的这样做了,就接受答案。这可能会帮助其他人:)不幸的是,我不允许+1你,因为我只有不到15个代表:(对不起,但我一定会回来,当我回来:)