IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 10. diel - Programovanie jednoduchých Java GUI hier - Detekcia kolízií 2

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
vfsdfsdfdsf
Člen
Avatar
vfsdfsdfdsf:19.1.2014 19:15

Moc dobrý tutorial :) Zkusil jsem si udělat kolize, že se chytač zastaví pokud narazí na čtverec...
kontrolu kolize jsem dělal přímo v metodě move() chytače, která před pohybem kontrolovala, jestli se chytač posunutý o smerX a smerY neprotíná s nějakým se čtverců, pokud se protíná, tak pohyb v dané ose (X nebo Y) nevykoná...

Akorát jsem musel předat referenci na všechny čtverce i chytačovi a celkově mi to přišlo strašně zdlouhavé a přemrštěné... určitě by se to dalo udělat i jednodušeji, tak nad tím teď přemýšlím :)

Navíc vznikl další problém - když se chytač zastavil, tak se mohlo stát, že mezi nim a čtvercem zůstala mezera (třeba 2 pixely), takže jsem musel v cyklu vytvářet nové "masky" chytače posunuté o rychlost-1 a rychlost-2 pixelů daným směrem (přes cyklus) a případně chytače "doposunout" aby byl těsně u čtverce, se kterým koliduje...

Ale ještě jednou moc díky :) Cítím ten progress a čím dál víc věcí, které jsem ze začátku nechápal, mi začalo dávat smysl :)

 
Odpovedať
19.1.2014 19:15
Avatar
vita
Tvůrce
Avatar
Odpovedá na vfsdfsdfdsf
vita:6.2.2014 20:43

Ahoj, tutoriál není dokonalý, ale jsem rád, že ti pomohl.

 
Odpovedať
6.2.2014 20:43
Avatar
Odpovedá na vita
Michal Žůrek - misaz:6.2.2014 21:56

Dokonalý bude až to všechno popíšeš 9/10 tutorialu je jenom kód, což je nezajímavé a hůř se z toho učí. Nezkoumal jsem ostatní, ale tímto stylem by jsi mohl všech 10 dílů sloučit do 2-4 dílů.

 
Odpovedať
6.2.2014 21:56
Avatar
zikako
Člen
Avatar
zikako:21.2.2014 16:17

No tutorial je docela dobrý..
Ale hodilo by se jich tu mnohem více.
Jako v C# sekci tam jsou na hry úžasné:
Třeba nějaké tutoriály na lwjgl a podobné

Odpovedať
21.2.2014 16:17
pospile = enemy :-)
Avatar
jozefekrcho
Člen
Avatar
jozefekrcho:13.3.2014 20:44

Da sa nieco podobne spravit aj pre ine tvary ako Rectangle ? narp kolizia kruhov ? a ak ano akoju mam definovat lebo som skusal RoundRectangle2D ale neviem to vratit ako navratovu hodnotu aby som porovnal okraje ...

 
Odpovedať
13.3.2014 20:44
Avatar
Odpovedá na jozefekrcho
Neaktivní uživatel:13.3.2014 21:27

U kruhů se spočítá délka vektoru mezi středy kruhů. Pokud je menší, než součet poloměrů obou kruhů, tak spolu kolidují. U nepravidelných tvarů se nejprve udělá rectangle okolo tvarů, porovná se kolize mezi nimi a když kolidují, tak se počítají kolize per pixel. Další možná poradí něco víc.

Odpovedať
13.3.2014 21:27
Neaktivní uživatelský účet
Avatar
jozefekrcho
Člen
Avatar
Odpovedá na Neaktivní uživatel
jozefekrcho:14.3.2014 1:41

Mna by hlavne zaujmalo akym povelom ten kruh vytvorim aby som to mohol vraciat v metode lebo je napr drawOval ale nemozem pouzit public Oval dajOkraje() {}... to nejde Oval nevie co je a RoundRectangle tiez nejde jebe ma to neviem ako to mam spravit pomenovat ... keby nieko nieco s tym poradil alebo neaky link na stranku kde je zoznam tvarov co sa daju pouzivat ako Rectangle by som moc ocenil :)

 
Odpovedať
14.3.2014 1:41
Avatar
1Pupik1989
Člen
Avatar
Odpovedá na jozefekrcho
1Pupik1989:14.3.2014 8:58

Dá se to vyřešit, když vytvoříš ještě jeden objekt "CollisionDetec­tion" (tak jsem ho pojmenoval já. A pak jen stačí vytvořit metodu "collide", kde podle vstupních parametrů budeš řešit vztahy a volat podle toho třídy objektů.

public class CollisionDetection{
  public static void main(String[] args) {

  }

  public static boolean collide(Rectangle rect, Ellipse ellipse){
    //zjištění kolize mezi čtyřúhelníkem a elipsou
  }

  public static boolean collide(Rectangle rect, Polygon polygon){
    //zjištění kolize mezi čtyřúhelníkem a mnohoúhelníkem
  }
}

Doufám, že jsem tam nenaplácal nějaký nesmysl. Javu už jsem nějaký pátek neviděl. :D

 
Odpovedať
14.3.2014 8:58
Avatar
Ladislav Ondris:30.4.2014 23:54

Super tutorial :)

Podle mě lepší než u OOP, protože vidím výsledný kód. V OOP jsem často nevěděl, co kam dopsat, byl v tom zmatek, takže jsem si musel stáhnout výslednou práci a zkopírovat :P

ale i tak jsou tyto všechno tutorialy super, klaním se vám, co jste to sepsali, moc nám to pomáhá :)

Odpovedať
30.4.2014 23:54
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
Ladislav Ondris:1.5.2014 20:58

Pokud byste chtěl, aby se váš chytač zastavil o vygenerované čtverce, tak stačí takto poupravit PosluchacCasovace (viz níže) a vytvořit nějaký ten getter a setter ve tříde chytac :)

private class PosluchacCasovace implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        a = chytac.getX();
        b = chytac.getY();
        chytac.move();

        for (int i = 0; i < getPoleCtvercu().length; i++) {
                // if (chytac.getOkraje().intersects(poleCtvercu[i].getOkraje()))
                Rectangle okrajeChytace = chytac.getOkraje();
                Rectangle okrajeCtverce = getPoleCtvercu()[i].getOkraje();
                if (okrajeChytace.intersects(okrajeCtverce)) {
                        chytac.setX(a);
                        chytac.setY(b);
                }
        }
        repaint();
    }
}
Odpovedať
1.5.2014 20:58
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!