2013-04-09 59 views
0

我在java中开始一个非常简单的游戏,但我已经停留在第一步。我做了一个StateBasedGame类(Kreations),它成功地添加并进入我的BasicGameState(MenuGameState)。然而,MenuGameState的update()和render()方法没有被调用,我无法找出原因。你能帮我吗? 这里下面的代码:渲染不是在BasicGameState中调用的

StateBasedGame:

import gamestates.MenuGameState; 

import org.newdawn.slick.*; 
import org.newdawn.slick.state.StateBasedGame; 

public class Kreations extends StateBasedGame 
{ 

    public Kreations() { 
     super("Kreations"); 
    } 

    @Override 
    public void update(GameContainer gc, int delta) throws SlickException 
    { 

    } 

    @Override 
    public void render(GameContainer gc, Graphics g) throws SlickException 
    { 

    } 

    public static void main(String[] args) throws SlickException 
    { 
     try { 
      AppGameContainer container = new AppGameContainer(new Kreations()); 

      container.setDisplayMode(800,600,false); 

     //Make sure the logic updates consistently 
      container.setMinimumLogicUpdateInterval(20); 
      container.setMaximumLogicUpdateInterval(20); 

      container.start(); 
     } catch (SlickException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void initStatesList(GameContainer gc) throws SlickException { 
     this.addState(new MenuGameState()); 
    } 
} 

BasicGameState:

package gamestates; 

import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.state.BasicGameState; 
import org.newdawn.slick.state.StateBasedGame; 

public class MenuGameState extends BasicGameState { 

    public static final int ID = GameStates.MAIN_MENU.ordinal(); 

    @Override 
    public void init(GameContainer gc, StateBasedGame sbg) 
      throws SlickException { 

    } 

    @Override 
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) 
      throws SlickException { 
     g.drawString("Hello World", 100, 100); 
    } 

    @Override 
    public void update(GameContainer gc, StateBasedGame sbg, int delta) 
      throws SlickException { 

    } 

    @Override 
    final public int getID() { 
     // TODO Auto-generated method stub 
     return GameStates.MAIN_MENU.ordinal(); 
    } 

    public void enter(GameContainer container, StateBasedGame game) throws SlickException { 
      System.out.print("MenuGameState.enter() is called"); 
     } 

} 

回答

1

除非有代码其他地方是应该要调用这些方法,更新()和render()MenuGameState的方法没有打电话,因为没有电话给他们。

0

我还没有找到StateBasedGame类的javadoc,但我的猜测是当前状态是通过StateBaseGame的render()方法呈现的。而且,由于您重写该方法以使其无效,因此您的状态的render()方法永远不会被任何对象调用。尝试删除主要类中覆盖的render()update()方法。

顺便说一句,在源文件中我发现on github,这两个方法是final的,所以不可能覆盖它们,这可能表明这些方法不应该被覆盖。