Gegner drehen in Spielerrichtung (B3D)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ONeill

Betreff: Gegner drehen in Spielerrichtung (B3D)

BeitragMi, Sep 28, 2005 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leutz, ich hab mal wieder ne Frage!

Ich bastel im Moment an einem Ego Shooter und habe mir 2 Sachen gedacht! Ersten könnte man vielleicht den Gegner immer Richtung der Spieler Position laufen lassen (geht soweit ich weiß nicht^^) und dann habe ich mir gedacht... ich berechne einfach den Winkel, um den sich der Gegner (ein Gargoyle) drehen muss, damit er auf den Spieler zuläuft!

Hier der Code:
BlitzBasic: [AUSKLAPPEN]
	;Gargoyle bewegen
If EntityZ(cam)>EntityZ(gargoyle) And EntityX(cam)<EntityX(gargoyle) ;Pl L-Oben
S1#=EntityX(gargoyle)-EntityX(cam)
S2#=EntityZ(cam)-EntityZ(gargoyle)
EndIf
If EntityZ(cam)>EntityZ(gargoyle) And EntityX(cam)>EntityX(gargoyle) ;Pl R-Oben
S1#=EntityX(cam)-EntityX(gargoyle)
S2#=EntityZ(cam)-EntityZ(gargoyle)
EndIf
If EntityZ(cam)<EntityZ(gargoyle) And EntityX(cam)<EntityX(gargoyle) ;Pl L-Unten
S1#=EntityX(gargoyle)-EntityX(cam)
S2#=EntityZ(gargoyle)-EntityZ(cam)
EndIf
If EntityZ(cam)<EntityZ(gargoyle) And EntityX(cam)>EntityX(gargoyle) ;Pl R-Unten
S1#=EntityX(cam)-EntityX(gargoyle)
S2#=EntityZ(gargoyle)-EntityZ(cam)
EndIf
SAbst#=((S1^2)+(S2^2))^0.5
Drehwinkel#=(ASin(S2/1000)/(SAbst/1000))
; MoveEntity gargoyle,0,0,0.025


Nun meine Frage dazu... wie berechne ich den Winkel, so dass er stimmt? Im Moment geht der Winkel (ich habe 90-Drehwinkel noch nicht drin etc...) von 0 - ca 56°, er müsste aber pro viertel (4 Abfrage rund um den Gegner) 90° haben... alles irgendwie komisch!

Vielleicht findet ja einer den Fehler oder kann helfen oder hat ne Idee, wie man es noch einfacher machen kann Razz

ONeill

BeitragMi, Sep 28, 2005 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin nun schon weiter... aber das Vieh dreht sich immer noch net richtig...da die Winkel nicht bis 90 Grad gehen... und insgesamt also nur knapp 260 Grad Umfangswinkel existieren....

WIESO????? ^_^

Ansonsten dreht er sich schon Richtung Spieler Razz (bis auf diesen kleinen Fehler *g*)
BlitzBasic: [AUSKLAPPEN]
	;Gargoyle bewegen
If EntityZ(cam)>EntityZ(gargoyle) And EntityX(cam)<EntityX(gargoyle) ;Pl L-Oben
S1#=EntityX(gargoyle)-EntityX(cam)
S2#=EntityZ(cam)-EntityZ(gargoyle)
SAbst#=((S1^2)+(S2^2))^0.5
Drehwinkel#=58-(ASin(S2/1000)/(SAbst/1000))
EndIf
If EntityZ(cam)>EntityZ(gargoyle) And EntityX(cam)>EntityX(gargoyle) ;Pl R-Oben
S1#=EntityX(cam)-EntityX(gargoyle)
S2#=EntityZ(cam)-EntityZ(gargoyle)
SAbst#=((S1^2)+(S2^2))^0.5
Drehwinkel#=-58+(ASin(S2/1000)/(SAbst/1000))
EndIf
If EntityZ(cam)<EntityZ(gargoyle) And EntityX(cam)<EntityX(gargoyle) ;Pl L-Unten
S1#=EntityX(gargoyle)-EntityX(cam)
S2#=EntityZ(gargoyle)-EntityZ(cam)
SAbst#=((S1^2)+(S2^2))^0.5
Drehwinkel#=58+(ASin(S2/1000)/(SAbst/1000))
EndIf
If EntityZ(cam)<EntityZ(gargoyle) And EntityX(cam)>EntityX(gargoyle) ;Pl R-Unten
S1#=EntityX(cam)-EntityX(gargoyle)
S2#=EntityZ(gargoyle)-EntityZ(cam)
SAbst#=((S1^2)+(S2^2))^0.5
Drehwinkel#=-58-(ASin(S2/1000)/(SAbst/1000))
EndIf
RotateEntity gargoyle,0,Drehwinkel,0
MoveEntity gargoyle,0,0,0.025

Waveblue

BeitragMi, Sep 28, 2005 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
kommt drauf an!
Wenn der Gegner sich nicht langsam auf ihn zudrehen soll empfehl ich dir
BlitzBasic: [AUSKLAPPEN]
PointEntity


Mfg
Wave
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

ONeill

BeitragMi, Sep 28, 2005 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man... und ich stell wirre Rechnungen auf ... Razz

Dabei gibt es nen ganz einfachen Befehl... *g*

Ist irgendwie... NICHT LUSTIG ^_^


Dieser Befehl... naja, ist zwar ganz nett, aber sobald der Gegner zu nahe kommt, wird er schief und liegt.... das ist nicht gut Razz
Da muss ich wohl weitertüfteln... (oder weiter auf Hilfe warten)
Wer Rechtschreibfehler findet, darf sie behalten!

theotheoderich

BeitragDo, Sep 29, 2005 6:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, dass ging in etwa so:

Code: [AUSKLAPPEN]
drehgeschw#=3 ;Drehgeschw. des Gegners
If Abs(DeltaYaw(spielermesh,gegnermesh)) > drehgeschw# Then
TurnEntity spielermesh,0,Sgn(DeltaYaw(spielermesh,gegnermesh))*drehgeschw#,0
else
moveentity gegnermesh,0,0,1 ;Gegner vorwärts bewegen
end if


So, oder so ähnlich Very Happy
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.

ONeill

BeitragDo, Sep 29, 2005 9:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok... ich schau mir erstmal an was der ganze Code bedeutet und dann teste ich ihn mal, danke schonmal Wink

Sorry, aber der spuckt mir immer ein Memory Access Violation aus... entweder stimmt also was mit der ersten If Codezeile nicht (da meckert er) ... oder... kA Razz

OK, meine ganze schöne Rechnung... ist für die Katz gewesen, wie ich nun gesehen hab, das Problem ist gelöst, mit 3 Codezeilen ^_^

BlitzBasic: [AUSKLAPPEN]
Drehwinkel1#=DeltaYaw(gargoyle1,cam)
TurnEntity gargoyle1,0,Drehwinkel1,0
MoveEntity gargoyle1,0,0,0.025
Wer Rechtschreibfehler findet, darf sie behalten!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group