簡體   English   中英

嘗試索引全局“頭”(零值)love2d

[英]Attempt to index global 'head' (a nil value) love2d

我正在通過一個簡單的蛇游戲來試驗lua,但是我一直遇到這個錯誤,但我一直堅持。

碼:

function love.load()

    width, height = love.window.getDimensions()
    start= {x= width/2, y = height/2}

    snake = {}
    snake.dir = 0
    snake.speed = 300
    snake.body  = {}


    for i = 0, 5, 1 do
        table.insert(snake.body,{x=start.x,y=start.y + i })
    end

end

function love.keypressed(key)

    if key == "left" and snake.dir ~= 1 then 
        snake.dir = 0
    end
    if key == "right" and snake.dir ~= 0 then
        snake.dir = 1
    end 
    if key == "up" and snake.dir ~= 3 then
        snake.dir = 2
    end
    if key == "down" and snake.dir ~= 2 then
        snake.dir = 3
    end

end 

function love.update(dt)

    head = snake.body[0]

    if snake.dir == 0 then
        head = {head.x - snake.speed*dt, head.y}
    end

    if snake.dir == 1 then
        head = {head.x + snake.speed*dt, head.y}
    end

    if snake.dir == 2 then
        head = {head.x, head.y - snake.speed*dt}
    end

    if snake.dir == 3 then
        head = {head.x, head.y + snake.speed*dt}
    end 

    table.insert(snake.body,0,head)
    table.remove(snake.body,#snake.body)

end

function love.draw()


end

錯誤發生在功能更新中。

另外,我將如何遍歷蛇的每個部分? 就像lua中的foreach等效嗎? 謝謝你的幫助

Lua中的表(數組)是1索引而不是0索引。 因此,數組中的第一項應為1而不是0。

定義蛇體時,請從1而不是0開始:

for i = 1, 5 do
    table.insert(snake.body,{x=start.x,y=start.y + i })
end

然后在您的更新處理程序中:

head = snake.body[1]

要遍歷數組,您可以將ipairs用於數字索引,或將對用於命名鍵: http ://lua-users.org/wiki/ForTutorial

例如,假設snake.body是一個數字引用列表,則可以執行以下操作:

for key, value in ipairs(snake.body) do
   ...
end

要迭代snake所有內容,您可以執行以下操作:

for key, value in pairs(snake) do
   ...
end

此外,對於您keypressed處理程序,使用查找表會更干凈嗎?

local keyToDir = { left = 0, right = 1, up = 2, down = 3 }

function love.keypressed(key)
   local dir = keyToDir[key];
   if dir then snake.dir = dir end;
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM