我正在创建一个纸牌游戏并使用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,不包括任何此类。
答案 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()
行来修复它。
我希望这很有帮助。