Corona Sdk-是否有方法调用和分组:insert()另一个lua文件中的对象?

Corona Sdk-是否有方法调用和分组:insert()另一个lua文件中的对象?,lua,coronasdk,Lua,Coronasdk,正如标题中所述,我不仅希望从外部Lua文件调用对象,而且还希望group:insert()。这是否可行和/或有效?我只想确保数据不会在整个项目中重复 编辑 以下是我目前的代码: group:insert()函数向我抛出一个错误,指出它需要一个表,并且我可能试图调用一个函数,在这种情况下,我应该使用“:”而不是“.” 这是menu.lua: local storyboard = require( "storyboard" ) local scene = storyboard.newScene()

正如标题中所述,我不仅希望从外部Lua文件调用对象,而且还希望
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个代表:(对不起,但我一定会回来,当我回来:)