Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Maxfx
Založen: 12. 01. 2013 Příspěvky: 3
|
Zaslal: 13. leden 2013, 18:15:58 Předmět: Kolize |
|
|
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 |
|
|
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 13. leden 2013, 18:31:33 Předmět: |
|
|
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 |
|
|
Maxfx
Založen: 12. 01. 2013 Příspěvky: 3
|
Zaslal: 13. leden 2013, 19:12:40 Předmět: |
|
|
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é
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 |
|
|
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 13. leden 2013, 19:40:12 Předmět: |
|
|
[ 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 |
|
|
Maxfx
Založen: 12. 01. 2013 Příspěvky: 3
|
Zaslal: 13. leden 2013, 20:09:58 Předmět: |
|
|
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. |
))))) já jsme si říkal , že je to divné )))) |
|
Návrat nahoru |
|
|
|