Bewegung nur bei Tastendruck

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

MikeDee

Betreff: Bewegung nur bei Tastendruck

BeitragMo, Mai 12, 2008 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir diesen Code bei Snack-tut zusammengestellt,

Code: [AUSKLAPPEN]

Graphics 320,240,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

head_x = 15
head_y = 12

Const Nord = 1
Const Ost = 2
Const Sued = 3
Const West = 4

;Hauptschleife
Repeat
   Cls
   
;Norden?
If KeyHit(200) Then
   Richtung = 1
EndIf

;Osten?
If KeyHit(205) Then
   Richtung = 2
EndIf

;Süden?
If KeyHit(208) Then
   Richtung = 3
EndIf

;Westen?
If KeyHit(203) Then
   Richtung = 4
EndIf
 
;Zeit abfragen
If MilliSecs() - letztebewegung > 50 Then ;Je weniger, desto schneller!
   letztebewegung = MilliSecs()
   
;Bewegung durchführen….
head_x = head_x - (Richtung=West) + (Richtung=Ost)
head_y = head_y - (Richtung=Nord) + (Richtung=Sued)
If head_x < 0 Then head_x = 31
If head_x > 31 Then head_x = 0
If head_y < 0 Then head_y = 23
If head_y > 23 Then head_y = 0
EndIf

;Kopf zeichnen
Color 255,255,255
Rect head_x*10,head_y*10,10,10,1
   
Flip
Until KeyHit(1)
End


Wie muss ich den Code ändern, damit sich der "Kopf" nicht laufend bewegt, sondern nur wenn man die entsprechende Richtungstaste drückt.[/code]
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

SYSThern

Betreff: jo

BeitragMo, Mai 12, 2008 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich würde des so machen :


Code: [AUSKLAPPEN]

If KeyDown(200) Then
   Richtung = 1
Else
   Richtung = 0
EndIf

If KeyDown(205) Then
   Richtung = 2
Else
   Richtung = 0
EndIf

If KeyDown(208) Then
   Richtung = 3
Else
   Richtung = 0
EndIf

If KeyDown(203) Then
   Richtung = 4
Else
   Richtung = 0
EndIf
Tools and Programms
--------------------
www.systhern.de

MikeDee

BeitragMo, Mai 12, 2008 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
klappt nicht ganz, lässt sich nur nach links bewegen.

Außerdem muss man für jede Bewegung extra drücken, es gibt kein Dauerdruck


p.s. gibt es ein bewegungs-tut^^

Caesium

Betreff: Re: jo

BeitragMo, Mai 12, 2008 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If KeyDown(200) Then head_y = head_y - 1
If KeyDown(208) Then head_y = head_y + 1
If KeyDown(203) Then head_x = head_x - 1
If KeyDown(205) Then head_x = head_x + 1


kurz und knapp. richtungsvariablen brauchst du für diese simple bewegungsroutine eigentlich nicht.

gruß,
caesium

edit: wenn du die variablen der xpos/ypos zu floats machst (head_x#, head_y#) kannst du ganz einfach die geschwindigkeit regulieren, indem du eben, anstatt der ganzen zahlen, kommazahlen zur position addierst/subtrahierst.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile
  • Zuletzt bearbeitet von Caesium am Mo, Mai 12, 2008 22:01, insgesamt einmal bearbeitet

Noobody

BeitragMo, Mai 12, 2008 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gäbe zwei Möglichkeiten:

1. Möglichkeit, bei dem der bisherige Code grösstenteils beibehalten wurde: Code: [AUSKLAPPEN]
 Graphics 320,240,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

head_x = 15
head_y = 12

Const Nord = 1
Const Ost = 2
Const Sued = 3
Const West = 4

;Hauptschleife
Repeat
   Cls
   
;Norden?
If KeyDown(200) Then
   Richtung = 1
EndIf

;Osten?
If KeyDown(205) Then
   Richtung = 2
EndIf

;Süden?
If KeyDown(208) Then
   Richtung = 3
EndIf

;Westen?
If KeyDown(203) Then
   Richtung = 4
EndIf
 
;Zeit abfragen
If MilliSecs() - letztebewegung > 50 Then ;Je weniger, desto schneller!
   letztebewegung = MilliSecs()
   
;Bewegung durchführen….
head_x = head_x - (Richtung=West) + (Richtung=Ost)
head_y = head_y - (Richtung=Nord) + (Richtung=Sued)
If head_x < 0 Then head_x = 31
If head_x > 31 Then head_x = 0
If head_y < 0 Then head_y = 23
If head_y > 23 Then head_y = 0
EndIf

;Kopf zeichnen
Color 255,255,255
Rect head_x*10,head_y*10,10,10,1

Richtung = 0
   
Flip
Until KeyHit(1)
End


2. Möglichkeit: Code: [AUSKLAPPEN]
 Graphics 320,240,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

head_x = 15
head_y = 12

Const Nord = 1
Const Ost = 2
Const Sued = 3
Const West = 4

;Hauptschleife
Repeat
   Cls
   
;Norden?
If KeyDown(200) Then
   head_y = head_y - 1
EndIf

;Osten?
If KeyDown(205) Then
   head_x = head_x + 1
EndIf

;Süden?
If KeyDown(208) Then
   head_y = head_y + 1
EndIf

;Westen?
If KeyDown(203) Then
   head_x = head_x - 1
EndIf
 
;Zeit abfragen
If MilliSecs() - letztebewegung > 50 Then ;Je weniger, desto schneller!
   letztebewegung = MilliSecs()
   
;Bewegung durchführen….
If head_x < 0 Then head_x = 31
If head_x > 31 Then head_x = 0
If head_y < 0 Then head_y = 23
If head_y > 23 Then head_y = 0
EndIf

;Kopf zeichnen
Color 255,255,255
Rect head_x*10,head_y*10,10,10,1
   
Flip
Until KeyHit(1)
End 



Aber ich kann dir nur dazu raten, solche Dinge selber zu versuchen.
Wenn du ein Tutorial liest, verstehst du ja nachher den Code (zumindest so einen kleinen wie hier) - also bist du auch in der Lage, ihn nach deinen Vorstellungen zu verändern.
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

MikeDee

BeitragMo, Mai 12, 2008 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem Selbst herausfinden kommt noch
hab z.B. rausbekommen das man die richtungs const bei 2. Code nicht braucht^^

das einzige was ich überhauptnicht durchblick ist des
Rect head_x*10,head_y*10,10,10,1 (die lösung ist mir inzwischen beim Essen machen gekommen Laughing )

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group