前言,对于这个半模糊的问题感到抱歉。我一直在寻找这个问题的几个星期。 所以我理解游戏需要的必需品。 (初始化,更新,绘制)。
更具体地说,我使用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;
}
}
答案 0 :(得分:2)
在更新方法中应该考虑碰撞检测。如果您的意思是从输入移动,您应该创建一个单独的输入类。存储角色对象中角色的位置坐标。然后,Input类应该更改这些坐标。如果你在谈论AI,你应该有一个单独的AI类来控制运动。
每场比赛都不同。重要的是你理解代码并且它有效。我建议您找一些有用的在线教程来展示示例代码,这样您就可以开始了解创建游戏的工作流程。