NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: JavaFX EventHandlery

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

Aktivity
Avatar
pk-grok
Člen
Avatar
pk-grok:6.2.2018 11:45

Ahoj,
Předem bych chtěl říct že jsem v programování dost špatnej, tak semnou mějte strpení.

Mám třídu, která implementuje EventHandler<Ke­yEvent> a chtěl bych, aby zároveň implementovala MouseEvent.
Bohužel to nejde a jediný způsob co jsem našel je nahradit to vyšší třídou Event. To my ale zase neumožní v moji upravené metodě handle dostat se ke konkrétním datům KeyEventu nebo MouseEventu.

Můj kód:

public class player implements EventHandler<KeyEvent> {
    private int positionX=64*10;
    private int positionY=64*10;



    private boolean up = false;
    private boolean down = false;
    private boolean left = false;
    private boolean right = false;

    @Override
    public void handle(KeyEvent event)
    {


        if(event.getEventType()==KeyEvent.KEY_PRESSED)
        {

                switch(event.getCode())
                {
                    case UP : up = true;break;
                    case DOWN : down=true;break;
                    case LEFT: left = true; break;
                    case RIGHT: right = true; break;
                }
        }

        if(event.getEventType()==KeyEvent.KEY_RELEASED)
        {

                switch(event.getCode())
                {
                    case UP : up = false;break;
                    case DOWN : down=false;break;
                    case LEFT: left = false; break;
                    case RIGHT: right = false; break;
                }
        }
    }

handler pak registruju na scénu:

scene.setOnKe­yPressed(hrac);
scene.setOnKe­yReleased(hrac);
hrac je instance třídy player

podobný problém

Editováno 6.2.2018 11:46
 
Odpovědět
6.2.2018 11:45
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.2.2018 12:16

No to je logické, že ti to neumožní...
Zkus si představit situaci z dědičnosti:

Máš dceru, která umí číst
Máš syna, který umí psát
Jejich taťka je tupý, jako kalousek.

Oba sourozenci po taťkovi zdědili všechny jeho vlastnosti, co kdy uměl (polykat, spát, chodit atd.)
Ale rozšířili si své schopnosti. Jeden o čtení, druhý o psaní.

No a kdybych měl použít to, o co ty se snažíš, tak bych si vybral taťku, který nikdy neuměl ani číst, ani psát a ty se divíš, že to nejde.
To jen, abys pochopil, o jakou blbost se snažíš.

Jinak k tvému problému. Nevidím co je špatného mít samostatné posluchače jak pro klávesy, tak pro myšku. Oba právě pracují úplně jinak. Už z logiky věci - proč by si měl keyEvent uchovávat nějaké pozicování? Mu jsou souřadnice na prd. Nikdy nebudeš potřebovat vědět, kde která klávesa leží.

Hlavně není zrovna čisté všechno házet dohromady. Využíj toho, že Java programuje objektově a vytvoř si klidně dvě metody. Jednu pro keyEvent, druhou pro mouseEvent.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
6.2.2018 12:16
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
pk-grok
Člen
Avatar
pk-grok:6.2.2018 12:36

To vím že z Eventu to nedostanu.
Asi ještě uplně nemám srovnané, jak přesně event handlery fungují.

Ale mám třídu hráče, který by měl mít handler na klávesy pro pohyb a handler na myš pro změny směru pohledu.
Ty handlery musím registrovat vždy na scénu?

 
Nahoru Odpovědět
6.2.2018 12:36
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.2.2018 12:56

jj, pokud využíváš více scén, tak jo.

Nahoru Odpovědět
6.2.2018 12:56
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
pk-grok
Člen
Avatar
pk-grok:6.2.2018 13:27

Problém jsem vyřešil. (škoda, že jsem na tom zabil asi tak 15 hodin googlení)
Teď jsem zjistil, že když jsem se v konstruktoru hráče pokoušel registrovat do scény handlery, tak v té době ještě scéna nebyla v dané proměnné :-(.

Děkuji za rady :-)

 
Nahoru Odpovědět
6.2.2018 13:27
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.2.2018 14:01

to ti muselo v tom případě vyhazovat null pointer...

Nahoru Odpovědět
6.2.2018 14:01
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
pk-grok
Člen
Avatar
pk-grok:6.2.2018 14:07

Toho jsem si nevšimnul, ale ano, je tam.

 
Nahoru Odpovědět
6.2.2018 14:07
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:6.2.2018 14:17

:) tak příště s tím pracuj. Výpisy tě navedou ke všem běhovým chybám. Horší jsou ty logické. Na ty většinou nemáš žádná vodítka.

Nahoru Odpovědět
6.2.2018 14:17
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
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 8 zpráv z 8.