[Box2D] Jak sprawdzić czy jest kontakt?
Ostatnio zmodyfikowano 2013-01-01 14:11
ridic14 Temat założony przez niniejszego użytkownika |
[Box2D] Jak sprawdzić czy jest kontakt? » 2012-12-31 14:56:34 Jest taki problem z grą otóż: Mam sobie gracza i wroga którzy nawzajem do siebie strzelają... i tu jest problem bo nie wiem jak sprawdzić kiedy pocisk styka się z celem. Chciałem na początek zrobić tak że jak dotknie "celu" pocisk to odejmuje mu HP, jeśli trafi w cokolwiek innego to usuwam go. Tylko problem że nie mam jak sprawdzić, czy jest "jakaś?, coś?" co pomoże mi to sprawdzić czy nie ma co się łudzić i pisać swoje rozwiązanie? |
|
DejaVu |
» 2012-12-31 15:27:06 Da się to zrobić za pomocą standardowych narzędzi. Przeczytaj tutorial Box2D od deski do deski (dokładniej to sekcja "4.10 Overlap" oraz sekcja "4.11 Contact Manifolds"). |
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-12-31 15:49:34 Gdzie ja taki tutorial znajdę we wszyskich jakie widziałem jakieś klasy im się pochciało robić:/, zamiast jakoś normalnie to zrobić |
|
DejaVu |
» 2012-12-31 15:55:02 |
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-12-31 17:12:49 No na podstawie tutka to taki kod mi się wywala: for( b2ContactEdge * ce = bullet->GetContactList(); ce; ce = ce->next ) { b2Contact * c = ce->contact; endit = c->GetFixtureA()->GetBody()->IsBullet(); std::cout << endit << std::endl; } czyli gra się włącza a przy tej części pisze że System nui |
|
DejaVu |
» 2012-12-31 17:14:41 Bo tutorial pokazuje 'jak używać', a nie 'jak napisać bezpieczny kod'. Sprawdzaj czy wskaźniki są !=NULL zanim cokolwiek z nimi zrobisz dalej. |
|
ridic14 Temat założony przez niniejszego użytkownika |
» 2012-12-31 18:03:13 for( b2ContactEdge * ce = bullet->GetContactList(); ce; ce = ce->next ) { if( ce != NULL ) { b2Contact * c = ce->contact; endit = c->GetFixtureA()->GetBody()->IsBullet(); std::cout << endit << std::endl; } }
To też wywala apilikację A w tym manualu nawet nie wyjaśnili czym jest ten index: bool overlap = b2TestOverlap(shapeA, indexA, shapeB, indexB, xfA, xfB); |
|
Mrovqa |
» 2012-12-31 19:20:14 if( ce != NULL ) { b2Contact * c = ce->contact; endit = c->GetFixtureA()->GetBody()->IsBullet(); std::cout << endit << std::endl; }
|
|
« 1 » 2 |