MoveEntity mit negativen Werten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Chrissa

Betreff: MoveEntity mit negativen Werten

BeitragMo, März 29, 2010 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute!
Ich versuche mich gerade an 3D. Ich habe eine Frage zum Befehl MoveEntity. Kann man da auch negative Werte einfügen? Wenn ja, warum geht der Code dann nich:

BlitzBasic: [AUSKLAPPEN]
Function Bewegen()

If KeyDown(32) Then
x=1

ElseIf Not KeyDown(32)
x=0

EndIf

If KeyDown(30) Then
x=-1

ElseIf Not KeyDown(30)
x=0

EndIf

If KeyDown(17) Then
z=1

ElseIf Not KeyDown(17)
z=0

EndIf

If KeyDown(31) Then
z=-1

ElseIf Not KeyDown(31)
z=0

EndIf

End Function


und die Hauptschliefe:

BlitzBasic: [AUSKLAPPEN]
While Not KeyDown(1)

TurnEntity cube,0,0.5,.2

MoveEntity camera,x,y,z

Bewegen()







RenderWorld()
Flip
Wend
End


Bis jetzt kann ich mich nur anch hinten oder links bewegen...

Danke schon mal im Vorraus

EDIT: Ich weiß, Bewegungen sollte man mit Winkelfunktionen machen, aber das is mir noch zu viel...

EDIT 2: Habe es gelöst. Musste zweimal elsif rausnehemen...

NightPhoenix

BeitragMo, März 29, 2010 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
@Edit2
Gut, aber mach es dir doch nicht so kompliziert Wink

Code: [AUSKLAPPEN]
Function Bewegen()
   
x=0
z=0

   If KeyDown(32) Then x=1
   If KeyDown(30) Then x=-1
         
   If KeyDown(17) Then z=1
   If KeyDown(31) Then z=-1
      
End Function


Außerdem solltest du für Bewegungen lieber mit Floats arbeiten anstatt mit Int.

*edit*
KeyDown bzw. Keyhit Kann nur einmal pro Schleifendurchlauf verwendet werden. Besser du speicherst alle Tastenabfragen in globale Variablen "KeyDown_W=KeyDown(...)" z.b.

count-doku

BeitragMo, März 29, 2010 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
NightPhoenix, biste dir mit Keydown sicher?
Bei mir geht das auch mehrmals.

Der Eisvogel

BeitragMo, März 29, 2010 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das ist nicht ganz richtig. Nur KeyHit()/MouseHit() können nur einmal abgefragt werden, aber KeyDown()/MouseDown() kann man so oft aufrufen wie man will.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Holzchopf

Meisterpacker

BeitragMo, März 29, 2010 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Allerdings sind Konstrukte wie
BlitzBasic: [AUSKLAPPEN]
If KeyDown(32) Then
x=1
ElseIf Not KeyDown(32)
x=0
EndIf

zu vermeiden, da der Status der Taste zwischen der ersten und zweiten Abfrage ändern kann. Also, wenn KeyDown(32) beim If noch false zurückgibt, kann es sein, dass, weil die Taste im passenden Moment gedrückt wurde, Not KeyDown(32) ebenfalls false zurückgibt. Ist jetzt in dem Fall nicht so schlimm, führt dann halt zu Unsynchronitäten (gibts das Wort?). Aber es gibt Fälle, wo wirklich nur die Fälle "Taste gedrückt oder andernfalls" auftreten dürfen.

mfG
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

Jo0oker

BeitragMo, März 29, 2010 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie NightPhoenix schon sagte, mach das wie folgt:

Code: [AUSKLAPPEN]

;Vor der Hauptschleife
Dim myKeyDown(255)
Dim myKeyHit(255)


In der Hauptschleife dann:
Code: [AUSKLAPPEN]

For i = 1 to 255
     myKeyDown(i) = KeyDown(i)
     myKeyHit(i) = KeyHit(i)
next

Und dann verwende nur noch myKeyDown und myKeyHit.
So beseitigst du diverse Probleme im vorraus!

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

M0rgenstern

BeitragMo, März 29, 2010 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jo0oker:
Oben wurde ja schon gesagt, dass key/mouseDOWN öfter aufgerufen wrden kann, und das kann ich nur bestätigen.

Oder beziehst du dich zusätzlich auf Holzchopf? Dann würde das ganze nämlich wirklich Sinn machen, auf Down in einer Variable zu speichern.

Lg, M0rgenstern

mpmxyz

BeitragMo, März 29, 2010 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Es könnte so etwas passieren:
BlitzBasic: [AUSKLAPPEN]
;Taste x wird gedrückt
If KeyDown(x) Then ... ;wird ausgeführt
;2 ms Arbeit und die Taste x wird losgelassen
If KeyDown(x) Then ... ;wird nicht ausgeführt

Es macht also Sinn, die Werte zwischenzuspeichern.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group