[Allegro] Kolizja cd.
Ostatnio zmodyfikowano 2012-01-07 10:53
Aclber Temat założony przez niniejszego użytkownika |
[Allegro] Kolizja cd. » 2012-01-05 15:24:40 Witam. Mam problem z kolizją. Jeśli mam ustawiony ruch gracza na 32 px to kolizja występuje tylko ruch jest trochę "kwadratowy", gdy zmniejszę FPS (timer = al_create_timer(1 / FPS); ). Muszę zmienić bo na poziomie 1/60 FPS gracz bardzo szybko chodzi. Jednak chciałbym mieć ruch gracza o 1 px ale znowu kolizja nie występuj,próbowałem kilka zmieniać wartości do kolizji i niestety mi jakoś nie wychodzi.
Ma ktoś jakiś pomysł ? |
|
Winner |
» 2012-01-05 17:22:08 Taki sam problem ja ja masz :) Ja go wczoraj rozwiązałem, musisz używać funkcji getpixel. |
|
SeaMonster131 |
» 2012-01-05 22:03:50 musisz używać funkcji getpixel |
A co jeśli masz 5 milionów kolorów? A robienie pętli for nie będzie zbyt wydajne. Kolizje na początku jest trudno zrobić. Ale trzeba przy tym porządnie przysiąść, logicznie myśleć, mieć cierpliwość, aż w końcu się uda. Każde następne zrobienie kolizji będzie łatwiejsze. Nie do końca wiem, o co Tobie chodzi tutaj akurat, ale zarzuce kolizją z mojej tam innej gry: Player.ymap = int(( cameraY ) / 200 + 2 ); Player.xmap = int(( cameraX ) / 200 + 2.2 );
if( map[ Player.ymap ][ Player.xmap ] == 1 ) cout << "Gracz znajduje sie na kafelku 1";
200 to szerokość i wysokość kafelka (czyli u Ciebie chyba 32), a te 2 oraz 2.2 to ilość kafelków od brzegu ekranu. Gracz znajduje się na środku ekranu, dlatego u mnie trzeba dodać te kafelki :) |
|
Aclber Temat założony przez niniejszego użytkownika |
» 2012-01-06 21:19:33 Niestety dalej nie działa mi ta kolizja. Muszę mieć ruch na 1 px bo wtedy wygląda płynnie. Ma ktoś może jakiś pomysł jak to poprawić ?
|
|
hincu |
» 2012-01-06 21:35:48 trzymaj moja funkcje pisana pod sfml ale to nie powinno tobie w niczym przeszkadzac : P bool Collision( Character & TestCharacter, Object & TestObj ) { if( (( TestCharacter.CharacterGFX.GetPosition().x >= TestObj.ObjectGFX.GetPosition().x && TestCharacter.CharacterGFX.GetPosition().x < TestObj.ObjectGFX.GetPosition().x + TestObj.GFX.GetWidth() ) ||( TestObj.ObjectGFX.GetPosition().x >= TestCharacter.CharacterGFX.GetPosition().x && TestObj.ObjectGFX.GetPosition().x < TestCharacter.CharacterGFX.GetPosition().x + TestCharacter.GFX.GetWidth() ) ) && (( TestCharacter.CharacterGFX.GetPosition().y >= TestObj.ObjectGFX.GetPosition().y && TestCharacter.CharacterGFX.GetPosition().y < TestObj.ObjectGFX.GetPosition().y + TestObj.GFX.GetHeight() ) ||( TestObj.ObjectGFX.GetPosition().y >= TestCharacter.CharacterGFX.GetPosition().y && TestObj.ObjectGFX.GetPosition().y < TestCharacter.CharacterGFX.GetPosition().y + TestCharacter.GFX.GetHeight() ) ) ) return true; return false; }
|
|
akwes |
» 2012-01-06 21:59:40 @hincu
ale to nie jest per pixel, chyba że nie chodzi autorowi o tak dokładną kolizję :P ? |
|
hincu |
» 2012-01-06 22:13:40 z tego co ja rozumiem to chce miec poruszanie postacia o 1px wiec kolizja per pixel nie musi takowa byc : P niech najpierw zobaczy jak dziala podstawowa kolizja aabb i wtedy moze cos mu wejdzie do glowy : P no i kup sobie jakis slownik j polskiego, jakos nikt nie moze zrozumiec twojego problemu w tym ja : P |
|
Aclber Temat założony przez niniejszego użytkownika |
» 2012-01-07 08:59:11 Słownik języka polskiego polecam Tobie, ponieważ nie zauważyłem abyś pisał poprawnie po polsku. Temat był o allegro, więc bezsensowne wklejanie kodu z sfml nic nie wniosło pożytecznego do tego tematu. |
|
« 1 » 2 |