适当的游戏结构

时间:2014-06-28 15:43:35

标签: java structure

前言,对于这个半模糊的问题感到抱歉。我一直在寻找这个问题的几个星期。 所以我理解游戏需要的必需品。 (初始化,更新,绘制)。

更具体地说,我使用Java和Slick2D作为学习环境。 Slick2D使游戏的设置非常简单。我想我理解MVC结构,但我现在最大的问题是我在哪里编写播放器移动代码?

我有Player类,它包含所有字段,它需要渲染的图像/动画,以及所有控件。虽然那可能只是我自己的不安全感,但这种感觉并不正确。我觉得玩家的移动控件应该在它自己的类中,在它自己的类中进行碰撞检测,而玩家所拥有的只是定义它的位置(坐标,大小,命中框等)。

我不完全确定如何解释这一点,因为每当我想到这一点时,我的思绪就会在各地进行,我很难在脑海中“整理”这些信息。 如果您需要更多信息,请告诉我。我只是想找到所有东西的“正确”的地方,使我的代码更易于管理,可读,并且可能重复使用。

(编辑显示程序流程[不可运行])实际上,我的流程是,

public class Game extends StateBasedGame{
  //with main included, this sets up the window, fps, etc...
  start "level 1" state...;
}

public class level1 extends BasicGameState{

  public void init(){
  initialize player, environment, etc...
  }

  public void update(){
    player.update();
  }

  public void render(){
    environment.render();
    player.render();
  }

}

public class Player{
  All player variables

  public Player(){
    construct player with coords and starting image/animation
  }

  public void init(){
    initializes all images/animations this player could potentially use
  }

  public void update(){
    All environment based input controls go here, example;
      if(this.isGrounded && input.keyIsDown(KEY_SPACE){
        make character jump;
        change animation;
      }
   }

   public void render(){
     draw image/animation;
   }

  }

1 个答案:

答案 0 :(得分:2)

在更新方法中应该考虑碰撞检测。如果您的意思是从输入移动,您应该创建一个单独的输入类。存储角色对象中角色的位置坐标。然后,Input类应该更改这些坐标。如果你在谈论AI,你应该有一个单独的AI类来控制运动。

每场比赛都不同。重要的是你理解代码并且它有效。我建议您找一些有用的在线教程来展示示例代码,这样您就可以开始了解创建游戏的工作流程。