简体   繁体   English

尝试索引字段“父”(nil值)

[英]Attempt to index field 'parent' (a nil value)

I'm having some troubles when I try to reload a scene. 尝试重新加载场景时遇到了一些麻烦。

In my program, users are able to draw a line with their finger (it's an iOS/Android app), and it works pretty good, but, when I try to reload the scene, the console returns 在我的程序中,用户可以用手指画一条线(这是一个iOS / Android应用程序),效果很好,但是当我尝试重新加载场景时,控制台会返回

"Attempt to index field 'parent' (a nil value)" “尝试索引字段“父级”(nil值)”

at line 39 在第39行

The code I've used to perform the "drawline" and the reload (replay in this case) features is 我用来执行“画线”和重新加载(在此情况下为重播)功能的代码是

local lines = {}
local lineGroup = display.newGroup()
local prevX,prevY
local isDrawing = true
local i = 1


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

    for i = #lines, 1, -1 do
  if (lines[i]) then
   lines[i].parent:remove(lines[i])
   lines[i] = nil
  end
end
lines = {}
line_number = 100


    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(lines[i]) then lineGroup:remove(i) end
        lines[i] = display.newLine(prevX, prevY, e.x, e.y)
        lines[i]:setColor(255, 255, 0)
        lines[i].width = 3
        lines[i].myName = "lines"


if(lines[i].y < 400) then
for i = #lines, 1, -1 do
  if (lines[i]) then
   lines[i].parent:remove(lines[i])
   lines[i] = nil
  end
end
end

        local dist_x = e.x - prevX
        local dist_y = e.y - prevY
        physics.addBody(lines[i], "static", 
        { density = 1, friction = 0.5, 
     bounce =  -0.8, shape = {0, 0, dist_x, dist_y,        0, 0} } )
        lineGroup:insert(lines[i])
    end


elseif(e.phase == "ended") then
    isDrawing = true
end

return lineGroup
end


Runtime:addEventListener("touch",drawLine)

where line 39 is lines[i].parent:remove(lines[i]) 其中第39行是lines[i].parent:remove(lines[i])

Any suggestions? 有什么建议么? Thanks! 谢谢! :) :)

** * HERE'S HOW I RESTART MY GAME * ** * ** * ** * ** ** * 这里是我如何重新开始我的游戏 * ** * ** * ** * **

--REPLAY

 local replayBTN = display.newImage("immagini/pause.png")

 replayBTN.alpha = 1
 replayBTN.x = _W/2 
 replayBTN.y = _H/2 

 localGroup:insert( replayBTN)

 function replay(event)
director:changeScene("game")
 return true
 end

 replayBTN:addEventListener("touch", replay)

If you want, you can just do an additional check: 如果需要,您可以进行其他检查:

  if (lines[i]) then
      if (lines[i].parent) then
         lines[i].parent:remove(lines[i])
      end
      lines[i] = nil
  end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM