Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 错误:尝试索引全局“playerBul”(一个nil值)_Lua - Fatal编程技术网

Lua 错误:尝试索引全局“playerBul”(一个nil值)

Lua 错误:尝试索引全局“playerBul”(一个nil值),lua,Lua,错误是: 游戏。lua:171:尝试将全局“playerBul”索引为零值 对不起,如果我放了太多不必要的代码,我只是不知道是什么导致了这个错误 以下是此游戏的所有文件: menu.lua: 梅因·卢阿 游戏,卢阿 您尚未在game.lua中返回的游戏表上定义加载函数。看起来您已经编写了加载逻辑,但它是作为名为loadGame的本地函数编写的。要解决问题,请更新game.lua以导出加载函数,并让它调用您已经创建的加载函数,如下所示: function game.load() loadG

错误是:

游戏。lua:171:尝试将全局“playerBul”索引为零值

对不起,如果我放了太多不必要的代码,我只是不知道是什么导致了这个错误

以下是此游戏的所有文件:

menu.lua:

梅因·卢阿

游戏,卢阿

您尚未在game.lua中返回的游戏表上定义加载函数。看起来您已经编写了加载逻辑,但它是作为名为loadGame的本地函数编写的。要解决问题,请更新game.lua以导出加载函数,并让它调用您已经创建的加载函数,如下所示:

function game.load()
    loadGame()
end
在您返回game.lua中的游戏表之前的某个地方,在您定义game.keypress之后说


或者您也可以将本地函数loadGame更改为function game.load要删除本地函数并将其重新定义为导出的功能

请查找相关标题游戏表没有load函数。你希望mode.load做什么?RequireName的返回值是从游戏模块返回的游戏表。它没有加载函数。菜单有加载功能,这远远不是最小的,我也尝试过将它改为函数game.load,它返回:menu.lua:9:尝试调用字段'load'为nilvalue@Saksham更新原始帖子中的menua.lua和game.lua文件,使其成为您当前拥有的内容,我会查看您拥有的内容now@Saksham不需要编辑menu.lua,您只需要更新game.lua以包含加载函数。game.lua现在看起来是正确的,你确定没有超过一个game.lua文件吗?嗨,迈克,我只有一个game.lua文件,整个项目就是你上面看到的所有文件。我仍在获取菜单。lua:9:尝试调用字段'load'出现零值错误,尽管我将函数更改为game.load。看起来问题在于,在函数game.load中,您设置了playerBul.image,但从未将变量playerBul声明为table或userdata对象。
TITLE = 'Die Aliens Die!'
PLAYER_BULLET = 'Images/playerbullet.png'
ENEMY_BULLET = 'Images/enemybullet.png'
HEALTH_IMG = 'Images/life.png'
ENEMY_UFO = { 

ENEMY_1 = 'Images/enemy1.png',
ENEMY_2 = 'Images/enemy2.png',
ENEMY_3 = 'Images/enemy3.png'
}
PLAYER_IMG = 'Images/spaceship.png'
YOU_WIN = 'Images/win.png'
BANNER = 'Images/banner.png' 
POINTER = 'Images/pointer.png'

function love.load() 
love.window.setTitle(TITLE)
mode = require "menu"
mode.load() 
end 

function love.draw()
mode.draw()
end 

function love.keypressed(key, isrepeat) 
mode.keypressed(key)
end 

function love.update(dt)
mode.update(dt) 
end 
local game = {}
local playerShip = {}
local alienUFO = {}
local bullets = {}
local alienBullets = {}
local playerBullets = {}
local aliens = {{},{},{},{},{},{},{},{},{},{}}
local health = 3 
local score = 0 
local level = 1 
local alienMovement = true 
local healthImage;
local alienQty = 0 
local pause 

--local function gameOver()

--local function gamwWin()

local function clearTable(t)
for i = #t,1,-1 do 
    table.remove(t,i)
end
end

local function clearAliens()
for i=#aliens,1,-1 do 
    for j = #aliens[i],1,-1 do 
        table.remove(aliens[i],j)
    end
end
end

local function insertAliens()
alienQty = 0 
for i=1,4 do 
    for j =1,10 do 
        local alien = {}
        alien.x = (j-1) *alienUFO.width + 10 
        alien.y = (j-1) *alienUFO.width + 35 
        if level ==2 then 
            alien.life = 2 
        if level == 3 then 
            alien.life = 3 
        end
        table.insert(aliens[j], alien)
        alienQty = alienQty + 1 
    end
end
end
end 

local function initGame()
clearTable(playerBullets)
clearTable(alienBullets)
clearAliens()
insertAliens()
playerShip.x = love.graphics.getWidth() / 2 - playerShip.width /2 
end 

local function playerShoot()
local bullet = {}
playerShip.x = playerShip.x + 32
playerShip.y = playerShip.y + 10 
table.insert(playerBullets, bullet)
end

local function AlienShoot(x,y)
local bullet = {}
bullet.x = alienUFO.width/2 
bullet.y = y -5 
table.insert(alienBullets, bullet)
end 

local function playerShots(dt)
if next(playerBullets) ~= nil then 
    for i = #playerBullets,1,-1 do 
        playerBullets[i].y = playerBullets[i].y - dt*           playerBullets.bulletSpeed   
        if playerBullets[i].y < 0 then 
            table.remove(playerBullets,i)
        else 
            for j = #aliens, 1,-1 do 
                for k = #aliens[j],1,-1 do 
                    if next(playerBullets) ~= nil and playerBullets[i] ~= nil     and
                        aliens[j][k].x <= playerBullets[i].x and aliens[j]  [k].x + 50 >= playerBullets[i].x
                        and aliens[j][k].y <= playerBullets[i].y and aliens[j]  [k].y + 47 >= playerBullets[i].y then 
                        table.remove(playerBullets, i)
                        if level == 2 and aliens[j][k].life > 0 then 
                            aliens[j][k].life = aliens[j][k].life - 1 
                        if level == 3 and aliens[j][k].life > 0 then 
                            aliens[j][k].life = aliens[j][k].life - 1 
                        else 
                            table.remove(aliens[j], k) 
                            alienQty = alienQty - 1 
                            score = score + 100 
                        end 
                        break 
                    end
                end
            end
        end
    end
end
end

local function PlayerShot()
health = health - 1 
if health == 0 then 
    love.event.quit() -- COME BACK HERE FOR LOSE 
end
end

local function AlienShots(dt)
if next(alienBullets) ~= nil then 
    for i = #alienBullets,1,-1 do 
        alienBullets[i].y = alienBullets[i].y + dt * alienUFO.bulletSpeed
        if alienBullets[i].y > love.graphics.getHeight() then 
            table.remove(alienBullets, i)
        elseif playerShip.x <= alienBullets[i].x and playerShip.x +   playerShip.width >= alienBullets[i].x 
            and playerShip.y <= alienBullets[i].y and playerShip.y +  playerShip.height >- alienBullets[i].y then 
            table.remove(alienBullets, i)
            PlayerShot()
        end
    end
end
end

local function nextLVL()
level = level + 1 
if level == 2 then 
    alienUFO.image = love.graphics.newImage(alienUFO.ENEMY1)
    alienUFO.speed = 100 
    alienUFO.shotProb = 20
    alienUFO.bullet = alienBul.image 
    initGame()
elseif level == 3 then 
    alienUFO.image = love.graphics.newImage(alienUFO.ENEMY2)
    initGame()
elseif level > 3 then 
    love.event.quit() -- COME BACK HERE FOR WIN 
end
end 


function game.load() 
pause = false 
level = 1 
health = 3 
score = 0 
playerShip.speed = 300 
playerShip.bulletSpeed = 300 
playerShip.width = 75 
playerShip.height = 71 
alienUFO.speed = 70 
alienUFO.width = 50 
alienUFO.height = 47 
alienUFO.ENEMY1 = ENEMY_UFO.ENEMY_1 
alienUFO.ENEMY2 = ENEMY_UFO.ENEMY_2 
alienUFO.ENEMY3 = ENEMY_UFO.ENEMY_3 
alienUFO.bulletSpeed = 300 
alienUFO.image = love.graphics.newImage(alienUFO.ENEMY3)
playerShip.IMAGE = PLAYER_IMG
playerShip.image = love.graphics.newImage(playerShip.IMAGE)
healthImage = love.graphics.newImage(HEALTH_IMG)
playerShip.x = love.graphics.getWidth() / 2 - playerShip.width/2 
playerShip.y = love.graphics.getHeight() - 100 
playerBul.image = love.graphics.newImage(PLAYER_BULLET)
alienBul.image = love.graphics.newImage(ENEMY_BULLET)
initGame()
end 

function game.draw()
if pause then 
    love.graphics.print('GAME PAUSED',love.graphics.getWidth()/2 - 20,20)
end 

if next(playerBullets) ~= nil then 
    for i = 1, #playerBullets do 
        love.graphics.draw(playerBul.image, playerBullets[i].x,    playerBullets[i].y)
    end
end

if next(alienBullets) ~= nil then 
    for i = 1, #alienBullets do 
        love.graphics.draw(alienBul.image, alienBullets[i].x,    alienBullets[i].y) 
    end
end

if next(aliens) ~= nil then 
    for i = 1, #aliens do 
        for j = 1, #aliens[i] do 
            love.graphics.draw(alienUFO.image, aliens[i][j].x, aliens[i][j].y)
        end
    end
end 

love.graphics.print('Score: '..score, love.graphics.getWidth() - 100,20)
love.graphics.draw(playership.image, playership.x, playerShip.y)
for i = 1, lives do 
    love.graphics.draw(healthImage, 10+ 1 * 15,20)
end 
end 

function game.update(dt)
    if not pause then 
        if alienQty == 0 then 
            nextLVL()
        end 

        if love.keyboard.isDown("right") then 
            playerShip.x = playerShip.x + dt * playerShip.speed 
        elseif love.keyboard.isDown("left") then 
            playerShip.x = playerShip.x - dt * playerShip.speed 
        end 
        if love.keyboard.isDown(" ") then 
            playerShoot() 
        end 
        playerShots(dt)
        AlienShots(dt)
        if love.math.random(1,100) < alienUFO.shotProb then 
            local r = love.math.random(1,#aliens)
            if next(aliens[r]) ~= nil then 
                alienShoot(aliens[r][#aliens[r]].x, aliens[r][#aliens[r]].y)
            end 
        end 

        if alienMovement then 
            for i = 1, #aliens do 
                for j = 1, #aliens[i] do 
                    aliens[i][j].x = aliens[i][j].x + dt * alienUFO.speed
                    if aliens[i][j].x + alienUFO.width + 2 >=    love.graphics.getWidth() then 
                        alienMovement = false 
                    end
                end
            end
        else 
            for i =1, #aliens do 
                for j = 1, #aliens[i] do 
                    aliens[i][j].x = aliens[i][j].x - dt * alienUFO.speed 
                    if aliens[i][j].x - 2 <= 0 then 
                        alienMovement = true 
                    end
                end
            end
        end
        if playerShip.x < 0 then 
            playerShip.x = 0 
            elseif playerShip.x > love.graphics.getWidth() - 75 then 
                playerShip.x = love.graphics.getWidth() -75
            end 
        end 
    end 
end

function game.keypressed(key)
    if key =='p' then 
        pause = not pause 
    end 
end

return game 
function game.load()
    loadGame()
end