Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Mit der Kollision von Blöcken hab ich schon längst gelöst, da wird jetzt nicht mehr nur die Geschwindigkeit umgekehr aber Trozdem fliegt er machmal durch eine Block durck Xp
Zum Schläger, ja je mittige desto schneller fliegt er mir is nichts anders eigefallen wie es sonst berechnen könnte...
also die funktion sieht so ausMit der Kollision von Blöcken hab ich schon längst gelöst, da wird jetzt nicht mehr nur die Geschwindigkeit umgekehr aber Trozdem fliegt er machmal durch eine Block durck Xp
unterscheidest du zwischen kollisionen an der x oder y achse?
der ball fliegt wahrscheinlich wegen kleinen freezes(lange frametime) durch die blöcke. das behebt man indem man den ball in kleineren schritten fortbewegt und bei jedem schritt auf kollision prüft.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
void CBall::CheckBlockCollisions() { int left_x = location.x; int left_y = location.y + location.h / 2; int right_x = location.x + location.w; int right_y = location.y + location.h / 2; int top_x = location.x + location.w / 2; int top_y = location.y; int bottom_x = location.x + location.w / 2; int bottom_y = location.y + location.h; for(int block=0; block<g_NumBlocks; block++) { if(CheckPointInRect(top_x, top_y, g_Block[block].location)) { HandleBlockCollision(block); yVel = -yVel; } if(CheckPointInRect(bottom_x, bottom_y, g_Block[block].location)) { HandleBlockCollision(block); yVel = -yVel; } if(CheckPointInRect(left_x, left_y, g_Block[block].location)) { HandleBlockCollision(block); xVel = -xVel; } if(CheckPointInRect(right_x, right_y, g_Block[block].location)) { HandleBlockCollision(block); xVel = -xVel; } } } |
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
bool CBall::CheckPointInRect(int x, int y, SDL_Rect rect) { if((x >= rect.x) && (x <= rect.x + rect.w) && (y >= rect.y) && (y <= rect.y + rect.h)) return true; return false; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CrazyPlayer« (09.04.2010, 16:40)
Community-Fossil
Community-Fossil
häää? check ich nicht ganz.....das tut es doch nicht wenn du die frametime bei jeder bewegung mit der geschwindigkeit multiplizierst.
Community-Fossil
Quellcode |
|
1 |
location.x += xVel * FPS.get_ticks(); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CrazyPlayer« (09.04.2010, 21:22)
Werbeanzeige