2013-03-16 92 views
2

我已经做了相当多的搜索这个答案,和一些编辑,我不能得到它的工作。我认为我的布尔方法getColor()有问题。我试图从一个不同类的循环中使用它。我的布尔方法java

HERSE我的getColor方法,从AvatarPanel类

public boolean setColor(boolean good) 
{ 

    if (good == true) 
     what--; 
     avatars.get(0).setBackground(colors.get(what)); 
    repaint(); 
    if (good == false) 
     what++; 
     avatars.get(0).setBackground(colors.get(what)); 
    repaint(); 

    return good; 
} 

下面是从背景类,我试着在使用的getColor的attackPerformed方法。林不知道,如果我写的方法错了,或如果attackPerformed需要侦听器。游戏仍然正常运行,工作正常。我只是希望得到一些帮助,确保这些文件至少能够正确书写。

我决定展示背景构造函数可能是个好主意,因为我认为它是我需要调用attackPerformed的地方。我无法弄清楚我需要调用attackPerformed,但我很确定它会在后台构造函数中。 attackPerformed方法如下所示,构造函数位于顶部。

public class Background extends JPanel implements Constants, ActionListener 
{ 
    private static final long serialVersionUID = 1L; 

    private final Color BACK_COLOR = Color.GRAY; 

    private ArrayList<Sprite> sprites; 

    private Avatar avatar; 

    /** Constructor */ 
    public Background() 
    { 

     sprites = new ArrayList<Sprite>(); 
     reset(0); 
     setBackground(BACK_COLOR); 


     KeyboardFocusManager manager =KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
     manager.addKeyEventDispatcher(new KeyEventDispatcher() 
     { 
     public boolean dispatchKeyEvent(KeyEvent event) 
     { 
      int x = 0, y = 0; 
      double angle = 0; 
      Point p = avatar.getPosition(); 

      switch (event.getKeyCode()) 
      { 
      case KeyEvent.VK_DOWN: 
       y=6; 
       angle=270; 
       break; 

      case KeyEvent.VK_UP: 
       y = -6; 
       angle = 90; 
       break; 

      case KeyEvent.VK_LEFT: 
       x = -6; 
       break; 

      case KeyEvent.VK_RIGHT: 
       x = 6; 
       angle = 180; 
       break; 
      } 

      avatar.setParameters(); 
      p.x += x; 
      p.y += y; 
      avatar.setPosition(p); 
      avatar.setAngle(angle); 

      if (!getBounds().contains(avatar.getBounds())) 
      { 
       avatar.restore(); 
       Toolkit.getDefaultToolkit().beep(); 
       return true; 
      } 
      repaint(); 
      return true;    
     } 



    }); 
    Timer timer = new Timer(15, this); 
    timer.start(); 



} //end of constructor 



public void attackPerformed() 
{ 
    for(Sprite s : sprites) 
    { 
     AvatarPanel panel = new AvatarPanel(); 
     Rectangle r = new Rectangle(sprites.get(0).getBounds()); 
     Rectangle p = new Rectangle(sprites.get(1).getBounds()); 

      if(r.intersects(p)) 
      { 
       panel.setColor(false); 
      }    
    } 
} 


public void actionPerformed(ActionEvent e) 
{ 
    for (Sprite s : sprites) 
    { 
     if (s instanceof Move) 
     { 
      s.setParameters(); 
      for (int i=0; i<3; i++) 
      { 
       ((Move)s).nextPosition(); 
       if (!getBounds().contains(s.getBounds())) 
       { 
        ((Move) s).moveFailed(); 
       } 
       else break; 
      } 
     } 
    } 
    repaint(); 
} 




public @Override void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); /* Let the parent class do its painting */ 

    for (Sprite sprite: sprites) 
    { 
     sprite.draw(g); 
    } 
} 

public void reset(int level) 
{ 
    Sprite sprite = null; 

    int x, y, angle; 
    double scale, min, max; 

    sprites.clear(); 
    int[] figures = FIGURES[level]; 
    for (int f=0; f<figures.length; f++) 
    { 
     for (int i=0; i<figures[f]; i++) 
     { 
      x = (int)(Math.random()*600 + 100); 
      y = (int)(Math.random()*400 + 100); 

      switch (f) 
      { 
       case 0: 
        sprite = avatar = new Avatar(x,y); 
        break; 
       case 1: 

        sprite = new Predator(x,y); 
        break; 
       case 2: 
        sprite = new Mine(x,y); 
        break; 
       case 3: 
        sprite = new Shield(x,y); 
        break; 
      } 

      angle = (int)(Math.random()*360); 
      sprite.setAngle(angle); 

      min = sprite.getMinScaleFactor(); 
      max = sprite.getMaxScaleFactor(); 
      scale = Math.random() * (max - min) + min; 
      sprite.setScale(scale); 

      sprites.add(sprite); 
      repaint(); 
     } 
    } 
} 

}

+0

您是否缺少setColor中的一些{}?如果您没有使用{}中包含的语句块来执行if语句,则只会有条件地运行第一条语句。所以现在,唯一有条件的是你的什么 - 什么是++行。每次调用setColor时,都要执行两个setBackground和重绘步骤。 – 2013-03-16 19:14:45

+1

在setColor方法中,使用正确的缩进级别或花括号。 – 2013-03-16 19:14:58

+1

退货声明在哪里?它接缝的一部分setColor方法缺失。 – MrSmith42 2013-03-16 19:17:22

回答

1

我会强烈建议使用括号,作为方法重绘()将执行if语句之外。因为,布尔只能有你可以用“别人”,而不是第二,如果两个可能的值...

public boolean setColor(boolean good) 
{ 
    if (good == true) 
    { 
     what--; 
     avatars.get(0).setBackground(colors.get(what)); 
     repaint(); 
    } 
    else 
    {  
     what++; 
     avatars.get(0).setBackground(colors.get(what)); 
     repaint(); 
    } 
+0

谢谢你的洞察 – isuck 2013-03-16 19:17:02

2

看起来你如果和其他情况非常相似。 您可以将其简化为此。

public boolean setColor(boolean good) 
{ 
    what+=good?-1:+1; 
    avatars.get(0).setBackground(colors.get(what)); 
    repaint(); 
    return good; 
} 
+1

哦,这很好,非常感谢。 – isuck 2013-03-16 19:28:56