2015-09-01 95 views
1

我有一个平台类创建一个窗口并产生平台和一个“字符”。它使用另一个类平台来创建平台。角色应该跳起来并登陆平台。我使用getBoundsgetTopY函数进行碰撞检测,但它们仅适用于第一个平台。我如何让他们为多个平台工作?从同一个类中的方法调用方法

public class Platformer extends JPanel { 
    Platform platform = new Platform(this); 
    Character character = new Character(this); 

    public Platformer() { 
     addKeyListener(new KeyListener() { 
      @Override 
      public void keyTyped(KeyEvent e) { 
       character.keyTyped(e); 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       character.keyReleased(e); 
      } 

      @Override 
      public void keyPressed(KeyEvent e) { 
       character.keyPressed(e); 
      } 
     }); 

     setFocusable(true); 
    } 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

     platform.Location(150,200); 
     platform.paint(g2d); 

     platform.Location(200,120); 
     platform.paint(g2d); 

     character.paint(g2d); 
    } 

    private void move(){ 
     character.move(); 
    } 

    public static void main(String args[]){ 
     JFrame frame = new JFrame("Mini Tennis"); 

     //create new game 
     Platformer platformer = new Platformer();     

     //add game 
     frame.add(platformer); 

     //size 
     frame.setSize(400, 400);    
     frame.setVisible(true); 

     //set close condition 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     while (true) {   
      platformer.move(); 
      platformer.repaint(); 

      try { 
       Thread.sleep(10);//sleep for 10 sec 
      } catch (InterruptedException ex) { 
       Thread.currentThread().interrupt(); 
      } 
     } 
    } 
} 

public class Platform { 
    private static final int Height = 10; 
    private static final int Width = 60; 
    int x; 
    int Y; 
    private Platformer platformer; 

    public Platform(Platformer platformer) { 
     this.platformer = platformer; 
    } 

    public void Location(int xin, int yin) { 
     x = xin; 
     Y = yin; 
    } 

    public void paint(Graphics2D g) {  
     g.fillRect(x, Y, Width, Height);  
    } 

    public Rectangle getBounds() { 
     return new Rectangle(x, Y, Width, Height); 
    } 

    public int getTopPlat() { 
     return Y; 
    } 
} 

回答

0

其实你只有一个平台。而你在不同的地方(paint功能Platformer)两次得出这样的平台:

platform.Location(150,200); 
platform.paint(g2d); 

platform.Location(200,120); 
platform.paint(g2d); 

所以我想你只处理一个平台(坐标200和120)。您必须保留所有平台并分别处理每个平台。

相关问题