首页 > 解决方案 > 为什么我在 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('Attack Them All', 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('Play', 0, (VIRTUAL_HEIGHT / 2) + 2, VIRTUAL_WIDTH + 2, 'center')
    love.graphics.printf('Quit', 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('Play', 0, (VIRTUAL_HEIGHT / 2), VIRTUAL_WIDTH, 'center')
        love.graphics.setColor(237/255, 28/255, 36/255, 255/255)
        love.graphics.printf('Quit', 0, (VIRTUAL_HEIGHT / 2) + 20, VIRTUAL_WIDTH, 'center')
    else
        love.graphics.setColor(237/255, 28/255, 36/255, 255/255)
        love.graphics.printf('Play', 0, (VIRTUAL_HEIGHT / 2), VIRTUAL_WIDTH, 'center')
        love.graphics.setColor(255/255, 174/255, 201/255, 255/255)
        love.graphics.printf('Quit', 0, (VIRTUAL_HEIGHT / 2) + 20, VIRTUAL_WIDTH, 'center')
    end

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

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

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

    math.randomseed(os.time())

    love.window.setTitle('Attack Them All')
    
    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

我在这里做错了什么?

标签: textlualove2d

解决方案


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

例子:

if love.keyboard.wasPressed('up') then
   print("up is pressed")
   ...

推荐阅读