gpt4 book ai didi

java - Java 中的不同游戏状态

转载 作者:行者123 更新时间:2023-12-01 06:58:31 24 4
gpt4 key购买 nike

我正在尝试用 Java 制作一款游戏 - 目前只是一个简单的游戏。创建不同游戏状态的最佳方法是什么?我应该为每个状态有一个单独的类,每个类都有一个 Paint() 方法吗?另外,我应该如何在状态之间切换?

最佳答案

无法用 Java 进行准确的评论,但我过去处理状态的方式是为每个状态使用一个单独的类。它们都继承自基本状态并由堆栈管理。

在伪 C# 中 -

abstract class GameState
{
public bool BlockDraw = true;
public bool BlockUpdate = true;

abstract void Update();
abstract void Draw();
}

每个状态都可以阻止下面状态的更新和绘制。

public class GameStateManager
{
public LinkedList<GameState> States;

public void Update()
{
// Update the top state
Update(States.Top);
}

private void Update(Node<GameState> state)
{
state.Value.Update();

// Move down the stack if the current state is not blocking
if (!state.Value.BlockUpdate)
{
Update(state.Next);
}
}

public void Draw()
{
Draw(States.Top);
}

private void Draw(Node<GameState> state)
{
state.Value.Draw();

if (!state.Value.BlockDraw)
{
Draw(state.Next);
}
}
}

管理器的想法很简单,就是更新或绘制顶级状态。然后,如果当前状态不是阻塞,则它会递归地沿着堆栈向下移动。通过这种方式,您可以弹出暂停状态来阻止更新,但不能阻止绘制(假设您希望游戏在暂停窗口后面部分可见)。或者另一个弹出窗口将阻止抽奖,但不会阻止更新 - 这允许游戏继续但节省抽奖时间。

您将状态压入和弹出堆栈,因此在播放时它可能如下所示:

  • 播放状态
  • 标题菜单状态
  • 打开屏幕状态

PlayState 会阻止其下方所有内容的绘制和输入。假设用户暂停,您将推送一个 PauseState,该状态会阻止其下方的更新。如果他们退出到菜单,您将弹出到 TitleMenuState。

关于java - Java 中的不同游戏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4997415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com