Schnellste Kollisionsabfrage zw. Terrain & viiielen Spri
Übersicht

![]() |
x-pressiveBetreff: Schnellste Kollisionsabfrage zw. Terrain & viiielen Spri |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe nun schon den ganzen Tag auf allen Seiten und Foren nach Beispielen gesucht, konnte aber leider inden.
Ich habe ein zerklüftetes Terrain, das in der Mitte eine Senke hat, in der eine Kannone steht. Das Ding rotzt Ammo raus ohne Ende ![]() Die Schüsse sind als Types angelegt, ich loope bei jedem Durchlauf durch die Types und aktualisiere die Schüsse. Ich müsste genau wissen, WELCHES der Sprites mit dem Terrain kollidiert ist, damit ich es löschen kann. EntityCollided kann ich wohl vergessen, da zu langsam, und Collisions() liefert ja nur zurück, welche ObjektTYPEN kollidiert sind. Irgendwie stehe ich auf dem Schlauch -oder sehe ich den Wald vor lauter Bäumen nicht..? ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Lösung? Nicht mal einen Ansatz? ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Arcanes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach der Standartprozedur hast Du es schon ausprobiert, ja? und das ist wirklich zu langsam? hm...
[/edit] Vielleicht könntest Du an der Sprite-Position einfach die Terrain-Höhe überprüfen? - und wenn die niedriger ist als die Höhen-Position des Sprites, ist es ne Kollision... *so ganz spontan ungetestete Idee* ![]() |
||
tHey pUt mE iN a rOuNd rOom tO diE
User posted image http://www.myownmalice.de.vu |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, im Moment gehe ich so vor:
Code: [AUSKLAPPEN] ;CHECK GROUND HITS FOR i% = 1 TO CountCollisions(Terrain) For GunShot.TGunShot = Each TGunShot ;HIT GROUND? -REMOVE! If GunShot\Obj = CollisionEntity(Terrain,i) FreeEntity GunShot\Obj Delete GunShot End If NEXT NEXT Aber hier muß ich ebenn für jede erfolgte Kollision durch alle Schüsse loopen. Bei 50 Schüssen im Spiel und 10 Kollisionen wären das schon 500 loops. Geht bestimmt besser -aber wie..? |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm mit TerrainY die Terrain Höhe bei der Position des Schusses abfragen. Ist TerrainY höher als EntityY vom Schuss, so wird dieser gelöscht. Da musst du aber auch alle durchgehen und das nicht nur bei ner Kollision, sondern immer. Ich bezweifle also, dass das schneller ist - aber probieren kannst du es ja mal... | ||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, da ich sowieso bei jedem Frame durch alle Schüsse loopen muß, um diese zu bewegen, habe ich das jetzt so gemacht:
Code: [AUSKLAPPEN] ;MOVE GUN SHOTS for GunShot.TGunShot = each TGunShot ;MOVE SHOT MoveEntity GunShot\Obj,0,0,-shotSpeed ;TERRAIN COLLISION? -REMOVE! If EntityCollided(GunShot\Obj, CT_TERRAIN) FreeEntity GunShot\Obj Delete GunShot End If Next So sind also keine Extra-loops nötig, und EntityCollided() löst ja keine Kollisionsabfrage aus, sondern schaut nur in einer Tabelle nach, soviel ich weiß. Dürfte also ok sein. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group