Kolisionsabfrage mit sprite3d?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Megaborsti
Beiträge: 1
Registriert: 01.10.2004 18:49
Kontaktdaten:

Beitrag 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 :mrgreen: ).

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. 8)
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 :wink:

:allright:
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

Wie meinst du das mit dem umlenken?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

Aso...
Ja stimmt, müsste ich mal probieren wie schnell das ist(ich benutzt die usebuffer ja damit 2 mal)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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 :wink:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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:
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag 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.
Antworten