Figur Bewegung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

pinochino

Betreff: Figur Bewegung

BeitragMi, Jun 15, 2011 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ein Kleines Problem mit der Bewegung einer Spielfigur.

ich hab eine Figur welche sich via WASD nach vorne, hinten, rechts und Links bewegen lässt.
Nur schaut diese Person immer in die Selbe Richtung, was ziemlich doof aussieht Confused

Ich möchte also das sich die Figur in die Richtung Dreht in welche sie sich bewegt.
Habe es schon mit Rotate & Turn probiert aber scheinbar nicht genug Erfahrung ums richtig hinzubekommen. Laughing

Das ist die Bewegung wie sie jetzt ist.
Für Lösungsansätze und jede Art von Hilfestellung wäre ich sehr Dankbar!
Code: [AUSKLAPPEN]

;MainSchleife
Repeat

   ;W A S D Steuerung
   
   If KeyDown(17) Then MoveEntity player, 0,0,0.1      ;w
   If KeyDown(31) Then MoveEntity player, 0,0,-0.1      ;s
   If KeyDown(30) Then MoveEntity player, -0.1,0,0      ;a
   If KeyDown(32) Then MoveEntity player, 0.1,0,0      ;d


UpdateWorld
RenderWorld

Flip

Until KeyHit(1)
End


mfg
pinO

Xeres

Moderator

BeitragMi, Jun 15, 2011 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde RotateEntity zu den Tastenabfragen hinzufügen. Dreh den Spieler einfach absolut in die richtige Richtung - 0, 90, 180, 270 Grad.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

pinochino

BeitragMi, Jun 15, 2011 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
RotateEntity hatte ich schon versucht ... ungefähr so


If KeyDown(17) Then MoveEntity player, 0,0,0.1
If KeyDown(17) Then RotateEntity player, 0,90,0
If KeyDown(31) Then MoveEntity player, 0,0,-0.1
If KeyDown(30) Then MoveEntity player, -0.1,0,0
If KeyDown(32) Then MoveEntity player, 0.1,0,0

Und ich hoffe ich Denke jetzt weit genug wenn ich sage, dass es zwar im ansatz funktioniert

aber ich adde die selbe zeile ja quasi auch zu den anderen Tasten

wenn ich also nach hinten gehe, müsste ich die 90 durch 180 ersetzen damit sich der spieler auch nach hinten dreht
wenn ich dann aber nach links will muss ich für Key 31 90 setzen, jetzt schaut der Spieler nach links, drücke ich jetzt wieder w für Vorwärts (z=0.1) pitched er 180 und der Player schaut nach rechts ^^

Ich hoffe man kann mir folgen xD

Xeres

Moderator

BeitragMi, Jun 15, 2011 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine zwei gleiche Bedingungen benutzten, sondern besser:
Code: [AUSKLAPPEN]
If KeyDown(17) Then
   MoveEntity player, 0,0,0.1
   RotateEntity player, 0,90,0
EndIf

Was dein Problem damit ist, verstehe ich grad' aber nicht wirklich.

Edit:
Funktioniert doch wunderbar.

BlitzBasic: [AUSKLAPPEN]
Graphics3D(800, 600, 32, 2)
SetBuffer(BackBuffer())
Local ftimer = CreateTimer(60)

Const KEY_ESC=1, KEY_W=17, KEY_S=31, KEY_A=30, KEY_D=32

Local light = CreateLight(3)
PositionEntity(light, 0,5,5)

Local cam = CreateCamera()
PositionEntity(cam, 0,5,0)

Local player = CreateCone()
RotateMesh(player,0,0,90)

PointEntity(cam, player)
PointEntity(light, player)

Repeat

If KeyDown(KEY_W) Then
RotateEntity player, 0,270,0
MoveEntity player, -0.01,0,0
ElseIf KeyDown(KEY_S) Then
RotateEntity player, 0,90,0
MoveEntity player, -0.01,0,0
ElseIf KeyDown(KEY_A) Then
RotateEntity player, 0,0,0
MoveEntity player, -0.01,0,0
ElseIf KeyDown(KEY_D) Then
RotateEntity player, 0,180,0
MoveEntity player, -0.01,0,0
EndIf

UpdateWorld()
RenderWorld()
Flip(0)
WaitTimer(ftimer)
Until KeyHit(KEY_ESC)


Edit2: Natürlich sollte man den Spieler immer in die Richtung bewegen in die er "blickt" - Code entsprechend angepasst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

pinochino

BeitragMi, Jun 15, 2011 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm, Ich versuchs nochmal Deutlich zu machen. Wink


Code: [AUSKLAPPEN]

If KeyDown(17) Then
   MoveEntity player, 0,0,0.1
   RotateEntity player, 0,90,0
EndIf



MoveEntity player, 0,0,0.1 = Verschiebt player auf der Z-achse, also Vorwärts.
RotateEntity player, 0,90,0 = Pitched die player Ausrichtung um 90° nach links.


Da beides auf einem Key liegt, bewegt man sich jetzt nach links und nicht mehr Vorwärts.

Zumindest bei einer statischen Camera.

Edit: Du hast ja sowas von RECHT! Very Happy
Ich hab einfach nicht weit genug gedacht.... Embarassed

Danke für deine Geduld Wink

Xeres

Moderator

BeitragMi, Jun 15, 2011 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe oben: Erst drehen, dann entlang der Blickrichtungs-Achse bewegen. Sonst gibt's natürlich Komplikationen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

pinochino

BeitragMi, Jun 15, 2011 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Versteh ich das jetzt Richtig ?

=> Die Achsen Drehen sich mit ? xD Question Question

Ana

BeitragMi, Jun 15, 2011 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du dir die Hilfe anschaust wirst du sehen das es relative und absolute Achsen gibt. Die relativen Drehen sich mit, bzw sie sind relativ zu der Entity ausgerichtet.

Wenn du das nutzen willst, dann nimmst du moveentity (was eine relative Bewegung macht), wenn du es nicht nutzen willst dann translateentity (was eine Bewegung zu den absoluten Achsen macht)-
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

pinochino

BeitragMi, Jun 15, 2011 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wenn du dir die Hilfe anschaust wirst du sehen das es relative und absolute Achsen gibt. Die relativen Drehen sich mit, bzw sie sind relativ zu der Entity ausgerichtet.

Wenn du das nutzen willst, dann nimmst du moveentity (was eine relative Bewegung macht), wenn du es nicht nutzen willst dann translateentity (was eine Bewegung zu den absoluten Achsen macht)-


Danke Ana!
Die Hilfe allein konnte mir das nicht verdeutlichen!

grüße
pinO

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group