Warum bewegt sich meine Figur so schnell?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

mavi

Betreff: Warum bewegt sich meine Figur so schnell?

BeitragDi, Apr 28, 2009 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Figur bewegt isch auf meiner Tile Map viel zuschnell! Wie kann ich die geschwindigkeit bremsen?
Ich habe schon verschiedene Werte geändert aber es funktioniert nicht.

Hier der Code:
Code: [AUSKLAPPEN]

Graphics 1024,768,16,0
SetBuffer BackBuffer()

;- Images laden -

Global gras    =       LoadImage("gras.bmp")
Global wasser    =      LoadImage("wasser.bmp")
Global hero   =      LoadImage("held.bmp")
MaskImage hero, 255,255,255





;- Variablen -
Global timer    =    CreateTimer(40)
Global karte   
Global px       =   10
Global py      =   7
Global move    =    1
Global scrollx   
Global scrolly
Global x,y





;- Vorbereitungen laden -
Dim map(31,23)

karte = OpenFile("map.dat")


For y = 0 To 23
   For x = 0 To 31
      map(x,y) = ReadByte(karte)
   Next
Next





;- Hauptschleife :: BEGIN :: -
Repeat
drawmap()
movement()



If move = 1 Then x = px * 32: y = py * 32: DrawImage hero,x-scrollx,y-scrolly: Delay 25




WaitTimer(timer)
Flip
Cls
Until KeyHit(1):End
;- Hauptschleife :: END :: -
CloseFile karte




;- Include -
Include "func.bb"
Code: [AUSKLAPPEN]
;// FUNC.bb
Function drawmap()

For y = 0 To 23
   For x = 0 To 31
      If map(x,y) = 0 Then
         DrawImage gras,x*32-scrollx,y*32-scrolly
      EndIf
      
      If map(x,y) = 1 Then
         DrawImage wasser,x*32-scrollx,y*32-scrolly
      EndIf
      
   Next
Next

End Function




Function movement()

If KeyDown(208) Then
   If map(px,py+1) < 1 Then
      py       = py       +    1
      scrolly = scrolly    +    32
      move   =             1
   EndIf
EndIf

If KeyDown(200) Then
   If map(px,py-1) < 1 Then
      py      = py      -    1
      scrolly   = scrolly   -   32
      move   =            1
   EndIf
EndIf

If KeyDown(203) Then
   If map(px-1,py) < 1 Then
      px       = px      -   1
      scrollx = scrollx   -    32
      move   =            1
   EndIf
EndIf

If KeyDown(205) Then
   If map(px+1,py) < 1 Then
      px      = px      +   1
      scrollx = scrollx   +   32
      move   =             1
   EndIf
EndIf

End Function

Thorsten

BeitragDi, Apr 28, 2009 23:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir mal WaitTimer an.
Zitat:
Dieser Befehl ist besonders für die Grafikausgabe nützlich. Damit kann man die Grafikausgabe auf bestimmte Anzahl Bilder pro Sekunde drosseln.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 29, 2009 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
am besten ist es die interne Uhr zu benutzten und die Figur nur in bestimmten Intevallen zu bewegen

Code: [AUSKLAPPEN]
;- Hauptschleife :: BEGIN :: -
Repeat
drawmap()

;Timer alle 500 millisekunden nur Figur setzen
If time% < MilliSecs() Then
   time = MilliSecs() + 500
   movement()
End If
[BB2D | BB3D | BB+]
 

mavi

BeitragMi, Apr 29, 2009 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ja mhh,
nicht wirklich zufriedenstellen, denn wenn das langsamer geht dann wie soll ich sagen, sieht man das vorherige bild noch :O iwie das ist iwie nicht prickelnd

Smily

BeitragMi, Apr 29, 2009 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Für einfache dinge sind die blitzbasic-timer gut,
wenn man was aufwendigeres machen will, und evtl eine art "pseudo-multithreading" realisieren, dann sollte man die von Ralliman genannte methode nutzen.

Aber für den Anfang reicht der weg:

BlitzBasic: [AUSKLAPPEN]
  Graphics 800,600
x = 400
y = 300
timer = CreateTimer(60)
Repeat
If KeyDown(200) y = y - 1
If KeyDown(208) y = y + 1
If KeyDown(203) x = x - 1
If KeyDown(205) x = x + 1

Cls
drawOval x-5, y-5, 10, 10, 1
Flip
Until KeyHit(1)
 

mavi

BeitragMi, Apr 29, 2009 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
mein problem ist das scrolling zubeeinflussen :O wenn ich scrolle und das scrolling verringere wird komischerweise die map kleiner ?!


Okay problem gelöst! danke euch alle!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group