2012-05-24 2 views
0

Я пытаюсь создать java-игру, в которой шары случайно выпадают из верхней части экрана, и нам нужно поймать шары, используя улавливатель, который расположен в нижней части экрана.Простая 2D-игра Java

Мне сложно разобраться, как нарисовать это на моем JFrame.

У меня есть класс для моего «ловушки», «шара», «игрового пространства», и я хотел бы собрать все это вместе.

Как нарисовать мой «ловец» на экране?

В настоящее время у меня есть класс «Игра», который выглядит так.

public class Game extends JFrame implements KeyListener { 

GameScreen gameScreen; 
Catcher playerOneCatcher; 

public static void main (String[] args) { 
    new Game(); 
} 

public Game() { 

    super("CATCH"); 
    setSize(640,480); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    setLocationRelativeTo(null); 
    setResizable(false); 
    addKeyListener(this); 


    this.gameScreen = new GameScreen(); 
    this.playerOneCatcher = new Catcher(40, 10); 


} 

Я пытался что-то подобное в моей пропастью классе ...

public void paintComponent(Graphics g) { 
    g.setColor(Color.BLUE); 
    g.fillRect(positionX, positionY, this.width, this.height); 
} 

Однако его не показывает на моем экране.

Любая помощь была бы принята с благодарностью.

+0

Я retagged как «качели», так как это не «игра-развитие», но общая проблема свинга вы имеете. В каком классе ваш подкласс Catcher? Добавили ли вы свой экземпляр Catcher в JFrame? Покажите больше кода. – maksimov

+0

Я добавил еще несколько кода - надеюсь, это делает вещи немного яснее. – user432584920684

+1

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

3

Вам необходимо пересмотреть свою стратегию здесь. Swing - это компонентная структура, в которой большинство компонентов предназначены для создания пользовательских интерфейсов. Эти компоненты не оптимизированы для того, что обычно требуется в играх. Вы хотите посмотреть на двойную буферизацию, спрайты и т. Д. Путь к чтению будет состоять в том, чтобы читать на Graphics2D-классе (или вообще отказаться от Swing!)

Однако, отвечая на ваш вопрос - если Catcher является компонентом Swing - вам нужно добавить его к «родительскому» компоненту, например как это:

this.add(playerOneCatcher); 

То же самое относится к gameScreen но из вашего фрагмента кода не очевидно, что этот компонент. Надеюсь, это поможет.

Кроме того, проверить это для некоторых идей: 2D Java Game. Moving sprite above tiled images

2
  1. Вы звоните по телефонам: super.paintComponent (g)? Это может вызвать несколько ошибок.
  2. Вы звоните invalidate() или repaint(), чтобы перекрасить ту вещь, которую вы нарисовываете? Надеюсь, у вас есть специальный JComponent, и вы не используете JFrame. Это не хорошо.
Смежные вопросы