X_collisionaabb()

Previous topic - Next topic

WPShadow

Hi!

Nur eine theoretische Frage:

Ist es möglich die Befehle X_COLLISIONAABB() und X_ROTATION für das nächste oder übernächste oder überübernächste Update zu kombinieren?

Wäre eine große Hilfe...

GLG

W.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

Das ist nicht so einfach, weil das X_ROTATE eben auf das Objekt, mit dem Du kollidierst angewendet wird, nud nicht auf die AABB. Hmmm.. Da ist guter Rat teuer. Soll ich eine X_ROTATE_AABB einbauen? Andererseits ist "AABB" eben Axis Aligned Bounding Box -> d.h. an den globalen Koordinatenachsen ausgerichtet.

Reicht's nicht etwa 2-3 X_COLLISION für ein Raumschiff zu vernenden, oder 2-3 X_COLLISIONAABB's? Müsste man halt mitdrehen. Ist auch bisserl Stress, gell? :/

Ich bau wohl besser eine X_COLLISIONBOX ein, bei der man 2 Rotationsachsen angeben kann (yaw und pitch), OK?

WPShadow

An soetwas in der Art dachte ich auch, aber in der Art wie eine Fläche.

Dadurch könnte man einen Würfel aus, sagen wir mal, 6 einzelnen Flächen um das Raumschiff herum bilden. Dann schlägt die Rakete nicht direkt auf dem Objekt, sondern einige Pixel drüber auf, was widerum nicht sonderlich auffällt, da die Raketen ziemlich schnell werden und die Explosionen das Verschwinden des Objekts verdecken...

Das Ganze ist deshalb so kompliziert, weil ich einige verschiedene Einflüsse auf die Raketen wirken lassen möchte. Dadurch kann ich nie genau sagen, wo und wie die Rakete aufschlagen wird. Deshalb auch die Geschichte mit den Kollisionen! :-)

Danke für die schnelle Hilfe.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

Da musst Du aber auspassen, dass die Rakete nicht 'durch' das Objekt durchfliegt.
Raketen macht man so:
Code (glbasic) Select
dist = X_COLLISION_RAY( type_of[id],0, x,y,z, xo,yo,zo)
// x, ...: Position der Rakete
// xo, ...Vorherige Position der Rakete

IF dist > 0 // uh-oh Objekt im Abgasstrahl der Rakete
// weil: vom Punkt x,y,z in Richtung x0,y0,z0 (alt)
// eine Kollision stattfindet
   IF dist < Distance(x,y,z, xo,yo,zo) //
      // Klar oder? Der Abstand von der Rakete zum Treffer
      // ist kleiner als die Strecke, die die Rakete zuletzt zurückgelegt hat
      // gib hier etwas zu, falls das Raumschiff schnell auf die Rakete
      // zufliegt. (dist*0.8 < Distance(...) )
      Kaboom(id)
   ENDIF
ENDIF

// Abstand von x,y,z zu x2,y2,z2
FUNCTION Distance: x,y,z, x2,y2,z2
   x=x-x2; y=y-y2; z=z-z2
   RETURN SQR(x*x + y*y + z*z)
ENDFUNCTION
Ist das 100% klar? Wenn nicht, frag bitte nochmal, das ist mir wichtig, dass Du das versteht.

WPShadow

Ist mir inetwa klar. X_COLLISION_RAY überprüft also Frame für Frame wie nah die Rakete am Gegner ist. Sobald er sich mit dem Objekt "überschneidet, kommt die Explosionsanimation.

Aber funktioniert das auch bei, sagen wir 20, 30 oder 50 Raketen gleichzeitig? Es kommen nämlich einige Berechnungen im Hintergrund dazu, wobei das dann ziemlich an den Frames zerren muß.




Kannst du mir bei den Frames helfen? Habe nämlich den Echtzeittimer gepostet, kenne mich wirklich nicht aus...


Ich dachte an folgendes System für die Raketenorientierung:

Ich möchte die Gegner ja nicht beweglich machen, sondern ein System wie bei Final Fantasy, d.h. ein oder mehrere Gegner auf der einen Seite und das eigene Schiff auf der anderen. Ob und wie die Raketen nun treffen, werden von verschiedenen Faktoren beeinflußt:

Nebel
Meteoriten
Sternenstaub
Ableitesysteme
usw.

Das alles wird mit in die Bewegung eingebracht, d.h. x = x + Nebel + Met + Stern + usw.

Dazu kommt aber ein Korrekturwert, der sich, je nach Raketentyp auf die verschiedenen Beeinflussfaktoren einstellt:

IF Nebelkor <= Nebel
    Nebel = 0
    Nebelkor = 0
ENDIF

x = x + (Nebel - Nebelkor) + (Met - Metkor) + usw.

Wie klingt das???
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

Ja - dann weisst Du ja schon vorher, ob die Rakete einschlägt. Bei Final Fantasy ist das jedenfalls so. Die berechnen, wieviel HP der Treffer macht, und machen dann die ANimation dazu ;)

WPShadow

Das schon. Ich möchte aber auch ein paar Zufallsfaktoren einbringen, die es (selbst für mich) unmöglich machen sollen zu erahnen, ob die Rakete einschlägt. Und das möchte ich aber mit vielen Raketen gleichzeitig machen.

Denkst du, daß das zu viel Aufwand ist? (--> rein von der Rechenleistung her!)
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est