Objekt Ausrichtung PointEntity vs AlignToVector

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Röschti

Betreff: Objekt Ausrichtung PointEntity vs AlignToVector

BeitragSo, Jan 17, 2010 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits!

Ich lese schon eine Weile hier im Forum und konnte durch eure Antworten auf alle möglichen Fragen bisher meine Problemchen lösen. Nun aber habe ich einen Fal, wo ich einfach nicht weiterkomme.

Es geht um folgendes:
Seit einer Weile bastle ich an einem SpaceShooter rum. Im Moment bin ich an der Zielerfassung. Dazu stehen 2 Gegner (noch) still im Raum als Zielobjekte. Die Erfassung funktioniert dh beim erfassen wird um das Ziel ein roter Rahmen angezeigt und entsprechend die Cockpit-Anzeigen aktualisiert zB mit Distanz zum Ziel.

Jetzt habe ich zur Zielverfolgung einen kleinen Kegel und einen kleinen Zylinder zusammengebaut als Pfeil, welcher mir die Richtung zum Ziel anzeigen soll. Dieser Pfeil ist um 90 Grad nach vorne gekippt, so dass er im Grundzustand einfach nach vorne zeigt.

Ist ein Ziel erfasst, richte ich den Pfeil mit AlignToVector auf das Ziel aus. Das funktioniert perfekt, solange sich die Ziele VOR mir befinden. Donnere ich zB am Ziel vorbei, müsste der Pfeil sich umdrehen und gegen mich zeigen, tut er aber nicht.

Wenn ich statt dessen PointEntity verwende, stellt es den Pfeil jeweils kerzengerade auf dh es nimmt nicht die beim Erstellen festgelegte Liegeposition als Basis für die Ausrichtung.

Herzichen Dank für eure Tipps!
 

Röschti

Betreff: Ups, falscher Abschnitt erwischt!

BeitragSo, Jan 17, 2010 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Admin bitte vorigen Post in Beginners Forum schieben, sorry!

Holzchopf

Meisterpacker

Betreff: Re: Objekt Ausrichtung PointEntity vs AlignToVector

BeitragSo, Jan 17, 2010 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Röschti

~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.


Röschti hat Folgendes geschrieben:
tut er aber nicht.

Was tut er dann?
Hast du die richtige Achse angegeben?

Und hast du bei der PointEntity-Methode mal versucht, das Mesh nach dem Erstellen mit RotateMesh in die richtige Position zu drehen, resp. die Lage zu korrigieren?

mfG

Edit
Und vermeide bitte Doppelposts, das von oben hättest du auch einfach ins Startpostig editieren können Wink
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Noobody

BeitragSo, Jan 17, 2010 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Vorteil bei AlignToVector ist, dass man die Achse angeben kann, die ausgerichtet werden soll. PointEntity richtet, soweit ich weiss, immer nur die Z-Achse des Zielobjekts aus, weswegen dein Pfeil auch senkrecht steht und nicht nach vorne zeigt.

Warum die AlignToVector-Methode nicht funktioniert, ist seltsam; benutzt du vielleicht Absolutwerte? Poste am besten mal die betroffenen Codezeilen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Röschti

BeitragSo, Jan 17, 2010 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das RotateMesh war die Lösung, nun funktioniert es perfekt!

wie gewünscht Code-Ausschnitte
Erstellung der Pfeilspitze:
Code: [AUSKLAPPEN]

   ;Navi Cone für Anzeige zum Ziel
   Navi=CreateCone(4,1)
   EntityColor Navi,255,0,0
   EntityAlpha Navi,0.5
   PositionEntity Navi,0,0.05,1.07
   RotateMesh Navi,90,0,0
   ScaleEntity Navi,.02,.02,.02
   ;RotateEntity Navi,90,0,0


Ausrichtung in der UpdateFunction:
Code: [AUSKLAPPEN]

      ;nur wenn ein aktives Ziel aufgeschaltet ist
      CameraProject cam,EntityX(sF.Ship\Ent,1),EntityY(sF.Ship\Ent,1),EntityZ(sF.Ship\Ent,1)
      ;Koords holen
      Local x=ProjectedX()
      Local y=ProjectedY()
      ;sofern Ziel innerhalb des Bildschirms
      If x<>0 And y<>0 Then
         DrawImage Brackets,x - ImageWidth(Brackets)/2,y   - ImageHeight(Brackets)/2
      EndIf
      
      ;Navipfeil zeigen
      ;ShowEntity Navi
      ;AlignToVector Navi,EntityX(sF.Ship\Ent),EntityY(sF.Ship\Ent),EntityZ(sF.Ship\Ent),2
      PointEntity Navi,sF.Ship\Ent



Wobei sf.Ship\Ent die Entität des erfassten Ziels enthält und Brackets die rote Umrandung ist.

Merci!

Noobody

BeitragSo, Jan 17, 2010 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
AlignToVector Navi,EntityX(sF.Ship\Ent),EntityY(sF.Ship\Ent),EntityZ(sF.Ship\Ent),2

Da liegt auch der Fehler mit der AlignToVector Methode - damit das funktioniert, hättest du vorher die Koordinaten noch mit TFormPoint umwandeln müssen. Der Ansatz mit RotateMesh ist aber um einiges einfacher, daher würde ich das auch so lassen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Röschti

BeitragSo, Jan 17, 2010 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha. Viele Wege führen nach Rom Very Happy

Wo wir gerade dabei sind: ist es eigentlich clever, die Bracktes ständig zeichen zu lassen mit DrawImage
oder wäre es schlauer bei der Zielerfassung sie zu zeichnen und nachher in dieser Funktion nur noch zu positionieren mit PositionEntity? Da ich eine FPS Begrenzung von 60 FPS habe, wird diese Funktion auch 60mal die Sekunde aufgerufen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group