Editor Problem beim Laden

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

M2M

Betreff: Editor Problem beim Laden

BeitragMo, Aug 27, 2007 2:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend BBP,
ich bin zur Zeit wieder am BB3D coden und habe mir vorgenommen einen kleinen Breakout Klon zu schreiben. Also hab ich heute mit den Arbeiten am Editor gestartet. Das bauen klappt auch schon sehr gut.
(Ich habe mit Types und Dims gearbeitet)
Das Speichern funktioniert (glaub ich) auch schon, leider gibt es beim Laden Probleme. Ich denke, dass es mit den Types zu tun hat, bin mir aber nicht sicher.

Hier die Datei:
https://www.blitzforum.de/upload/file.php?id=2011

Ich freue mich über Hilfe
Danke

Eingeproggt

BeitragMo, Aug 27, 2007 7:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, dass du das IMG als Short speicherst. Ich empfehle Integer.
Und das größere Problem: Du lädtst es als String Smile
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

M2M

BeitragMo, Aug 27, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohja, das ist aber eher ein kleines Problem oder? Ich meine IMG sorgt nur dafür, dass man später das richtige Stein-Bild auswählt, aber beim Laden ist ein anderes Problem, nämlich das alle Steine übereinander an Position 0,0 bzw mit kleinen Abweichungen gezeichnet werden. Ich dachte es liegt daran, dass BB nach dem Laden nicht mehr weiß, wieviele blob-Types erstellt wurden, kann das sein?
Oder liegt es an was ganz anderem?

EDIT:
Ich habe nun ein wenig rumprobiert und hab nun festgestellt:
Wenn ich die Blöcke platziere und Speichern klicke, und dann Lade, dann erscheint erstmal nichts. Fahre ich jedoch, mit gedrückter Maustaste, über den Editor, so erscheinen an der Stelle Steine, wo nach dem Speichern die Blöcke waren. Ich denke das kommt davon, das BB nach dem Laden nicht weiß, wieviele blob Types erstellt wurden, und fahre ich über den Editor, werden diese blob-Types erstellt. Das Problem ist nun nur:
Wie kriege ich das hin, dass BB die richtige Anzahl an blob-Types beim Laden hat? Ich dachte erst an eine For Schleife, aber das funktioniert nicht, weil ich in der For Schleife ja die blob-Types abfrage?!

Danke


Hier, der aktuelle Code:
Code: [AUSKLAPPEN]
;brickeasy leveleditor
Graphics 640,480,16,2
SetBuffer BackBuffer()
Global gfx_blob = LoadImage("gfx/img_brick01.bmp"):MaskImage gfx_blob,0,0,255
Global gfx_blob2 = LoadImage("gfx/img_brick03.bmp"):MaskImage gfx_blob2,0,0,255
Global gfx_blob3 = LoadImage("gfx/img_brick05.bmp"):MaskImage gfx_blob3,0,0,255

Type blob
 Field x
 Field y
 Field img
 Field number
End Type
Global curimg = 1
Global load = 0 ; lade variable


Dim a.blob(10)
AppTitle "Brickeasy Editor"
Repeat
Cls

mtemtx = MouseX()/32
mtemty = MouseY()/16

If KeyHit(2)
 curimg = 1
EndIf
If KeyHit(3)
 curimg = 2
EndIf
If KeyHit(4)
 curimg = 3
EndIf

If MouseDown(1)
If MouseY() <=416
k = k + 1
e.blob = New blob
e\x = mtemtx
e\y = mtemty
e\img = curimg
e\number = e\number +1

EndIf
EndIf
If load = 0
For e.blob = Each blob
Select e\img
 Case 1
  DrawImage gfx_blob,e\x*32,e\y*16
 Case 2
  DrawImage gfx_blob2,e\x*32,e\y*16
 Case 3
  DrawImage gfx_blob3,e\x*32,e\y*16
End Select
Next
EndIf

If load = 1
 For e.blob = Each blob
  DrawImage gfx_blob2,e\x*32,e\y*16
 Next
EndIf

If MouseDown(2)
For e.blob = Each blob

If e\x = mtemtx
 If e\y = mtemty
 Delete e

EndIf
 EndIf
 Next
  EndIf

For rectx = 0 To 30
 For recty = 0 To 25
  Color 255,255,255
  Rect rectx*32,recty*16,32,16,0
 Next
Next

 If KeyHit(31) ; speichern
  file = WriteFile("map01.txt")
  For e.blob = Each blob
     WriteShort(file,e\x)
     WriteShort(file,e\y)
     WriteInt(file,e\img)
  Next
  CloseFile(file)
  numb = 0
 EndIf

 If KeyHit(38) ; laden
  load = 1
 EndIf

 
If load = 1
  file2 = OpenFile("map01.txt")
  For e.blob = Each blob 
   e\x = ReadShort(file2)
   e\y = ReadShort(file2)
   e\img = ReadInt(file2)
   ;DrawImage gfx_blob,e\x,e\y
 Next
CloseFile(file2)
EndIf

Text 16,420,"Brickeasy Leveleditor - (S)peichern (L)aden (Maus) Steine platzieren"
Text 16,440,"(1-9) Steine auswaehlen - (E + 1-9) Extra auswaehlen - (ESC) Beenden"

Flip
Until KeyHit(1)

Eingeproggt

BeitragMo, Aug 27, 2007 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, bei (ein wenig) genauerer Betrachtung fällt mir noch was auf:

Code: [AUSKLAPPEN]
If load = 1
  file2 = OpenFile("map01.txt")
  For e.blob = Each blob 
   e\x = ReadShort(file2)
   e\y = ReadShort(file2)
   e\img = ReadInt(file2)
   ;DrawImage gfx_blob,e\x,e\y
 Next
CloseFile(file2)
EndIf


Wenn du das Spiel startest und sofort lädtst, würdest du damit keine Blöcke laden, da es noch keine Types gibt, die in der Schleife "For e.blob = Each blob" durchgangen werden. -> Die Schleife wird nie durchlaufen und somit wird nix geladen. Abhilfe würde eine andere Struktur schaffen, in der du so lange die Datei einliest, bis du ans Ende kommst (-> EOF) und in jedem Durchlauf einen Type erzeugst, so hast du genau soviele, wie du brauchst. (Hoffe, das ist halbwegs verständlich Smile )

EDIT: Könnt ihr nicht mal was anderes als "blob" und "blubb" schreiben? Habt ihr so wenig Phantasie? Smile
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

M2M

BeitragMo, Aug 27, 2007 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;brickeasy leveleditor
Graphics 640,480,16,2
SetBuffer BackBuffer()
Global gfx_blob = LoadImage("gfx/img_brick01.bmp"):MaskImage gfx_blob,0,0,255
Global gfx_blob2 = LoadImage("gfx/img_brick03.bmp"):MaskImage gfx_blob2,0,0,255
Global gfx_blob3 = LoadImage("gfx/img_brick05.bmp"):MaskImage gfx_blob3,0,0,255

Type blob
 Field x
 Field y
 Field img
 Field number
End Type
Global curimg = 1
Global load = 0 ; lade variable
Global numbert

Dim a.blob(10)
AppTitle "Brickeasy Editor"
Repeat
Cls

mtemtx = MouseX()/32
mtemty = MouseY()/16

If KeyHit(2)
 curimg = 1
EndIf
If KeyHit(3)
 curimg = 2
EndIf
If KeyHit(4)
 curimg = 3
EndIf

If MouseDown(1)
If MouseY() <=416
k = k + 1
e.blob = New blob
e\x = mtemtx
e\y = mtemty
e\img = curimg
e\number = e\number +1

EndIf
EndIf
If load = 0
For e.blob = Each blob
Select e\img
 Case 1
  DrawImage gfx_blob,e\x*32,e\y*16
  numbert = numbert + 1
 Case 2
  DrawImage gfx_blob2,e\x*32,e\y*16
  numbert = numbert + 1
 Case 3
  DrawImage gfx_blob3,e\x*32,e\y*16
  numbert = numbert + 1
End Select
Next
EndIf

If MouseDown(2)
For e.blob = Each blob

If e\x = mtemtx
 If e\y = mtemty
 Delete e

EndIf
 EndIf
 Next
  EndIf

For rectx = 0 To 30
 For recty = 0 To 25
  Color 255,255,255
  Rect rectx*32,recty*16,32,16,0
 Next
Next

 If KeyHit(31) ; speichern
  file = WriteFile("map01.txt")
  For e.blob = Each blob
     WriteShort(file,e\x)
     WriteShort(file,e\y)
     WriteInt(file,e\img)
     WriteShort(file,numbert)
  Next
  CloseFile(file)
  numb = 0
 EndIf

 If KeyHit(38) ; laden
  load = 1
 EndIf

If load = 1
  file2 = OpenFile("map01.txt")
  numbert = ReadShort(file2)
  For i=0 To numbert
    xx = ReadShort(file2)
    yy = ReadShort(file2)
    e.blob = New blob
    e\x = xx
    e\y = yy

  DrawImage gfx_blob2,e\x*32,e\y*16
 Next
CloseFile(file2)
EndIf

Text 16,420,"Brickeasy Leveleditor - (S)peichern (L)aden (Maus) Steine platzieren"
Text 16,440,"(1-9) Steine auswaehlen - (E + 1-9) Extra auswaehlen - (ESC) Beenden"

Flip
Until KeyHit(1)


Ich hab jetzt mal was anders versucht, ich erhöhe eine Variable numbert bei jedem platzierten Stein, speicher sie dann mit und beim laden eine For Schleife. Jetzt wird beim laden auch was angezeigt, allerdings weiß ich nicht was, also es sind die falsche Anzahl an Steinen und an falschen Koordinaten.

@eingeproggt: Ne, das Blob kommt noch aus der BlitzDatei, die sie davor war. Da konnte man mit der Maus kleine Blobs platzieren Very Happy[/code][/quote]

Eingeproggt

BeitragMo, Aug 27, 2007 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich habs schon öfter gemerkt, dass ich schlecht erkläre...

Hier mal "Klartext"
Code: [AUSKLAPPEN]
If KeyHit(31) ; speichern
   file = WriteFile("map01.txt")
   For e.blob = Each blob
      WriteShort(file,e\x)
      WriteShort(file,e\y)
      WriteInt(file,e\img)
   Next
   CloseFile(file)
   numb = 0
EndIf

If KeyHit(38) ; laden
   file2 = OpenFile("map01.txt")
   For e=Each blob
    Delete e
  Next
   While Not Eof(file2)
      e.blob = New blob
      e\x = ReadShort(file2)
      e\y = ReadShort(file2)
      e\img=ReadInt(file2)
   Wend
   CloseFile(file2)
EndIf


Das sollt gehn, auch wenn ichs nicht probiert hab.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

M2M

BeitragMo, Aug 27, 2007 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Thaha ich liebe dich Eingeproggt Laughing
Vielen dank. Erstmal geklärt denk ich.

M2M

Betreff: Sorry, aber Problem

BeitragFr, Aug 31, 2007 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, sorry erstmal für den Doppelpost, aber ich denke mal besser als einen neuen Thread aufzumachen. Und zwar bin ich jetzt schon ziemlich weit, mit meinem Projekt. Das Laden und Speichern von Levels funktioniert eigentlich schon ganz gut, jedoch gibt es erhebliche Probleme bei der Ballsteuerung bzw dessen Kollision mit den Tiles.

Hier die Problemstelle:
Code: [AUSKLAPPEN]
;collision
If ld = 1
 For i = 0 To curstein
  If ImagesOverlap(gfx_ball,xx,yy,gfx_collide,stein(i,0)*32,stein(i,1)*32) And stein(i,4)=0=False
   ball_ywinkel = 0-ball_ywinkel
  EndIf
  If ImagesOverlap(gfx_ball,xx-2,yy,gfx_collide,stein(i,0)*32,stein(i,1)*32) And stein(i,4)=0=False And KeyDown(203)
   xx = xx + 4
  EndIf
  If ImagesOverlap(gfx_ball,xx+2,yy,gfx_collide,stein(i,0)*32,stein(i,1)*32) And stein(i,4)=0=False And KeyDown(203)
   xx = xx - 4
  EndIf
 Next
EndIf;steuerung
If KeyDown(203)
 xx = xx- 2
EndIf
If KeyDown(205)
 xx = xx+ 2
EndIf


Das hoch und runterfahren des Balls funktioniert ja, aber wenn ich zB an einem Tile links oder rechts drücke, dann wird der Ball, trotz der eigentlichen Kollision in das Tile hineingezogen. Ich komm einfach grad nicht weiter.
Ich bitte um Hilfe. Danke

Edit: Hier die File: https://www.blitzforum.de/upload/file.php?id=2024

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group