Что не так в этом простом игровом цикле Java? - PullRequest
0 голосов
/ 20 июля 2011

Я пытался выяснить это или найти другой способ около 3 дней, но я не могу заставить его работать ... Basic Я конвертирую игровой апплет в приложение, но не могуполучить рабочий цикл игры.Кроме того, в NetBeans я создал окно, но оно не отображается, даже если я установил его в Visible.Если бы вы получили учебное пособие по созданию цикла «Простая игра», это было бы здорово.Я в отчаянии, пожалуйста, помогите мне!

Вот код моего основного класса

package MainClass;

import javax.swing.*;

 public class MainClass implements Runnable{

    Painter panel = new Painter();
    JavaPowderToy Screen = new JavaPowderToy();
    Thread t = new Thread();

    public void run()
    {

    Initialize();

    while(true)
    {
        try
        {
            panel.Paint();
            Thread.sleep(15);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }   
    }

    }

void MainClass()
{
  t.start();  

}

public static void main(String[] args) {
    MainClass Java = new MainClass();



}

private void Initialize()
{
    panel.InitializePainting();
    new Window().setVisible(true);
}

}

Вот мой класс художника:

    package thejavapowdertoy;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Toolkit;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.image.BufferedImage;
    import javax.swing.JPanel;


    public class Painter extends JPanel implements KeyListener{



    BufferedImage buffer;

   public Painter()
    {
        setIgnoreRepaint(true);
        addKeyListener(this);
        setFocusable(true);
    }

   public void InitializePainting()
   {

   }

   public void Paint()
   {
       Graphics2D b = buffer.createGraphics();
       Graphics2D g = (Graphics2D)this.getGraphics();
       b.setColor(Color.red);
       b.fillRect(50, 50, 50, 50);
       b.dispose();
       g.drawImage(buffer, 0, 0, this);
       Toolkit.getDefaultToolkit().sync();
       g.dispose();
   }

    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public void keyPressed(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}

Спасибо

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Ваш MainClass реализует Runnable, поэтому я предполагаю, что вы хотите, чтобы он выполнялся потоком. Тем не менее, поток t этого не знает.

Вам необходимо передать экземпляр MainClass в конструктор потока: new Thread(this);

Кроме того, ваша панель Painter не подключена к окну, которое вы создаете, и поэтому она не будет видна. Попробуйте создать JFrame или JWindow и поместить в него художника.

0 голосов
/ 20 июля 2011
void MainClass()
{
  t.start();  

}

Это не конструктор, а метод!Это потому, что поток не запущен.Удалите void

, а также посмотрите другие ответы.В основном у вас есть две темы.Один MainClass сам, а затем t внутри MainClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...