在Corona SDK中,如何将本地变量转换为全局变量?

时间:2014-09-20 22:58:48

标签: android ios lua global-variables corona

我想将local line转换为全局变量,以便稍后可以引用它。到目前为止,这是我的代码:

local physics = require "physics"
physics.start()

local line
lineGroup = display.newGroup()
local prevX,prevY
local isDrawing = false
local i = 0

local function distanceBetween(x1, y1, x2, y2)
local dist_x = x2 - x1
local dist_y = y2 - y1
local distanceBetween = math.sqrt((dist_x*dist_x) + (dist_y*dist_y))
return distanceBetween
end

local function drawLine(e)
  if(e.phase == "began") then
    if(line) then
        lineGroup:remove(1)
        line = nil
    end
    prevX = e.x
    prevY = e.y
    isDrawing = true
  elseif(e.phase == "moved") then
    local distance = distanceBetween(prevX, prevY, e.x, e.y)
    if(isDrawing and distance < 100) then
        if(line) then lineGroup:remove(1) end
        line = display.newLine(prevX, prevY, e.x, e.y)
        line:setStrokeColor( 0.5,0,1 )
        line.strokeWidth = 5

        local dist_x = e.x - prevX
        local dist_y = e.y - prevY
        physics.addBody(line, "static", { density = 1,
                                          friction = 0.5,
                                          bounce = 2,
                                          shape = {0,     0, dist_x, dist_y, 0, 0} } )
        lineGroup:insert(line)
    end
  elseif(e.phase == "ended") then
    isDrawing = false
  end
end

Runtime:addEventListener("touch",drawLine)

每当我尝试在下一个函数中引用line时,都会收到一条错误消息:

  

尝试索引全局&#39;行&#39;(零值):

function onCollision(e)
  audio.play(bounceSnd)
  score.text = tostring(tonumber(score.text) + 1)
  score.x = 300
end

gameListeners('add')
end

function gameListeners(action)
  if(action == 'add') then        
    line:addEventListener( 'collision', onCollision )
  else
     line:addEventListener( 'collision', onCollision)
  end
end

如果有人能提供帮助,我将非常感激。

2 个答案:

答案 0 :(得分:0)

您可以在创建行时添加eventlistener,而不是从分离的函数添加。 如果你需要额外的控制来确定线路何时响应碰撞,那么你可以通过物理体的一些标志来做到这一点。 (我从未使用物理模块)

答案 1 :(得分:0)

看起来你在任何地方都没有mydata.lua文件。我知道在示例中他们使用了很多引用,但如果你想使用它,你必须实际创建一个mydata.lua文件。这是一种他们用来拥有可以在不同文件中引用的全局对象的技术。例如:

mydata.lua

local M = {}
M.someVariable = WhateverYouWant

return M

然后在任何你想要访问mydata的文件中:

local mydata = require("mydata")

然后你可以在那个文件中使用它。