Tilemap abgeschnitten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

NtotheS

Betreff: Tilemap abgeschnitten

BeitragFr, Jun 17, 2011 5:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallooo,

wie heißt es so schön: Zieh den Esel nicht, solange er läuft...und dennoch werde ich das hier machen.

Code: [AUSKLAPPEN]

Graphics 400,400,0,2
SetBuffer BackBuffer()

bild = LoadAnimImage ("char.png",32,45,0,15)
z = 200
x = 200

While Not KeyHit(1)

Cls

Print x
Print z
 
DrawImage bild,z,x,2

;Links
  If KeyDown(203)
If z => 10 Then
z = z - 1
DrawImage bild,z,x,4
Delay 8
DrawImage bild,z,x,5
Delay 8
DrawImage bild,z,x,6
Delay 7
DrawImage bild,z,x,7
Delay 5
Else
z = z -0
EndIf
  End If
 

;Rechts
  If KeyDown(205)
If z =<380
    z = z + 1

DrawImage bild,z,x,8
Delay 8
DrawImage bild,z,x,9
Delay 8
DrawImage bild,z,x,10
Delay 7
DrawImage bild,z,x,11
Delay 5


Else
z = z +0
EndIf
  End If
 




;Oben
  If KeyDown(200)
If x =>40 Then
    x = x - 1
Else
x = x + 0
EndIf
  End If
 





 ;unten
  If KeyDown(208)
If x =< 380 Then
    x = x + 1
Else
x = x + 0

EndIf
EndIf

If x = 100 And z = 300 Then
Print "Hallo"
EndIf


  Flip
Wend


Nach links geht er noch (auch wenn hier ab und an hinkt) doch nach recht ist die Tilemap total verschoben und ich sehe die füsse von dem da drüber....wie kann sowas angehen.

user posted image
PS: Ohh man die einbindung der Bilder ist wohl nicht nicht soo gelungen, hier der link zu der tilemap Very Happy

http://imageshack.us/f/70/145s...neuf7.png/

Xeres

Moderator

BeitragFr, Jun 17, 2011 5:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Kritische Fehler: Print & Delay. Verwende für Text Text. Statt der Konstruktion mit Delay um eine Animation an zu zeigen, solltest du einen Timer mit Millisecs bauen.
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)

Midimaster

BeitragFr, Jun 17, 2011 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Struktur deines Programmes ist grundsätzlich falsch! Lies Dir bitte zunächst das Kapitel III des Tutorial "Timer für Anfänger" https://www.blitzforum.de/foru...hp?t=34436 durch.

Wenn du eine Bildfolge anzeigen möchtest, dann muss immer dann, wenn du den Zustand angezeigt haben möchtest ein FLIP stehen, also theoretisch bei dir so:

BlitzBasic: [AUSKLAPPEN]
;Links
If KeyDown(203)
If z => 10 Then
z = z - 1
DrawImage bild,z,x,4
Flip 1
DrawImage bild,z,x,5
Flip 1
DrawImage bild,z,x,6
Flip 1
DrawImage bild,z,x,7
Flip 1
Else
z = z -0
EndIf
End If



...aber eben nur theoretisch... weil du eigentlich mit einem einzigen Flip in der Hauptschleife auskommen sollst!. Daher wird bei Tastedruck zunächst nur eine Variable Schritt% um 1 erhöht und dafür an einer zentralen Stelle das Bild gemalt:

BlitzBasic: [AUSKLAPPEN]
;Links
If KeyDown(203)
If z => 10 Then
z = z - 1
Schritt = Schritt+1
If Schritt = 7 Then Schritt =0

DrawImage bild,z,x,Schritt
Flip 1

Else
...


aber auch das ist noch kein guter Stil, denn Du kannst damit noch nicht das Tempo der Bildfolge beeinflussen:

BlitzBasic: [AUSKLAPPEN]


;Links
If KeyDown(203)
If Zeit < MilliSecs() Then
Zeit=MilliSecs() + 40
z = z - 1
If Z<10 Then Z=0

Schritt = Schritt+1
If Schritt = 7 Then Schritt =0
EndIf

...
DrawImage Bild ,z , x , Schritt
Flip 0
...



ich hab mich ma über deinen Code hergemacht:
BlitzBasic: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

Bild = LoadAnimImage ("char.png",32,45,0,15)
z = 200
x = 200

While Not KeyHit(1)
Cls
;Print x
;Print z

If Zeit>MilliSecs()

Zeit=MilliSecs() + 60

If KeyDown(203)
;rechts
If z => 10 Then
z = z - 1
Schritt=Schritt+1
If (Schritt<4) Or (Schritt>7)
Schritt=4
EndIf
EndIf

Else If KeyDown(205)
;links
If z =<380
z = z + 1
If (Schritt<8) Or (Schritt>11)
Schritt=8
EndIf

Else If KeyDown(200)
;Oben
If x=>40 Then
X = x-1
EndIf

Else If KeyDown(208)
;unten
If x=<380 Then
X = x+1
EndIf

Else
;nix
Schritt=2
EndIf

EndIf

DrawImage Bild,z,x,Schritt


If x = 100 And z = 300 Then
Print "Hallo"
EndIf

Flip
Wend
 

NtotheS

BeitragFr, Jun 17, 2011 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun gut, jetzt bewegt sich die Figur gar nicht mehr.

Code: [AUSKLAPPEN]

If KeyDown(203)
         ;rechts
         If z => 10 Then
            z = z - 1
            Schritt=Schritt+1
            If (Schritt<4) Or (Schritt>7)
                Schritt=4
            EndIf
         EndIf
   



Aber muss die Variable "Schritt" vorher nicht definiert werden, bevor sie verändert werden kann?

Midimaster

BeitragFr, Jun 17, 2011 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
mein Fehler:

if Zeit < Millisecs() !!! muss kleiner heissen!!!
 

NtotheS

BeitragFr, Jun 17, 2011 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm nun gehts.



Code: [AUSKLAPPEN]
If Zeit<MilliSecs()
   
      Zeit=MilliSecs() + 60



Also Wenn Zeit kleiner ist als Milli, Zeit setzt Milli dann auf 60? Man, warum verstehe ich das nicht Crying or Very sad

Xeres

Moderator

BeitragFr, Jun 17, 2011 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten liest du dir die Befehle in der Online Hilfe durch... Millisecs ist die Zeit seid dem Computer Start in Millisekunden. Also ist Zeit=MilliSecs() + 60 60 ms in der Zukunft. Der Code wird immer ausgeführt, wenn die tatsächliche Zeit den Zeitpunkt in der Zukunft eingeholt hat (Zeit<MilliSecs()).
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)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group