为什么我的Love2D游戏中的文字不会更新?

我最终修复了关于游戏中文字不会显示的问题,现在下一个问题是它不会更新。预期应该发生的是,当我按上下箭头键时,选定的文字会更改,然后按Enter键会带我进入新的状态,或退出游戏。

我在我的StartState.lua中的代码现在看起来像这样:

StartState = Class{__includes = BaseState}

local option = 1

function StartState:update(dt)
    if love.keyboard.wasPressed('up') then
        if option == 1 then
            option = 2
        else
            option = 1
        end
    elseif love.keyboard.wasPressed('down') then
        if option == 2 then
            option = 1
        else
            option = 2
        end
    end

    if love.keyboard.wasPressed('enter') then
        if option == 1 then
            gStateMachine:change('play')
        else
            gStateMachine:change('quit')
        end
    end
end

function StartState:render()
    local backgroundWidth = gTextures['start-background']:getWidth()
    local backgroundHeight = gTextures['start-background']:getHeight()

    love.graphics.draw(gTextures['start-background'], 0, 0, 0, VIRTUAL_WIDTH / (backgroundWidth - 1),
        VIRTUAL_HEIGHT / (backgroundHeight - 1))

    love.graphics.setFont(gFonts['large'])
    love.graphics.setColor(153/255, 217/255, 234/255, 255/255)
    love.graphics.printf('攻击它们全部', 0, VIRTUAL_HEIGHT / 2 - 50, VIRTUAL_WIDTH, 'center')

    love.graphics.setFont(gFonts['medium'])
    love.graphics.setColor(0/255, 0/255, 0/255, 255/255)
    love.graphics.printf('游戏', 0, (VIRTUAL_HEIGHT / 2) + 2, VIRTUAL_WIDTH + 2, 'center')
    love.graphics.printf('退出', 0, (VIRTUAL_HEIGHT / 2) + 22, VIRTUAL_WIDTH + 2, 'center')

    if option == 1 then
        love.graphics.setColor(255/255, 174/255, 201/255, 255/255)
        love.graphics.printf('游戏', 0, (VIRTUAL_HEIGHT / 2), VIRTUAL_WIDTH, 'center')
        love.graphics.setColor(237/255, 28/255, 36/255, 255/255)
        love.graphics.printf('退出', 0, (VIRTUAL_HEIGHT / 2) + 20, VIRTUAL_WIDTH, 'center')
    else
        love.graphics.setColor(237/255, 28/255, 36/255, 255/255)
        love.graphics.printf('游戏', 0, (VIRTUAL_HEIGHT / 2), VIRTUAL_WIDTH, 'center')
        love.graphics.setColor(255/255, 174/255, 201/255, 255/255)
        love.graphics.printf('退出', 0, (VIRTUAL_HEIGHT / 2) + 20, VIRTUAL_WIDTH, 'center')
    end

    love.graphics.setColor(255/255, 255/255, 255/255, 255/255)
end

我已经在我的main.lua文件中添加了一个StateMachine

function love.load()
    love.graphics.setDefaultFilter('nearest', 'nearest')

    math.randomseed(os.time())

    love.window.setTitle('攻击它们全部')

    push:setupScreen(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT, {
        vsync = true,
        fullscreen = false,
        resizable = true
    })

    gStateMachine = StateMachine {
        ['start'] = function() return StartState() end,
        ['play'] = function() return PlayState() end,
        ['quit'] = function() return QuitState() end
    }

    gStateMachine:change('start')
end

function love.update(dt)
    gStateMachine:update(dt)
end

我在这里做错了什么?

点赞
用户1029809
用户1029809

love.keyboard.wasPressed 不是 Love2D 的标准 API。应该在代码的其他位置实现吗?首先检查这个。 然后尝试在你的代码中执行的条件中放置一些 print("condition xxx is verified"),然后你就会找到条件没有被验证的地方。

例子:

if love.keyboard.wasPressed('up') then
   print("up is pressed")
   ...
2020-10-01 10:57:47