flüssigere bewegung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

MikeDee

Betreff: flüssigere bewegung

BeitragDi, Mai 13, 2008 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hoff ich nerv nicht mit meiner inzwischen, glaub, 5. anfrage Laughing
Das "Ziel" soll sich flüssiger bewegen und nicht so zittern,
außerdem soll es, wenn es sich nach rechts bewegt nicht nach links bewegen und wenn es sich nach links bewegt nicht nach recht, oben und unten das gleiche
Code: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

zx = Rand(0,1004)
zy = Rand(0,748)

;Hauptschleife
Repeat
   Cls
HidePointer

;Maus zeichnen
mx = MouseX()
my = MouseY()
Color 255,0,0
Oval mx,my,5,5,1

;Ziel zeichnen
Color 0,0,225
Rect zx,zy,20,20,1

;Zielkolission
If mx>zx And mx<zx+20 And my>zy And my<zy+20 And MouseHit(1) Then
   zx = Rand(0,1004) : zy = Rand(0,748)
   Punkte = Punkte + 1
Else
   zx=Rand(zx-1,zx+1)
   zy=Rand(zy-1,zy+1)
EndIf
If zx+1<>zx-1 Then
   zx=zx+1
EndIf
If zx-1<>zx+1 Then
   zx=zx-1
EndIf
If zy+1<>zy-1 Then
   zy=zy+1
EndIf
If zy-1<>zy+1 Then
   zy=zy-1
EndIf
;Zielbewegung
If zx < 0 Then zx = 1023
If zx > 1023 Then zx = 0
If zy < 0 Then zy = 767
If zy > 767 Then zy = 0
;Punkte schreiben
Color 255,255,255
Text 512,0,"Punkte"+Punkte

Flip
Until KeyHit(1)
End

Eingeproggt

BeitragDi, Mai 13, 2008 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst einen komplett anderen Ansatz als diesen brauchen:
Code: [AUSKLAPPEN]
zx=Rand(zx-1,zx+1)
zy=Rand(zy-1,zy+1)


Zum Beispiel:

Code: [AUSKLAPPEN]
If Millisecs()-zieltimer>500 Then
  zrichtung=Rand(0,3)
  zieltimer=Millisecs()
Endif
Select zrichtung
  Case 0 zx=zx+1
  Case 1 zx=zx-1
  Case 2 zy=zy+1
  Case 3 zy=zy-1
End Select


Oder wenn du etwas weiter gehen willst: WayPoints. Kommt auch drauf an, was du am Ende haben willst.

[EDIT]
Diesen Teil kannst du meiner Meinung nach weglassen:
Code: [AUSKLAPPEN]
If zx+1<>zx-1 Then
      zx=zx+1
   EndIf
   If zx-1<>zx+1 Then
      zx=zx-1
   EndIf
   If zy+1<>zy-1 Then
      zy=zy+1
   EndIf
   If zy-1<>zy+1 Then
      zy=zy-1
   EndIf

[/EDIT]

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

MikeDee

BeitragDi, Mai 13, 2008 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
so gehts natürlich auch, wenn man es vorher weiß^^

und wie vermeide ich nun das es sich nach links bewegt wenn es sich nach rechts bewegt
und wenn es sich nach rechts bewegt das es sich nicht nach links bewegt usw.?

Eingeproggt

BeitragDi, Mai 13, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Nachdenken Smile

Einmal helf ich dir noch, aber die nächsten Probleme versuchst du am besten HIER zu lösen.

Statt zrichtung=Rand(0,3) machst du diesen Block:
Code: [AUSKLAPPEN]
oldzrichtung=zrichtung
Repeat
   zrichtung=Rand(0,3)
   If oldzrichtung<=1 Then
      If zrichtung>=2 Then Exit
   EndIf
   If oldzrichtung>=2 Then
      If zrichtung<=1 Then Exit
   EndIf
Forever


mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

MikeDee

BeitragDi, Mai 13, 2008 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
wie finde ich bei der Blitzhilfe raus wie man die "maus" an den Spieler bindet, also die Maus soll nur eine bestimmte Entfernung vom Spieler weg, damit man den Spieler bewegen muss

kompletter Code
Code: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

zx = Rand(0,1004)
zy = Rand(0,748)

;Hauptschleife
Repeat
   Cls
HidePointer

;Norden?
If KeyDown(17) Then
   hy = hy - 2
EndIf

;Osten?
If KeyDown(32) Then
   hx = hx + 2
EndIf

;Süden?
If KeyDown(31) Then
   hy = hy + 2
EndIf

;Westen?
If KeyDown(30) Then
   hx = hx - 2
EndIf

;Auf der anderen Seite auftauchen.
If hx < 0 Then hx = 1023
If hx > 1023 Then hx = 0
If hy < 0 Then hy = 767
If hy > 767 Then hy = 0

;Spieler zeichnen
Color 255,255,255
Rect hx,hy,10,10,1

;Maus zeichnen
mx = MouseX()
my = MouseY()
Color 255,0,0
Oval mx,my,5,5,1

;Mausentfernung zum Spieler
If mx>hx+20 Then mx=hx+20
If mx>hx-20 Then mx=hx-20
If my>hy+20 Then mx=hx+20
If my>hy-20 Then mx=hx-20

;Ziel zeichnen
Color 0,0,225
Rect zx,zy,20,20,1

;Zielkolission
If mx>zx And mx<zx+20 And my>zy And my<zy+20 And MouseHit(1) Then
   zx = Rand(0,1004) : zy = Rand(0,748)
   Punkte = Punkte + 1
Else

;Zielbewegung
If MilliSecs()-zieltimer>500 Then
  zrichtung=Rand(0,3)
  zieltimer=Millisecs()
Endif
Select zrichtung
  Case 0 zx=zx+1
  Case 1 zx=zx-1
  Case 2 zy=zy+1
  Case 3 zy=zy-1
End Select
EndIf
If zx < 0 Then zx = zx+1
If zx > 1004 Then zx = zx-1
If zy < 0 Then zy = zy+1
If zy > 748 Then zy = zy-1

;Punkte schreiben
Color 255,255,255
Text 512,0,"Punkte"+Punkte

Flip
Until KeyHit(1)
End


ansatz

Code: [AUSKLAPPEN]

;Mausentfernung zum Spieler
If mx>hx+20 Then mx=hx+20
If mx>hx-20 Then mx=hx-20
If my>hy+20 Then mx=hx+20
If my>hy-20 Then mx=hx-20

Irgendwie fehlt da das Endif, aber wenn ich das reinstelle meckert BB

der spieler wird mit den WASD-Tasten bewegt

The_Nici

BeitragDi, Mai 13, 2008 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 800,600,0,2
Setbuffer Backbuffer()
Repeat

Rect MouseX(), MouseY(), 32,32,1
Flip
Cls
Until Keyhit(1)


Nun zeichnet man das Rect einfach immer bei der Maus.

MikeDee

BeitragDi, Mai 13, 2008 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
so meinte ich das nicht, ich meinte das sich die maus immer nur eine bestimmte enfernung zum spieler entfernen kann. Also das wenn man mit der Maus weiter gehen will man mit der Spielfigur hinterher muss.

The_Nici

BeitragDi, Mai 13, 2008 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mit dem satz des Pythagoras die Entfernung der Maus zum Spieler ausrechnen und dann bei einer bestimmten Länge der Strecke MoveMouse einsetzen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group