Relatives Positionieren

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Gizeh

Betreff: Relatives Positionieren

BeitragMo, Sep 24, 2007 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine kleine Frage zur Positionierung eines Objekts/Sprites (3D)... Ich möchte ein Objekt erstellen, es um einen beliebigen Y-Winkel rotieren, und dann in Relation zur neuen Ausrichtung jeweils einen bestimmten Abstand nach rechts davon, also von der neuen Ausrichtung aus, versetzen. Dabei meine ich nicht "absolut rechts" (also auf der globalen X-Achse), sondern vom positionierten und neu ausgerichteten Objekt rechts.

Eigentlich hätte ich gedacht, dass "MoveEntity" dazu verwendet wird. Aber das funktioniert nicht - MoveEntity 100,0,0 läßt das Objekt immer auf der globalen X-Koordinate 100 erscheinen, und nicht 100 Units rechts von der jeweiligen Ausrichtung des Objekts.

Zitat:
MoveEntity
Beachte, dass das Objekt relativ zu seiner Position und Drehrichtung verschoben wird. Eine Kamera kann somit immer nach vorne verschoben werden - egal ob man zur Seite guckt oder nach unten oder oben... Auch die Abstände werden relativ zur letzten Position betrachtet.


Hm - obwohl dieser Befehl genau der Richtige sein müsste, funktioniert er nicht wie gewünscht. Warum?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Sep 24, 2007 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
geht:

Code:
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
MoveEntity camera,0,0,-40

sprite=CreateSprite()
SpriteViewMode sprite,3




While Not KeyHit(1)
   TurnEntity sprite,0,0,1
   If KeyHit(57) Then MoveEntity sprite,2,0,0
   RenderWorld
   Flip
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Gizeh

BeitragMo, Sep 24, 2007 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam, in meinem Fall klappt es dennoch nicht. Vielleicht liegt die Ursache im restlichen Code, muss ich wohl, nochmal durchgehen... Rolling Eyes

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Sep 24, 2007 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Es klappt eigendlich immer. Wenn du mit Sprites arbeitest, dann solltest du dir mal ql:SpriteViewMode anschauen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Gizeh

BeitragMo, Sep 24, 2007 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Es klappt eigendlich immer. Wenn du mit Sprites arbeitest, dann solltest du dir mal spriteviewmode anschauen.


Habe ich eben schon alles durchversucht, leider ohne jede Änderung...

Ich benutze diesen Code:

Code:

   If MouseDown(1) = 1 Then
         ; Object erstellen
             object.TPumpgunSmoke = NEW TObject
             object\model      = CreateSprite(Spielfigur)
         object\frame      = 0
             ScaleSprite   object\model,40,40
             RotateSprite   object\model,winkel   
             SpriteViewMode   object\model,3
         MoveEntity   object\model,+150,0,0
             EntityAlpha   object\model,.1
             EntityOrder   object\model,-1
    End If


Die Spielfigur ist immer in der Mitte des Screens, und kann gedreht werden. Das neue Object soll halt immer jeweils auf ihrer rechten Seite erscheinen.
Das tut es aber nur, wenn ich es, wie hier, zu einem Child der Spielfigur mache. Dann aber habe ich seltsamerweise das Problem, dass es sich mit der Spielfigur mit dreht, obwohl diese Anweisung hier ja durch die IF-Abfrage außerhalb der Main-Loop (d.h. nur einmal pro Mausklick) bearbeitet werden sollte.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Sep 24, 2007 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm anstelle ql:RotateSprite dann lieber ql:RotateEntity
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Gizeh

BeitragMo, Sep 24, 2007 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt funktioniert´s! Danke Hectic! Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group