不同的状态'在我的画布游戏中

时间:2016-03-22 16:33:39

标签: javascript html5 canvas

问题

我在将游戏更改为包含不同状态时从哪里开始有问题,我理解为什么使用状态并且它们对我来说非常有意义,但我发现它很难实现。

问题

我是否可以编辑我令人兴奋的代码(如下所示)以包含状态,以便当您按下播放时,播放状态会出现并让您玩游戏?

enter image description here

我相信这显示了我的要求。

守则

{{1}}

2 个答案:

答案 0 :(得分:3)

使每个州都成为一个对象。如果您对JS继承感到满意,可以使用原型;否则,您可以使用相同的方法定义每个状态,如下所示:

currentState = playState;

这样,您就可以拥有一个变量来跟踪您所处的状态(例如currentState.update()),并在适当时调用switch。这样可以保持每个状态的逻辑自包含,而不是在代码中散布transpo_industries语句。

答案 1 :(得分:2)

您只需要将状态存储在某处。您可以将它们放在变量或对象中,例如......

var ScreenState = {
    MENU : 0,
    GAMEPLAY : 1,
    SETTINGS : 2
}

然后,您只需根据当前状态有条件地更新或绘制游戏。

e.g。

function update() {
    switch (currentScreenState) {
    case ScreenState.MENU:
        // Update the menu screen.
        break;
    case ScreenState.GAMEPLAY:
        // Update the gameplay screen.
        break;
    case ScreenState.SETTINGS:
        // Update the settings screen.
        break;
    }
}

function draw() {
    switch (currentScreenState) {
    case ScreenState.MENU:
        // Draw the menu screen.
        break;
    case ScreenState.GAMEPLAY:
        // Draw the gameplay screen.
        break;
    case ScreenState.SETTINGS:
        // Draw the settings screen.
        break;
    }
}

通常,在游戏循环中反复调用update()和draw()。然后根据您的更新或用户输入等更改您的状态。然后,游戏只能根据您的switch语句一次显示一个状态。

所有这一切,我建议您在涉及菜单/文本的屏幕上使用HTML,并且只处理实际游戏画面的画布。这样,你只需要处理你的游戏状态,你仍然可以做一些花哨的东西与屏幕管理和交换屏幕进出。我通常将每个屏幕作为一个独特的对象,子组件只是GameComponents(仅更新)或DrawableGameComponents(可更新和可绘制)。然后,每个屏幕都可以保持谨慎,然后代码和状态更容易管理和维护。