Pfeil in Richtung Entity

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

dont_know_to_use

Betreff: Pfeil in Richtung Entity

BeitragSa, Apr 30, 2011 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Kennt ihr ein Spiel der X-Reihe von Egosoft oder generell solche Spiele, die im Weltraum spielen?
Dort gibt es diese Pfeile, die auf ein ausgewähltes Objekt zeigen, wie auf diesem Screenshot zu sehen ist:
http://www.x-speed.de/computer..._x2-db.jpg

Wie bekomme ich dies hin?

PhillipB

BeitragSa, Apr 30, 2011 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/help/AlignToVector
 

dont_know_to_use

BeitragSa, Apr 30, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Verdammt, ich dachte echt, es gibt alle Blitz3D-Befehle auch für minib3d. Embarassed

Gibt es diese oder eine ähnliche Funktion auch für minib3d und kann ein Mod dieses Thema bitte verschieben?

mpmxyz

BeitragSa, Apr 30, 2011 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbasic.com/code...?code=2782
Ich war zufälligerweise gerade im englischen Forum unterwegs. Wink
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

dont_know_to_use

BeitragSa, Apr 30, 2011 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es auch gerade entdeckt, trotzdem danke. Wink

Aber leider funktioniert es anscheinend nicht ganz, mein 2D-Pfeil zeigt trotzdem immer in die selbe Richtung...
So habe ich AlignToVector angewandt:
Code: [AUSKLAPPEN]
AlignToVector arrow,EntityX(tempentity),EntityY(tempentity),0

Müsste doch richtig sein, oder nicht?

Mr.Keks

BeitragSa, Apr 30, 2011 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, ist nicht richtig. Der Vektor, den du da angibst, ist der Vektor vom Koordinatenursprung zu deinem Entity. Vermutlich benötigst du eher EntityX(camera)-EntityX(tempentity) oder Vergleichbares.

Edit: Okay, sehe gerade, dass du den Pfeil noch mal anders willst. Diese Richtungs-Pfeil-Sprites sind noch mal ne andere Kiste, da sie ja nur eine Drehachse haben. Da hilft dir AlignToVector nicht unbedingt weiter. Ich benutze für solche Sprites folgenden Code, bei dem ich aber ehrlichgesagt auch nicht mehr so genau weiß, wie ich den hergeleitet habe* xD Code: [AUSKLAPPEN]
dy# = DeltaYaw(cam,target)
dp# = DeltaPitch(cam,target)
tAngle# = ((ATan2(-dy,dp)+360) Mod 360) - EntityRoll(cam,1)
RotateSprite pointerSprite,tAngle+180 ; das hier haengt natuerlich von der ausrichtung des Pfeils im Sprite-Image ab



*Mindestens das +360 sieht blödsinnig aus. Aber habe hier kein B3d, um zu testen, obs auch mit einer weniger kruden Formel funktionieren kann.
MrKeks.net
  • Zuletzt bearbeitet von Mr.Keks am Sa, Apr 30, 2011 20:22, insgesamt 2-mal bearbeitet
 

dont_know_to_use

BeitragSa, Apr 30, 2011 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Pfeil ist ein 2D Sprite (auf dem HUD), der auf ein 3D Objekt zeigen soll.

Mr.Keks

BeitragSa, Apr 30, 2011 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, hatte nur den letzten Beitrag gelesen und entsprechend dein Problem missverstanden. Siehe Edit im oberen Post.
MrKeks.net
 

dont_know_to_use

BeitragSa, Apr 30, 2011 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hui, danke Keks. Jetzt klappt es. Very Happy

EDIT: Doch nicht, der Pfeil scheint eher auf den Koordinatenursprung (0,0,0) zu zeigen.

EDIT2: Nicht auf den Koordinatenursprung, sondern auf einen Punkt irgendwo, aber nicht auf mein Zielobjekt. Confused

AnniXa

BeitragSo, Mai 01, 2011 2:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit den 2d Draw befehlen kann man es so lösen:


BlitzMax: [AUSKLAPPEN]

Local winkel:Float = ATan2 ((ZielX- AusgangsX), (ZielZ - ausgangsZ))-90.0

DrawOval(((Cos(winkel) * 150) - 4) + (aufloesungX) / 2.0, ((Sin(winkel) * 150) - 4) + (aufloesungY / 2.0), 8, 8)


Dies malt einen kreis im gewissen abstand zur mitte des bildschirmes in richtung des ziel objectes

jedoch werden hier nur X und Z berücksichtigt, da dies für eine draufsicht perspektive gemacht ist (deswegen -90, weil das roll der camera -90 fix ist in diesem beispiel), vieleicht kriefgst du es ja hin es auch noch für Y anzupassen sofern nötig, und mit winkel kannst du dann deinen pfeil entsprechend drehen.
ZielX und ZielZ sind die X und Z coordinaten vom ziel object (mit entityX() u.s.w.) , ausgangs X und ausgangsZ sind die coords von dem punkt aus an dem z.B. die camera, oder der spieler ist.
|moonForge|
Ich bin Pokémon Meisterin seit 1998!
 

dont_know_to_use

BeitragSo, Mai 01, 2011 9:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wüsste nicht wie ich dies für Y anpassen kann. Habe es so versucht:
BlitzMax: [AUSKLAPPEN]
Local winkel:Float = ATan2 ((EntityX(tempentity)- EntityX(cam)), (EntityY(tempentity)- EntityY(cam)))

Allerdings klappt das nicht so Confused

Mr.Keks

BeitragSo, Mai 01, 2011 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal mit BlitzBasic: [AUSKLAPPEN]
TFormPoint 0,0,0,tempentity,cam
und dann -TFormedXYZ statt EntityX(tempentity)-EntityX(cam) (Y analog) in deinem ATan2-Ausdruck.
MrKeks.net
 

dont_know_to_use

BeitragSo, Mai 01, 2011 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So?
BlitzBasic: [AUSKLAPPEN]
Winkel =ATan2 (TFormedX,TFormedY)

Denn das klappt leider nicht, das Oval bleibt an ein und der selben Stelle. Sad

Mr.Keks

BeitragSo, Mai 01, 2011 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
eigentlich dachte ich an BlitzBasic: [AUSKLAPPEN]
Winkel =ATan2(-TFormedY(),TFormedX())
(Vorzeichen sind vielleicht Murks....)
MrKeks.net
 

dont_know_to_use

BeitragSo, Mai 01, 2011 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, das Oval bewegt sich zwar, aber sehr sehr langsam und zeigt auch nicht ganz auf das Entity.

EDIT: Keks, wie hast du es bei deinem Spiel DGX9142 himbekommen?

Mr.Keks

BeitragMo, Mai 02, 2011 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code in meinem ersten Beitrag in diesem Thread ist aus DGX9142 (bis auf Details). Entsprechend bin ich mir recht sicher, dass der funktioniert Wink.
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group