2014-01-21 3 views
-3

Я работаю над марио-игрой для школьного проекта, и я сталкиваюсь с проблемой. Это два моих класса, с которыми у меня проблемы. Я пытаюсь так, когда Марио умирает в классе mario, он будет призывать метод в классе GamePanel, чтобы начать игру. однако я столкнулся с проблемой статической/нестатической проблемы, и я не уверен, как это работает.Вызов метода в классе Java

также обратите внимание, что этот проект работал несколькими людьми в моей группе.

я урезан код полностью только важные части, жаль, что ищет методу StartGame в игровой панели

public class GamePanel extends JPanel implements Runnable { 




public void restart(){ 
    startGame(); 
} 
public void addNotify() { 
    super.addNotify(); // creates the peer 
    startGame(); // start the thread 
} 

/** 
* Start the game thread. 
*/ 
public void startGame() { 
    if(animator == null || !running) { 
     animator = new Thread(this, "The Animator V 3.0"); 
     animator.start(); 
    } 
    System.out.println(this + "asdasd"); 
} 

/** 
* Stop the game. 
*/ 
public void stopGame() { running = false; } 

/** 
* Defines a single game loop. 
*/ 
public void gameAction() { 
    gameUpdate(); // Update game state. 
    gameRender(); // Draw to the double buffer. 
    paintScreen(); // Draw double buffer to screen. 
} 

/** 
* The main game loop - repeatedly update, repaint, sleep. 
*/ 
public void run() { 

    running = true; 
    while(running) { 
     if(!gameFreeze) { 
      gameAction(); 
     } 

     try { 
      Thread.sleep(period); 
     } catch(InterruptedException ex){} 
    } 
    System.exit(0); // so enclosing JFrame/JApplet exits 
} 


} 

и для класса Марио, пожалуйста, обратите внимание на System.out.println где он говорит: «Марио умер», я хочу называть это методом startGame в Game Panel, GamePanel.startGame() показывает ошибку, вынуждающую startGame() в статическую, но поскольку startGame имеет «это». в нем, он не может быть статичным .:

public class Mario extends CollidableObject{ 

    // Manage collision in the Y direction. 
     boolean upperCollision = false; // will check if mario is above a tile 
    if(oldY > GameRenderer.tilesToPixels(map.getHeight()) - getHeight()) { // Off the bottom of the map. 
     System.out.println("Mario has died."); 
     GamePanel.startGame(); 
     health = 3; 
    } 

} 
+2

Я чувствую, что сегодня я видел этот точный вопрос ... –

+2

Это точно такой же пользователь, @PakkuDon –

+0

@PakkuDon кажется? Это точный вопрос **. –

ответ

0

Вы забыли экземпляр класса GamePanel ..

Изменить этот GamePanel.startGame();

для этого

GamePanel game = new GamePanel();

game.startGame();

Надеюсь, это поможет.

Смежные вопросы