我想将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
如果有人能提供帮助,我将非常感激。
答案 0 :(得分:0)
您可以在创建行时添加eventlistener,而不是从分离的函数添加。 如果你需要额外的控制来确定线路何时响应碰撞,那么你可以通过物理体的一些标志来做到这一点。 (我从未使用物理模块)
答案 1 :(得分:0)
看起来你在任何地方都没有mydata.lua文件。我知道在示例中他们使用了很多引用,但如果你想使用它,你必须实际创建一个mydata.lua文件。这是一种他们用来拥有可以在不同文件中引用的全局对象的技术。例如:
local M = {}
M.someVariable = WhateverYouWant
return M
然后在任何你想要访问mydata的文件中:
local mydata = require("mydata")
然后你可以在那个文件中使用它。