2013-04-06 124 views
1

我创建了一个名为multiplay的布尔值。IF语句问题Java

private boolean multiplay; 

public Game()中我有:

// make a player 
player = new Player(this); 
if(multiplay == true) { 
    player2 = new Player(this); 
} 

在我创建了一个方法,实际的类文件:

public void startMutliPlayer() { 
    multiplay = true; 
} 

我所试图做的是当startMultiPlayer把它叫做将布尔multiplay设置为true,因此,两名球员将被添加到框架而不是一个。如果未调用“startMultiPlayer”,则只会添加一个播放器。

目前只有当我打电话给startMultiPlayer时,它只增加了一名选手而不是两名选手。

UPDATE:

之所以能够出使用下面的代码进行排序这个问题:

// Make Players (Single & MultiPlayer) 
     if (multiplay == false) { 
      player = new Player(this); 
      player.setPosition(startPosition); 
      player.move(new Vec2(-210, 0)); 
      multiplay = true; 
     } else if(multiplay == true) { 
      player = new Player(this); 
      player.setPosition(startPosition); 
      player.move(new Vec2(-210, 0));player2 = new Player(this); 
      player2.setPosition(startPosition); 
      player2.move(new Vec2(-150, 0)); 
      multiplay = false; 
     } 

public static void startMutliPlayer() { 
     multiplay = false; 
    } 

感谢

+3

发布SSCCE。您发布的代码不足以了解问题所在。另外,“if(multiplay)”就足够了。不需要比较布尔值和true来获得布尔值。 – 2013-04-06 12:08:34

+0

@JBNizet我需要发布什么内容。其他玩家不会加载任何错误。这就是我在这里遇到的问题。顺便说一句,我把它设置为假,现在玩家出现,但即使我没有打电话它也会出现。 – 2013-04-06 12:11:24

+0

我认为你必须在'startMultiplayer()'方法中移动'if'语句,因此你将验证'multiplay'变量的属性,并添加播放器。 – Houari 2013-04-06 12:12:20

回答

0

Game类中的哪个对象是您调用startMultiPlay的?因为在调用Game构造函数后总会调用它,所以它不起作用 - 因为当调用Game ctor时,多重播放将是错误的。

上的方式来解决,这是

private boolean multiplay; 

需要改变,以

private static boolean multiplay; 

也使startMultiPlayer静态和你创建一个游戏对象之前调用它。

另一种方法是不在游戏的ctor中创建玩家。 必须使用startMultiPlayer和startSinglePlayer方法 - 分别在这些方法中创建一个或两个Player对象。

+0

我认为对于OP来说,你必须给出更多的理论。我觉得是这样的(我不是downvoter) – 2013-04-06 12:13:51

+0

我会尽力的谢谢。 – 2013-04-06 12:25:44

+0

@JamesDanny你应该投票答案,如果帮助。 **请评论你是否赞成票** – 2013-04-06 17:09:12

0

Game类创建的方法,即

public void setMultiplay(boolean multiplay) { 
    this.multiplay = multiplay; // scope 
    if (multiplay) { 
    player2 = new Player(this); 
    } 
} 
+0

嗨,这工作,但关键按钮不起作用,我得到这个错误。线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException \t at game.KeyHandler.keyPressed(KeyHandler.java:76) – 2013-04-06 12:23:13

+0

这是一个单独的问题,你应该问一个单独的问题。 – durron597 2013-04-06 12:28:42

0

我猜你在调用Game类的对象上的方法startMultiPlayer()。 但是,构造函数是在Java中创建对象时要执行的第一件事。 游戏游戏=新游戏(); game.startMultiPlayer(); 将顺序执行下面几行:

// make a player 
player = new Player(this); 
if(multiplay == true) { 
    player2 = new Player(this); 
} 
multiplay = true; 

这意味着多重设置为true,你检查之后,如果这是真的。因此,您仍然处于单人模式。

尝试在调用(或不调用)方法后检查多重播放是否为真。

另请注意,您可以简单地编写if(multiplay)而不是if(multiplay==true),因为Java中的if语句只能采用布尔值。但这是个人喜好,无论如何,这可能是自动优化的。