Editor Problem beim Laden
Übersicht

![]() |
M2MBetreff: Editor Problem beim Laden |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, dass du das IMG als Short speicherst. Ich empfehle Integer.
Und das größere Problem: Du lädtst es als String ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() EDIT: Könnt ihr nicht mal was anderes als "blob" und "blubb" schreiben? Habt ihr so wenig Phantasie? ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Thaha ich liebe dich Eingeproggt ![]() Vielen dank. Erstmal geklärt denk ich. |
||
![]() |
M2MBetreff: Sorry, aber Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group