Forum » Programiranje » Collision
Collision
matej94 ::
lista sovraznih ladij so ladje ki so zapisane v vektorju;
nato sledi pitagorov izrek preverjanja (x je enako x osi , y je enako y osi in r je širina ladje neka oznaka direction je pa smer so pa stopinje od 0-360 in od 360 do 0) 2 varijaniti tako da če kdo ve kaj naj dam notri samo da se ne prekrivata da zadaneta in ni nič se pripročam da mi pove
Takole izgleda moja koda.
Imam pa vprašanje glede collisiona ne znam ga razrešeti, da se objekta nebi prekrivala:
nato sledi pitagorov izrek preverjanja (x je enako x osi , y je enako y osi in r je širina ladje neka oznaka direction je pa smer so pa stopinje od 0-360 in od 360 do 0) 2 varijaniti tako da če kdo ve kaj naj dam notri samo da se ne prekrivata da zadaneta in ni nič se pripročam da mi pove
Takole izgleda moja koda.
Imam pa vprašanje glede collisiona ne znam ga razrešeti, da se objekta nebi prekrivala:
for (int i=0; i<listasovraznih_ladij.size(); i++) { double strelx = listasovraznih_ladij[i]->ladx - ship->x; double strely = listasovraznih_ladij[i]->lady - ship->y; double strelr = listasovraznih_ladij[i]->ladr + ship->r; if(strelx*strelx + strely*strely <= strelr*strelr) {listasovraznih_ladij[i]->trk=1; //ship->zdravje=ship->zdravje-10; if((ship->direction>0&&ship->direction<180)||(ship->direction>(-360)&&ship->direction<(-180))) { ship->x=ship->x-0.006; ship->y=ship->y-0.006; listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx; listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady; } else if((ship->direction==0||(ship->direction==(-360)))) { ship->x=ship->x-0.006; ship->y=ship->y+0.006; listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx; listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady; } else if((ship->direction==180||(ship->direction==(-180)))) { ship->x=ship->x-0.006; ship->y=ship->y+0.006; listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx; listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady; } else { ship->x=ship->x+0.006; ship->y=ship->y+0.006; listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx; listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady; } } }
Senitel ::
-Vektorjev še niste obdelal pri matematiki?
-Eksaktno testiranje vrednosti s plavajočo vejico je precejšen "no no" (ship->direction==180).
-Kaj od tega naj bi ustavilo ladjo? Tole:
Kakor zgleda ti enostavno rukneš ladjo za 0.006 "stran" (pod nekimi pogoji). Nič pa ne narediš, da bi normalen update potem kaj vedel o tem. Ti bi moral hranit, kje se ladja nahaja in kam se ladja giblje. In ko se ladja zabije narediš nekaj s tisto vrednostjo kam se ladja giblje.
-Eksaktno testiranje vrednosti s plavajočo vejico je precejšen "no no" (ship->direction==180).
-Kaj od tega naj bi ustavilo ladjo? Tole:
listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx; listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady;
Kakor zgleda ti enostavno rukneš ladjo za 0.006 "stran" (pod nekimi pogoji). Nič pa ne narediš, da bi normalen update potem kaj vedel o tem. Ti bi moral hranit, kje se ladja nahaja in kam se ladja giblje. In ko se ladja zabije narediš nekaj s tisto vrednostjo kam se ladja giblje.
WarpedGone ::
Mene zanima iz čigave riti je prišla ideja o spremenljivkah sestavljenih iz treh ali več polnih besed, skupaj dolgih čez 20 znakov?
Pa še vse undercased in brez presledkov med operatorji da je vse skup ja ultra neberljivo.
A to je kak supermoderen način kako narest program na oko ful zapleten in advanced, ki ga zarad moje starosti še niso učil, ko sm js v šolo hodu?
Ljudje smo najprej vizualne mašine, šele nato logične. Če je koda napisana tako, da je struktrua karseda vizuelno predstavljena je laže zadevo razumet.
Tvoja koda mal 'polepšana', brez vsebinskih sprememb:
Sedaj se lažje vidi da imaš na koncu vsakega IF bloka neumnost: prirejanje "A postane A".
Collision detection ni direkt trivialna zadeva, zato priporočam da se jo lotiš najprej na papirju ali psevdokodi - najprej zadevo logično pravilno razpucaj potem pa to prevedi v kodo.
Pa še vse undercased in brez presledkov med operatorji da je vse skup ja ultra neberljivo.
A to je kak supermoderen način kako narest program na oko ful zapleten in advanced, ki ga zarad moje starosti še niso učil, ko sm js v šolo hodu?
Ljudje smo najprej vizualne mašine, šele nato logične. Če je koda napisana tako, da je struktrua karseda vizuelno predstavljena je laže zadevo razumet.
Tvoja koda mal 'polepšana', brez vsebinskih sprememb:
for (int i = 0; i < Ladje.size(); i++) { double StrelX = Ladje[i]->LadY - Ship->X; double StrelY = Ladje[i]->Lady - Ship->Y; double StrelR = Ladje[i]->LadR + Ship->R; if(StrelX*StrelX + StrelY*StrelY <= StrelR*StrelR) { Ladje[i]->trk = 1; //Ship->zdravje -= 10; if((Ship->direction > 0 && Ship->direction < 180) || (Ship->direction > (-360) && Ship->direction < (-180))) { Ship->X -= 0.006; Ship->Y -= 0.006; Ladje[i]->LadY = Ladje[i]->LadY; Ladje[i]->Lady = Ladje[i]->Lady; } else if((Ship->direction == 0 || (Ship->direction == (-360)))) { Ship->X -= 0.006; Ship->Y += 0.006; Ladje[i]->LadX = Ladje[i]->LadX; Ladje[i]->Lady = Ladje[i]->LadY; } else if((Ship->direction == 180 || (Ship->direction == (-180)))) { Ship->X -= 0.006; Ship->Y += 0.006; Ladje[i]->LadX = Ladje[i]->LadX; Ladje[i]->LadY = Ladje[i]->LadY; } else { Ship->X += 0.006; Ship->Y += 0.006; Ladje[i]->LadX = Ladje[i]->LadX; Ladje[i]->LadY = Ladje[i]->LadY; } } }
Sedaj se lažje vidi da imaš na koncu vsakega IF bloka neumnost: prirejanje "A postane A".
Collision detection ni direkt trivialna zadeva, zato priporočam da se jo lotiš najprej na papirju ali psevdokodi - najprej zadevo logično pravilno razpucaj potem pa to prevedi v kodo.
Zbogom in hvala za vse ribe
matej94 ::
-Vektorjev še niste obdelal pri matematiki?
-Eksaktno testiranje vrednosti s plavajočo vejico je precejšen "no no" (ship->direction==180).
-Kaj od tega naj bi ustavilo ladjo? Tole:
listasovraznih_ladij[i]->ladx=listasovraznih_ladij[i]->ladx;
listasovraznih_ladij[i]->lady=listasovraznih_ladij[i]->lady;
Kakor zgleda ti enostavno rukneš ladjo za 0.006 "stran" (pod nekimi pogoji). Nič pa ne narediš, da bi normalen update potem kaj vedel o tem. Ti bi moral hranit, kje se ladja nahaja in kam se ladja giblje. In ko se ladja zabije narediš nekaj s tisto vrednostjo kam se ladja giblje.
- vektorjev nismo delali
- dejansko je trenutno narejeno da če se ladjica zabije pod kotom 180stopinj jo bi zabilo nazaj za -0-06/-0.06 če pa bo pod drugim stopinjam se pa samo spremieni premikanje to je to,meni se zdi logično da jo malo nazaj prestavi, saj če pomislim kako pa naj naredim da jo ne prevozi skozi njo, druge iddeje nimam
matej94 ::
Dejansko rad bi samo to da se nebi prekrivalala ob trku, trenutno se ne prekrivata samo problem je ker jo stran odbije in to mi ne deluje realno.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | T-2 DNS problemOddelek: Omrežja in internet | 1784 (1379) | Ghost007 |
» | java Double.valueOfOddelek: Programiranje | 1408 (1302) | Spura |
» | [C++] Kako optimizirati?Oddelek: Programiranje | 2206 (1918) | Vesoljc |
» | GrafikaOddelek: Programiranje | 1695 (1047) | aaaaa93 |
» | Odzivni čas v nanosekundahOddelek: Omrežja in internet | 1388 (1114) | Spc |