Fehler ??!!??

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

kai

Betreff: Fehler ??!!??

BeitragMi, Mai 03, 2006 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Also aus irgend einem Grund bewegt sich meine Spielfigur nach links und nach oben ganz normal aber wenn ich ihn nach rechts oder unten bewege dann bekommt er auf einmal hyperspeed !!
Ich weis net wodran das liegen kann hab mia deswegen schon den Kopf zerbrochen !!
Ich bin sicher das einer Von euch eine ganz simple Erklärung dafür hat !!
Würde mich über Antworten und Hilfen sehr freuen !! Wink
Code: [AUSKLAPPEN]
Graphics 640,480,16,1
SetBuffer BackBuffer()
; Laden der Dateien
;#########################################
tileset = LoadAnimImage("F:\Blitz3D\Survivor\nu\gfx\sch.bmp",16,16,0,15)

spieler = LoadAnimImage("F:\Blitz3D\Survivor\nu\gfx\player1.bmp",16,16,0,8)

; Level Laden
;#########################################

Dim Level$(40,40)
leveldatei = ReadFile("F:\Blitz3D\lvl.txt")

For y = 0 To 40
A$ = ReadLine(leveldatei)
For x = 0 To 40
B$ = Mid$ (A$,x+1,1)
Level$(y,x) = B$
Next
Next
CloseFile leveldatei


; Level zeichnen
;##########################################
Repeat


For y = 0 To 40
For x = 0 To 40
Select Level$(y,x)
Case "1"
DrawImage tileset,x*16,y*16,5
Case " "
DrawImage tileset,x*16,y*16,0

; Spieler
Case "S"
DrawImage spieler, x*16, y*16, 0
spielerS = x
spielerZ = y
;Bewegung
If KeyDown(203) And ( Level$(spielerZ,spielerS-1) <> "1" ) Then
Level$(spielerZ,spielerS) = " "
spielerS = spielerS - 1
Level$(spielerZ,spielerS) = "S"
EndIf

If KeyDown(205) And ( Level$(spielerZ,spielerS+1) <> "1" ) Then
Level$(spielerZ,spielerS) = " "
spielerS = spielerS + 1
Level$(spielerZ,spielerS) = "S"
EndIf

If KeyDown(200) And ( Level$(spielerZ-1,spielerS) <> "1" ) Then
Level$(spielerZ,spielerS) = " "
spielerZ = spielerZ - 1
Level$(spielerZ,spielerS) = "S"
EndIf

If KeyDown(208) And ( Level$(spielerZ+1,spielerS) <> "1" ) Then
Level$(spielerZ,spielerS) = " "
spielerZ = spielerZ + 1
Level$(spielerZ,spielerS) = "S"
EndIf




End Select
Next
Next





Flip
Until KeyHit(1)
End
Lebe deine Träume .. aber Träume nicht dein Leben !!

garret

BeitragMi, Mai 03, 2006 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Nimm relative Pfade, z.B. LoadFile("Unterpfad\datei.txt") und keine festen, sonst kommt es bei anderen Computern zu Fehlern, da jeder ja andere Ordnerbezeichnungen hat.

2. Nimm die Bewegung aus der Select-Case-Struktur, dort sollte lediglich die Ausgabe erfolgen.

Das ist doch das Beispiel aus dem Buch, oder? Wenn ja, schlag doch einfach noch mal dort nach, ich teste das mal kurz... Wink

Edit: Lol, das ist ja merkwürdig Very Happy

Ich weiß zwar nicht woran das liegt, aber ich habe eine Alternative für dich (ist deines leicht abgewandelt, musst halt wieder die Bilder einfügen und "0" auf "1" setzen):

Code: [AUSKLAPPEN]

Graphics 640,480,16,1
SetBuffer BackBuffer()
; Laden der Dateien
;#########################################
;tileset = LoadAnimImage("F:\Blitz3D\Survivor\nu\gfx\sch.bmp",16,16,0,15)

;spieler = LoadAnimImage("F:\Blitz3D\Survivor\nu\gfx\player1.bmp",16,16,0,8)

; Level Laden
;#########################################

Dim Level$(40,40)
leveldatei = ReadFile("Neu Textdokument.txt")

For y = 0 To 40
A$ = ReadLine(leveldatei)
For x = 0 To 40
B$ = Mid$ (A$,x+1,1)
Level$(y,x) = B$
Next
Next
CloseFile leveldatei


; Level zeichnen
;##########################################
Repeat


For y = 0 To 40
For x = 0 To 40
Select Level$(y,x)
Case "0"
Color 127,0,0
Rect x*16,y*16,16,16
Case " "
Color 0,0,127
Rect x*16,y*16,16,16

; Spieler
Case "S"
Color 255,0,0
Rect x*16,y*16,16,16
spielerS = x
spielerZ = y
End Select
Next
Next

;Bewegung
;##################
If MilliSecs()-t_start>100
;##################
   If KeyDown(203) And ( Level$(spielerZ,spielerS-1) <> "0" ) Then
      Level$(spielerZ,spielerS) = " "
      spielerS = spielerS - 1
      Level$(spielerZ,spielerS) = "S"
   EndIf
   
   If KeyDown(205) And ( Level$(spielerZ,spielerS+1) <> "0" ) Then
      Level$(spielerZ,spielerS) = " "
      spielerS = spielerS + 1
      Level$(spielerZ,spielerS) = "S"
   EndIf
   
   If KeyDown(200) And ( Level$(spielerZ-1,spielerS) <> "0" ) Then
      Level$(spielerZ,spielerS) = " "
      spielerZ = spielerZ - 1
      Level$(spielerZ,spielerS) = "S"
   EndIf
   
   If KeyDown(208) And ( Level$(spielerZ+1,spielerS) <> "0" ) Then
      Level$(spielerZ,spielerS) = " "
      spielerZ = spielerZ + 1
      Level$(spielerZ,spielerS) = "S"
   EndIf
t_start=MilliSecs()
EndIf

Flip:Until KeyHit(1):End


Die Steuerung ist jetzt zeitabhängig, d.h in der markierten Zeile: Wenn die Zeitspanne von aktueller Zeit und gemessener Zeit größer als 100 Millisekunden ist, darf eine Bewegung erfolgen bzw. wird abgefragt ob ein Tastendruck vorliegt.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)

kai

Betreff: Thx !!

BeitragMi, Mai 03, 2006 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr nett von dir der Tipp war gut !!
Und ja die übung war aus dem Buch xD
Naja jetzt klappt das ja !!
dank deiner hilfe ;P
Lebe deine Träume .. aber Träume nicht dein Leben !!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group