IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Java Game a KeyListener

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Adamator
Člen
Avatar
Adamator:3.1.2014 12:16

Ahoj! Dělám na Java podobné tennisu. Spočívá to v tom že každý hráč ovládá 1 plošinku (obdélník) a spolu s druhým hráčem si pinkají s míčkem... K pohybu hráčů používám KeyListner který je v jejich třídě:

public void update() {
                if (y <= 5)
                        y = 5;
                if (y >= 500 - 120)
                        y = 500 - 120;
        }

        public void render(Graphics g) {
                g.setColor(color);
                g.fillRect(x, y, w, h);
        }

        @Override
        public void keyPressed(KeyEvent e) {
                if (b) {
                        if (e.getKeyCode() == KeyEvent.VK_W)
                                y -= 15;
                        if (e.getKeyCode() == KeyEvent.VK_S)
                                y += 15;
                } else if (b == false) {
                        if (e.getKeyCode() == KeyEvent.VK_UP)
                                y -= 15;
                        if (e.getKeyCode() == KeyEvent.VK_DOWN)
                                y += 15;
                }
        }

KeyListener přidávám zde:

public RenderLayer() {
        super();

        isRunning = false;
        isGameOver = false;

        setSize(new Dimension(800, 500));

        pl1 = new Player(this, 5, 500 / 2 - 120 / 2, Color.RED, true);
        pl2 = new Player(this, 800 - 40, 500 / 2 - 120 / 2, Color.BLUE, false);
        addKeyListener(pl1);
        addKeyListener(pl2);
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(true);

1 otázka:

V mé hře se vyskytuje problém že hráči nemohou ovládat svou plošinku zárovně ... Když držím "W" i klávesu "Nahoru" zároveň, pohybuje se jen ta plošinka u které jsem zmáčkl klávesu dřív... Určitě je na to nějaký příkaz jak to udělat aby mohli hráči ovládat svou plošinku nezávisle, ale já nevím jaký.

2. otázka:

Když jednomu hráči míček spadne, odečte se mu boda míček se nastaví na střed a hned lítá znova sem a tam... Potřebuji aby se míček zastavil, na obrazovce se vypsal nápis "3" pak "2" pak "1" a pak by sem míček rozletěl... Dělám to přes vícevláknové prog. (update(), render()). Nešlo by to pozastavení udělat nějak přes Thread.sleep(2000)??? nebo si musím vytvořit timer... Nějak mi to přes ten timer blbne...

Děkuji za odpovědi!!! :)
Adam 13 let.

 
Odpovědět
3.1.2014 12:16
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Adamator
David Hartinger:3.1.2014 17:20

S těmi klávesami současně to můžeš vyřešit tak, že si uděláš 4 proměnné typu boolean (např. pro ovládání klávesami WS IK proměnné stisknutoW, stisknutoS, stisknutoI, stisknutoK). Do proměnných dáš ze začátku false.

V metodě KeyPressed dáš vždy té proměnné true pokud se stiskla její klávesa. V metodě keyRelease nastavíš false pokud se stiskla tato klávesa.

Nyní máš informace o tom, zda je nějaká klávesa zmáčknutá nebo ne. Mělo by to fungovat i přes sebe. Reagovat na proměnné budeš v herní smyčce a posouvat podle toho pálky.

Co se týče vlákna s aplikací, raději bych to viděl v nějakém Timeru s pevným intervalem. Odpočet tam potom uděláš jednoduše. Je tu na to tutoriál, koukni se: http://www.itnetwork.cz/java/swing

Líbí se mi, co ve svém věku děláš. Jestli chceš, mohu publikovat nějaké hry v Javě, co tu mám rozdělané, aby ses podíval, jak se to může řešit.

Nahoru Odpovědět
3.1.2014 17:20
New kid back on the block with a R.I.P
Avatar
Adamator
Člen
Avatar
Odpovídá na David Hartinger
Adamator:3.1.2014 17:53

Děkuji moc!!! Hned jsem to vyzkoušel a fungovalo to výborně... Dokonce to běželo i plynuleji než předtím. Předtím byl pohyb takový sekavý. Teď je to super. Fakt moc děkuju.
Ten timer se mi podařilo vyřešit asi 20 min po napsání dotazu. Takže to je taky v pohodě. Ještě jsem si všechny tutoriály neprošel, z důvodu toho že se teď soustředím na tuhle hru. Už jsem ji jednou dělal přes XNA GS a povedlo se mi to. Jenže to nešlo spustit na všem počítačích tak jsem ted zkusil přeš Javu.
Co se týče těch aplikací bylo by to určitě skvělé. Ještě mě napadlo, že když tu je "Kritika webů" tak co takhle "Kritika aplikací", kde by každý mohl dát svou aplikaci ve spustitelném formátu a ostatní by si ji mohli zkusit.

Děkuji moc za pomoc!!! (Určitě ji budu potřebovat víckrát a tento server je na tohle skvělý :D)

Adam. 13 let.

 
Nahoru Odpovědět
3.1.2014 17:53
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Adamator
David Hartinger:3.1.2014 17:57

Projekt můžeš vložit do tématu Inkubátor, to je vlastně kritika aplikací. Budeme moc rádi, když tu nějaké své aplikace publikuješ, určitě zas pomohou ostatním.

Nahoru Odpovědět
3.1.2014 17:57
New kid back on the block with a R.I.P
Avatar
Adamator
Člen
Avatar
Odpovídá na David Hartinger
Adamator:3.1.2014 17:58

Yo. Vynasnažím se.

 
Nahoru Odpovědět
3.1.2014 17:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.