.[ ČeskéHry.cz ].
Kolize

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Maxfx



Založen: 12. 01. 2013
Příspěvky: 3

PříspěvekZaslal: 13. leden 2013, 18:15:58    Předmět: Kolize Odpovědět s citátem

Zdravím nejde mi porovnat pole nepřátel , když mám dva čtverce tak to funguje ale jak jich tam mám 50 a vykresluji je od shora dolů tak vůbec nic.
dělám to allegru.diky za pomoc

mám strukturu
kód:

struct Enemy {

   
   int x; // souřadnice
   int y; // souřadnice
   int speed; // rychlost
   int w;  // výška spritu 20
   int h;  // šířka spritu 20

   }PocetNepratel[POCET_NEPRATEL];

kód:

colision = false;
   for( int i = 0; i < POCET_NEPRATEL - 1 ; i++ )
      {
      for( int j = 0 ; j < POCET_NEPRATEL - 1; j++)
         {
                if((PocetNepratel[i].x  == PocetNepratel[j].x ) && 
                  (PocetNepratel[i].y  == PocetNepratel[j].y ) && (i < j))
            {
            colision = true;
            
            //break;
            //return true;
            }
         }

Nevíte jak udělat nejlíp kolize více čtverců ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 671

PříspěvekZaslal: 13. leden 2013, 18:31:33    Předmět: Odpovědět s citátem

kód:
for( int i = 0; i < POCET_NEPRATEL - 1 ; i++ )


nemá to být buď :
kód:
for( int i = 0; i <= POCET_NEPRATEL - 1 ; i++ )

nebo :
kód:
for( int i = 0; i < POCET_NEPRATEL ; i++ )
?

a druhá věc :
kód:

for( int i = 0; i <= POCET_NEPRATEL - 1 ; i++ )
      {
      for( int j = [b]i + 1[/b] ; j <= POCET_NEPRATEL - 1; j++)


Jinak samozřejmě existují metody na urychlení výpočtu kolicí.

Pro začátek by stačila uniformní mřížka. Celý herní svět si pomyslně rozsekáš do čtvercových buněk o stejné šířce. V každé buňce budeš mít pole odkazů na nepřátele, které jsou v ní. Pak ti stačí hledat kolize jen mezi nepřáteli v rámci jedné buňky.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Maxfx



Založen: 12. 01. 2013
Příspěvky: 3

PříspěvekZaslal: 13. leden 2013, 19:12:40    Předmět: Odpovědět s citátem

Houp napsal:
kód:
for( int i = 0; i < POCET_NEPRATEL - 1 ; i++ )


nemá to být buď :
kód:
for( int i = 0; i <= POCET_NEPRATEL - 1 ; i++ )

nebo :
kód:
for( int i = 0; i < POCET_NEPRATEL ; i++ )
?

a druhá věc :
kód:

for( int i = 0; i <= POCET_NEPRATEL - 1 ; i++ )
      {
      for( int j = [b]i + 1[/b] ; j <= POCET_NEPRATEL - 1; j++)


Jinak samozřejmě existují metody na urychlení výpočtu kolicí.

Pro začátek by stačila uniformní mřížka. Celý herní svět si pomyslně rozsekáš do čtvercových buněk o stejné šířce. V každé buňce budeš mít pole odkazů na nepřátele, které jsou v ní. Pak ti stačí hledat kolize jen mezi nepřáteli v rámci jedné buňky.


Toto je mocné Smile
kód:
 for( int j = [b]i + 1[/b] ; j <= POCET_NEPRATEL - 1; j++)

akorád nevím jak to použít .
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 671

PříspěvekZaslal: 13. leden 2013, 19:40:12    Předmět: Odpovědět s citátem

[ b ]i + 1[ /b ] to mělo udělat jen tučné písmo, jen to nefunguje s tagem code.

Momentálně kontroluješ až v ifu situaci, jestli náhodou nepočítáš kolizi dvou objektů dvakrát. Místo toho ale stačí upravit hranice for cyklu.
Pro 6 nepřátel -
pro i = 0, kontroluješ s nepřáteli 1, 2, 3, 4, 5.
pro i = 1, kontroluješ s nepřáteli 2, 3, 4, 5
pro i = 2, kontroluješ s nepřáteli 3, 4, 5 atd.

Stačí v druhém cyklu nezačínat j od nuly, ale od i + 1.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Maxfx



Založen: 12. 01. 2013
Příspěvky: 3

PříspěvekZaslal: 13. leden 2013, 20:09:58    Předmět: Odpovědět s citátem

Houp napsal:
[ b ]i + 1[ /b ] to mělo udělat jen tučné písmo, jen to nefunguje s tagem code.

Momentálně kontroluješ až v ifu situaci, jestli náhodou nepočítáš kolizi dvou objektů dvakrát. Místo toho ale stačí upravit hranice for cyklu.
Pro 6 nepřátel -
pro i = 0, kontroluješ s nepřáteli 1, 2, 3, 4, 5.
pro i = 1, kontroluješ s nepřáteli 2, 3, 4, 5
pro i = 2, kontroluješ s nepřáteli 3, 4, 5 atd.

Stačí v druhém cyklu nezačínat j od nuly, ale od i + 1.


Smile))))) já jsme si říkal , že je to divné Smile))))
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna