尝试重置Lua中的游戏

时间:2020-08-11 20:47:58

标签: lua love2d

这里对游戏开发和Lua来说是非常新的。我正在开发一个平台游戏,我希望角色一旦与某个对象发生碰撞就可以重新启动游戏,并在此之前显示标题。一旦发生这种情况,我也想将角色的位置重置为0,0,但我不知道如何。

我创建了一个名为WIN的全局变量,如果角色与对象碰撞,则将其设置为true,这是可行的,但随后进入我的love.draw()函数,我就有了:

function love.draw()

-- begin virtual resolution drawing
push:apply('start')

-- clear screen using Mario background blue
love.graphics.clear(108/255, 140/255, 255/255, 255/255)

-- renders our map object onto the screen
love.graphics.translate(math.floor(-map.camX + 0.5), math.floor(-map.camY + 0.5))
map:render()

if WIN == true then
    love.graphics.printf('NEXT LEVEL', 0, 30, VIRTUAL_WIDTH, 'center')
    love.graphics.printf('Continue to Next Level', 0, 45, VIRTUAL_WIDTH, 'center')
    love.load()
end
-- end virtual resolution
push:apply('end')

结束 当我实际上与对象碰撞时,出现以下错误:

Error
push.lua:48: love.window.setMode cannot be called while a Canvas is active in love.graphics.
Traceback
[C]: in function 'windowUpdateMode'
push.lua:48: in function 'setupScreen'
main.lua:43: in function 'load'
main.lua:116: in function 'draw'
[C]: in function 'xpcall'

错误行在我的love.load()函数中,如下所示:

function love.load()
    -- sets up a different, better-looking retro font as our default
    love.graphics.setFont(love.graphics.newFont('fonts/font.ttf', 8))

-- sets up virtual screen resolution for an authentic retro feel
push:setupScreen(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT, {
    fullscreen = false,
    resizable = true
})

love.window.setTitle('Super Mario 50')

love.keyboard.keysPressed = {}
love.keyboard.keysReleased = {}
end

我猜测问题是我已经做过一次之后无法再次设置屏幕,但是我不知道如何解决此问题并重新开始。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

(defun main () (ltk:with-ltk () (let ((c (make-instance 'ltk:canvas :width 500 :height 500))) (ltk:pack c) (let ((txt (ltk:create-text c 100 100 "lorem ipsum dolor sit amet consectetur adipiscing elit"))) (ltk:itemconfigure c txt :width 100) (ltk:itemconfigure c txt :font "FreeMono") (ltk:itemconfigure c txt :justify "center"))))) 运行一次。那一次是您的游戏启动。请勿在{{1​​}}内致电love.load()(或love.load()),反之亦然。 Love2D游戏引擎会调用这些函数,因此您无需调用它们。

更新love.update()而非love.draw()中的开始位置。 love.update()仅用于绘画。我相信它将是love.draw()体系结构中的love.draw()

要重新启动对象的位置,您必须执行类似的操作

View

或者类似的东西,如果不看变量就很难知道。然后,您的model-view-controller将在事物所在的坐标处绘制事物。

答案 1 :(得分:0)

要重置/重新启动游戏而不重新加载可执行文件,请使用:

love.event.quit('restart')

但是在执行此操作之前,请先使屏幕变黑并显示红色的字母:“游戏结束”