Seite 2 von 5
Verfasst: 01.10.2004 19:09
von Megaborsti
Du könntest auch einfach die Kreiskollision von Lars verfeinern.
Einfach 3-10 [?] wichtige Ecken oder so an deinem Raumschiff suchen und da nen kleinen Kollisionskreis hinpflanzen. Dann immer alle Kreise nacheinander überprüfen, wenn einer getroffen wird, wurde das Raumschiff getroffen (Überaschung

).
Du musst natürlich drauf achten, dass du die Kugel auch richtig mit dem Rauschiff mitdrehst, ist aber net so schwer.
Diese Art der Kollisionsüberprüfung ist (wenn sie gut gemacht wird) genauso gut wie pixelgenau, nur eben VIEL SCHNELLER, weil es ja nur n paar Koordinatenberechnungen und Kreiskollisionen sind.
Man kann das auch noch verfeinern und nur wichtige Pixel statt Kreise überprüfen (wenn das Raumschiff eh schon klein ist).
Versuchs mal, viel Glück, hab selber leider keine zeit mehr dir n snippet zu machen, kriegst du aber bestimmt auch selber hin

Verfasst: 18.11.2004 15:55
von orange-blue
Hallo! Ich habe nun das selbe Problem, wobei ich aber kein Raumschiff hab sondern ein Panzer. Wenn ich jetzt einen Panzer abschieße, will ich aber nicht das ich 10 Pixel daneben schieß und der Panzerexplodiert trotzdem. Außerdem hab ich mehrere veschiedene Panzer und kann deshalb nicht für jeden einzelnen Panzer die Methode von Lars verfeinern.
Gibt es eine Möglichkeit so eine Pixelkollision mit Sprite3d zu reallisieren oder eine Möglichkeit ein Sprite ohne Rotatesprite zu drehen?
PS: Da es den thread schon gibts wollt ich jetzt keinen neun machen.
Verfasst: 18.11.2004 16:29
von Kaeru Gaman
die idee, mit dem 3D-Sprite in normalen sprite fand ich schon ganz gut
man könnte doch auf das GRAB verzichten, wenn man die ausgabe des Sprite3D auf ein normales Sprite umleitet (oder denke ich da jetzt falsch ?)
hab im moment keine zeit, könnte es aber bis morgen/übermorgen mal austesten...
Verfasst: 18.11.2004 17:14
von orange-blue
Wie meinst du das mit dem umlenken?
Verfasst: 18.11.2004 17:26
von Kaeru Gaman
wie gesagt, testen kann ichs nicht sofort
aber probier mal:
Code: Alles auswählen
CreateSprite(Nummer, Breite, Höhe)
UseBuffer(Nummer)
Start3D
RotateSprite3D(DeineNummer,Winkel,Modus)
DisplaySprite3D(DeineNummer,0,0) ;<-in die oberste ecke des normalen sprite
Stop3D
UseBuffer(-1) ; wieder screen-ausgabe
DisplayTransparentSprite(Nummer,X,Y)
damit müsste es eigentlich funzen
PS: für jedes sprite ne eigene routine, vielleicht in ne proc packen...
bleibt abzuwarten, wie schnell das ist, vielleicht ist die bounding-circle methode (weiter oben in diesem thread) günstiger...
Verfasst: 18.11.2004 17:32
von orange-blue
Aso...
Ja stimmt, müsste ich mal probieren wie schnell das ist(ich benutzt die usebuffer ja damit 2 mal)
Verfasst: 18.11.2004 17:39
von Kaeru Gaman
use buffer ist eigentlich nur ein pointer-verbieger, sollte recht fix gehen
bei nur 2 sprites insgesamt ist das, denke ich, geradezu lächerlich schnell

Verfasst: 18.11.2004 20:06
von Deeem2031
@Kaeru Gaman
1. 3D-Sprites funktionierten noch nie mit UseBuffer() wär neu wenn das funktionieren würde.
2. Hast du vergessen ein CreateSprite3D() in deinen Code zu schreiben
3. Es fehlt das Flag #PB_Sprite_Texture
4. Bei Start3D() und Stop3D() fehlen die Klammern:
Verfasst: 18.11.2004 20:33
von Kaeru Gaman
ad 1) wusste ich nicht:
(oder denke ich da jetzt falsch ?) habe ich oben geschrieben
ad 2)-4) war so im post runtergehackt, nur um meine idee zu verdeutlichen
Verfasst: 18.11.2004 23:52
von orange-blue
hm... das ist blöd!
Gibt es vielleicht ne möglichkeit ein sprite zu drehen(ohne RotateSprite3D)?
dann wer die ganze sache wahrscheinlich einfacher.