Új hozzászólás Aktív témák

  • Oppenheimer

    nagyúr

    Előbb rosszul indultam neki az egész gombos mókának. Most újrakezdtem. A GameArea osztály megvalósítja a Runnable interfacet, és a run metódusában 20ms-onként meghívogatja a LeftPanel doJob metódusát. Mikor elindul a program, akkor egyből elindul a GameArea szállja is, ezért a LeftPanel threadRunning attribútumát true-val inicializálom. (Később majd hozzáadok egy start gombot, amire az első gombnyomás után setEnabled(false) metódust meghívom és elindítja a GameArea szállját, de ezt majd csak akkor, ha pause/resume működik.)

    Akkor jöjjön a kód:

    public class LeftPanel extends JPanel implements ActionListener {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private JButton pause;
    private boolean threadRunning;

    public LeftPanel () {
    threadRunning = true;
    pause = new JButton();
    pause.setBackground(Color.CYAN);
    pause.addActionListener(this);
    pause.setText("Pause");
    pause.setVisible(true);
    this.add(pause);

    setFocusable(true);
    pause.setFocusable(true);
    }


    public synchronized void doJob () throws InterruptedException {
    while (!threadRunning) {
    pause.setText("Resume");
    wait();
    }
    pause.setText("Pause");
    notify();
    }

    public void actionPerformed(ActionEvent ae) {
    threadRunning = !threadRunning;
    }

    }

    Most olyat produkál, hogyha rányomok a gombra, akkor a Pauseról Resume feliratra vált, és megállnak az ellenséges űrhajók. Újbóli kattintgatásra marad a Resume felirat a gombon, és nem folytatódik a játék. Természetesen én a saját űrhajómmal már az elején se tudok mozogni. Valaki tudja erre a 2 problémára a megoldást?

    Kiegészítésként itt a GameArea run() metódusa:
    public void run() {
    long startTime = System.currentTimeMillis();
    long beforeTime = startTime;
    try {
    while (!Finished) {
    repaint();
    animator.animationCycle();
    rightPanel.refresh(player.getHealth(), player.getBaseHealth(), player.hasArmor());
    leftPanel.doJob();
    //MEGCSINÁLNI A JÁTÉKMECHANIKÁT

    //Thread.sleep(20 - (System.currentTimeMillis() - beforeTime));

    Thread.sleep(19);










    beforeTime = System.currentTimeMillis();
    }
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

Új hozzászólás Aktív témák