Slick2d init运行两次,更新/渲染运行无限次

时间:2013-01-23 15:50:36

标签: java eclipse slick2d

我正在创建一个纸牌游戏并使用slick2d进行图形处理。当我打电话给我的方法从公共无效的牌组中抽出牌时,它会运行两次。     下面的方法从deck构造函数中抽取一张卡并返回索引号。

public Card PlayerCardDraw()
{

    Card index = cards.remove(1);
    System.out.println("Cards left: " + cards.size());
    return index;
}

甲板构造函数:

Deck()
{
    cards = new ArrayList<Card>();
    for (int a = 0; a < 52; a++)
    {           
            cards.add(new Card(a));         
    }
}
public class Play extends BasicGameState
{
Deck deck = new Deck ();
Image PlayScreen;
Image PauseButton;
Image FaceDown1, FaceDown2;

Image card[] = new Image [52];

public String mouse = "no input";


Card C;

public Play (int state)
{

}


public void init (GameContainer gc, StateBasedGame sbg) throws SlickException
{
    PlayScreen = new Image ("res/Play/PlayScreen.png");
    PauseButton = new Image ("res/Play/PauseButton.png");
    FaceDown1 = new Image("res/CardBacks/redback1.png");
    FaceDown2 = new Image("res/CardBacks/redback2.png");

    String fileLocation = new String ();
    for (int i = 0 ; i < 52 ; i++)
    {
        fileLocation = "res/cards/" + (i+1) + ".png";
        card [i] = new Image (fileLocation);
    }
       //should only run once, right?
    C = deck.PlayerCardDraw();

}

运行时得到的输出 卡片留下:51 卡片剩下:50

这意味着PlayerCardDraw()被调用了两次。我在一个简单的系统中添加了声明“hi”并且它也运行了两次。

有谁知道为什么会发生这种情况以及如何解决这个问题? 顺便说一下,这个东西在程序进入播放状态之前就已经运行了。它显示左侧的卡和标题状态中的hi,不包括任何此类。

1 个答案:

答案 0 :(得分:1)

我意识到这是一个非常古老的问题,但我遇到了完全相同的问题,我只是想出来了。对我来说,就是我在我的StateBasedGame类的构造函数中以及initStatesList()函数中初始化我的屏幕。 这是我的代码:

public TheGame(String name)
{
    super(name);

    this.addState(new TitleScreen(TheGame.MENUSTATEID));
    this.addState(new HelpScreen(TheGame.HELPSTATEID));
    this.addState(new GameScreen(TheGame.PLAYSTATEID, GAMEWIDTH, GAMEHEIGHT));
    this.addState(new PauseScreen(TheGame.PAUSESTATEID));
    this.addState(new GameOverScreen(TheGame.GAMEOVERSTATEID));
    this.addState(new HighScoresScreen(TheGame.GAMERESULTSSTATEID));
}

public void initStatesList(GameContainer arg0) throws SlickException 
{
    this.getState(TheGame.MENUSTATEID).init(arg0, this);
    this.getState(TheGame.HELPSTATEID).init(arg0, this);
    this.getState(TheGame.PLAYSTATEID).init(arg0, this);
    this.getState(TheGame.PAUSESTATEID).init(arg0, this);
    this.getState(TheGame.GAMEOVERSTATEID).init(arg0, this);
    this.getState(TheGame.GAMERESULTSSTATEID).init(arg0, this);

    this.enterState(TheGame.MENUSTATEID);
}

这是我的计算机科学老师教我的课程的方式,但他是Slick 2D的新手,所以我认为他只是犯了一个错误。我通过删除getState()中的所有initStatesList()行来修复它。 我希望这很有帮助。