Data

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

Abenteurer036

BeitragDi, Jan 12, 2010 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus Tilemap macht man auch kein Data^^. Hast du schon alle Fehler korrigiert? Wenn ja, was für Fehler treten noch auf?
New Project [4%]
Schinken Maker [100%]
 

NtotheS

BeitragDi, Jan 12, 2010 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die fehler sind leider alle immer noch da, ich denke mal weil die Data nicht richtig eingetstellt ist

"Image frame out of range" kommt immer wieder .(

Code: [AUSKLAPPEN]
Graphics 500,500,0
tileset = LoadAnimImage("tileset.bmp",200,200,0,4)
char = LoadImage("char.bmp")
px = 6
py = 6
move = 1

Dim map(20,20)
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 0,0,0,0,1,1,1,3,3,1,1,1,1,1,4,4,1,1,1,1,1
Data 0,0,0,0,1,1,1,3,3,1,1,1,1,1,4,4,1,1,1,1,1
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,2,2,1,1,1,1,3,3,3,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,3,3,3,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

For y = 0 To 20
For x = 0 To 20
Read map(x,y)
Next
Next
Repeat
SetBuffer BackBuffer()
Cls
If KeyDown(1) Then End
For y = 0 To 20
For x = 0 To 20
DrawImage tileset,x*100,y*100,map(x,y)
Next
Next
If KeyDown(208) Then

If map(px,py+1) < 2 Then

py = py + 1
move = 1
End If
End If

If KeyDown(200) Then
If map(px,py-1) < 2 Then
py = py - 1
move = 1
End If
End If

If KeyDown(203) Then
If map(px-1,py) < 2 Then
px = px - 1
move = 1
End If
End If

If KeyDown(205) Then
If map(px+1,py) < 2 Then
px = px + 1
move = 1
End If
End If

If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x,y



Flip
Forever


Und so sieht es leider aus :

http://img5.imagebanana.com/vi.../error.jpg

Die map selber ist aber die :

http://img5.imagebanana.com/vi...et.bmp.png

Abenteurer036

BeitragDi, Jan 12, 2010 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast den selben Fehler wie vorhin gemacht.

Bei LoadAnimImage sollst du nicht die größe des Datafeldes angeben sondern die höhe und breite eines Tiles.

Also kommt nicht LoadAnimImage("tileset.bmp",200,200,0,4)
sondern LoadAnimImage("tileset.bmp,breite eines tiles,höhe eines tiles,0,4")

Ich hoffe es hilft. Very Happy

EDIT: Ich habe noch einen Fehler gefunden.
Bei
Code: [AUSKLAPPEN]
DrawImage tileset,x*100,y*100,map(x,y)

darf auch nicht 100 stehn außer deine Tiles sind 100 Pixel groß was ich bezweifle. Da kommt einfach bei x die breite eines tiles und bei y die höhe.
New Project [4%]
Schinken Maker [100%]
 

NtotheS

BeitragDi, Jan 12, 2010 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
DrawImage tileset,x*32,y*32,map(x,y)


Darauf weißt er mich hin, ich hab nun ne neue tilemap erstellt und WIRKLICH mit 32....doch das geht auch nicht Very Happy

Abenteurer036

BeitragDi, Jan 12, 2010 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
So das müsste gehn:

Code: [AUSKLAPPEN]
Graphics 672,672,2
tileset = LoadAnimImage("tileset.bmp",32,32,0,4)
char = LoadImage("char.bmp")
px = 6
py = 6
move = 1

Dim map(20,20)
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 0,0,0,0,1,1,1,3,3,1,1,1,1,1,4,4,1,1,1,1,1
Data 0,0,0,0,1,1,1,3,3,1,1,1,1,1,4,4,1,1,1,1,1
Data 0,0,0,0,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,2,2,1,1,1,1,3,3,3,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,3,3,3,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,4,4,1,1
Data 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

For y = 0 To 20
For x = 0 To 20
Read map(x,y)
Next
Next
Repeat
SetBuffer BackBuffer()
Cls
If KeyDown(1) Then End
For y = 0 To 20
For x = 0 To 20
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next
If KeyDown(208) Then

If map(px,py+1) < 2 Then

py = py + 1
move = 1
End If
End If

If KeyDown(200) Then
If map(px,py-1) < 2 Then
py = py - 1
move = 1
End If
End If

If KeyDown(203) Then
If map(px-1,py) < 2 Then
px = px - 1
move = 1
End If
End If

If KeyDown(205) Then
If map(px+1,py) < 2 Then
px = px + 1
move = 1
End If
End If

If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x,y



Flip
Forever
New Project [4%]
Schinken Maker [100%]

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jan 12, 2010 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Rück den Code ein
2.) Graphics 'benötigt' noch ein mode
3.) SetBuffer BackBuffer() gehört nicht in die Schleife
4.) LoadAnimImage mit ,200,200,0,4) benötigt ein Bild, dass mindestens 400x400 groß ist, mit 4 Tiles der Abmessungen von 200x200
5.) Mach dir das Leben nicht unnötig schwer, und verzichte auf deine move-Variable

Code: [AUSKLAPPEN]
   If KeyDown(203) Then If px>0 Then px=px-1
   If KeyDown(205) Then If px<20 Then px=px+1
   If KeyDown(200) Then If py>0 Then py=py-1
   If KeyDown(208) Then If py<20 Then py=py+1
   DrawImage char,x*32,y*32
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

NtotheS

BeitragDi, Jan 12, 2010 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider immer noch genau so wie davor. Ich denke ich werde den Code von grund auf überarbeiten und gleich noch Dim/Data lernen Sad

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jan 12, 2010 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergiss gleich Data und mach dir gleich ein eigenen Tilemap-Editor. Ist mit ein paar Zeilen Code schnell geschrieben.

Edit1: Und gewöhn dir lieber gleich als später an, den Code einzurücken. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xeres

Moderator

BeitragDi, Jan 12, 2010 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
In deinem Data - Feld taucht die Zahl 4 auf die den Fehler auslöst: Du hast nur 4 Frames: 0,1,2,3 ...
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)

Abenteurer036

BeitragDi, Jan 12, 2010 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich hab dir mal was funktionierendes zusammengeschreiben. Schaus dir an und lern daraus. Das Tileset.bmp ist auf deins angepasst.

Hinweis: 0 ist auch eine Zahl wenn du im Datafeld 4 eingibst wird wieder "Image out of Range" kommen.

Code: [AUSKLAPPEN]
Graphics 600,400,24,2
SetBuffer BackBuffer()

tileset=LoadAnimImage("tileset.bmp",32,32,0,4)

Dim map(9,9)

Data 1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,1
Data 1,0,0,3,3,3,3,0,0,1
Data 1,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,1
Data 1,0,0,2,2,0,0,0,0,1
Data 1,0,0,2,2,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,1,1,1,1

For y = 0 To 9
  For x = 0 To 9

  Read map(x,y)

  Next
Next

Repeat
Cls

For y = 0 To 9
  For x = 0 To 9

  DrawBlock tileset,x*32,y*32,map(x,y)

  Next
Next

Flip
Forever


@Xeres: Ganz knapp schneller^^
New Project [4%]
Schinken Maker [100%]
 

NtotheS

BeitragDi, Jan 12, 2010 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie hast du dann dieses Data ausrechen können. Das ist ja mein einziges großes Problem Shocked Laughing

Abenteurer036

BeitragDi, Jan 12, 2010 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Data ausrechnen? Du meinst wie das mit der 0,1,2,3 ist? Ganz einfach das erste Tile ist 0, das zweite 1, das dritte ist 2,usw...
New Project [4%]
Schinken Maker [100%]
 

NtotheS

BeitragDi, Jan 12, 2010 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
OMG, dieses data ist ja echt unglaublich einfach wenn man es erstmal verstanden hat. Ich bin auch dieser typ von mensch der erstmal ne grafik dazu sehen muss Very Happy

Abenteurer036, du hast mir nun echt geholfen...nun bin ich in der lage die tilemap richtig anzuzeigen Very Happy

Das geheimniss von Dim werde ich heute auch noch kancken, da ich eine gewisse vorstellung hab was das sein kann Very Happy

Abenteurer036

BeitragDi, Jan 12, 2010 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Dim sagst du wie viel Felder du maximal anlegen willst. Also bei Dim map(9,9) ist die map 10 Breit und 10 Hoch, wenn du es in Dim map(19,19) ist sie 20 Brei und 20 Hoch. Dann musst du aber auch das Datafeld vergrößern oder verkleinern, logisch oder Wink. Naja freut mich geholfen zu haben. Very Happy
New Project [4%]
Schinken Maker [100%]
 

NtotheS

BeitragDi, Jan 12, 2010 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
So nach einer fast geschlagenen 1 Stunde ist das rausgekommen:

http://img5.imagebanana.com/view/4rtc63k/Sun.jpg

Also ich muss praktisch jeden zahl einmal eintippen und schauen wo es dann auf der map kommt und sie immer dem ensptrechend verschieben. Ist echt nicht witzig Very Happy

Abenteurer036

BeitragDi, Jan 12, 2010 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du dir einen Mapeditor programmierst nicht Smile

@Picture: Sieht echt klasse aus muss ich schon sagen. Für 3 Tage coden TOP!
New Project [4%]
Schinken Maker [100%]

Midimaster

BeitragDi, Jan 12, 2010 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ich könnte dir folgende Idee anbieten. Kopiere die DATA-Zeilen in ein zweites BB-Code-Fenster. Speichere das Ganze als MAP.BB in das gleiche Verzeichnis wie das Spiel.

Füge nach der Repeat-Zeile folgende Anweisung ein:

BlitzBasic: [AUSKLAPPEN]
LiesFeldNeuEin()


Und ganz am Ende deines Spiel-Codes folgende Funktion:

BlitzBasic: [AUSKLAPPEN]
Function LiesFeldNeuEin()
If MouseHit(1)
Local Datei%, Zeile$, Da%, Teil$
Datei=ReadFile("Map.bb")
For y = 0 To 9
Zeile=ReadLine(Datei)
Zeile = Mid(Zeile,6,-1)
For x = 0 To 9
da = Instr(Zeile, ",")
Teil = Trim(Left(Zeile,da-1))
Zeile = Mid(Zeile, da+1,-1)
Map(x,y)=Teil
Next
Next
EndIf
End Function



Jetzt kannst Du während das Spiel läuft im MAP-Fenster den Code ändern, speichern und wenn Du jetzt in das laufende Spiel klickst, wird das Spielfeld aktualisiert.

Dabei reagiert die Lesefunktion nicht auf Leerzeichen, d.h. Du kannst im MAP.BB die Zahlen wieder ordentlich untereinander schreiben, auch wenn du zweistellige Nummern brauchst:

vorher:
Code: [AUSKLAPPEN]
Data 11,0,13,13,13,1,1,1,1,1,8,1,1,1,
Data 0,0,0,0,1,1,1,1,1,1,8,1,1,1,1,1,1



nachher:
Code: [AUSKLAPPEN]

Data 11, 0,13,13,13, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1
Data  0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1



Noch'n Vorteil:
Die Funktion verträgt es auch, wenn Du die Nuller aus der Map rausläßt. Dadurch sieht es beim Erstellen viel übersichtlicher aus:

Code: [AUSKLAPPEN]
Data 0,0,0,0, , , , , , , , , , ,4,4, , , , ,1
Data 1, , , , , , , , , , , , , ,4,4, , , , ,1
Data 1, , , , , , , , , , , , , , , , , , , ,1
Data 1, , , , , , , , , , , , , , , , , , , ,1
Data 1, , , , , , ,2,2, , , , , , , , , , , ,1
Data 1, , , , , , ,2,2, , , , ,3,3,3, ,4,4, ,1
Data 1, , , ,0,0, , , , , , , ,3,3,3, ,4,4, ,1
Data 1, , , ,0,0, , , , , , , , , , , ,4,4, ,1
Data 1, , , ,0,0, , , , , , , , , , , ,4,4, ,1
Data 1, , , ,0,0, , , , , , , , , , , , , , ,1
Data 1, , , , , , , , , , , , , , , , , , , ,1
Data 1, , , , , , , , , ,2,2, , , , , , , , ,1
Data 1, , , , , , , , , , , , , , , , , , , ,1
Data 1, , ,2,2, , , , , , , , , , , , , , , ,1
...
  • Zuletzt bearbeitet von Midimaster am Mi, Jan 13, 2010 0:37, insgesamt einmal bearbeitet
 

NtotheS

BeitragMi, Jan 13, 2010 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
LiesFeldNeu()


Ich bin mir zwar nicht sicher aber da fehlt noch das wort "Ein" dahinter oder?

Weil sonst findet er es nicht.

Und selbst dann funktioniert es nicht Very Happy



Edit:

Teil = Trim(Left(Zeile,da+1))

hab ich das - durch + ersetzt und nun gehts DANKE Very Happy

Midimaster

BeitragMi, Jan 13, 2010 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, da fehlt das "ein"! Hab's korrigiert!

Was Du da schreibst zu dem "+" und dem Komma kann aber nicht stimmen, es muss "-" sein.

außerdem ist mir gerade ein Fehler auf deinem Bild aufgefallen. Deine Data-Zeilen sind 10 Elemente lang, und der Code daneben liest immer 11 ein: For i=0 to 10. Deshalb hast Du so große Probleme die MAP zu erstellen ("...und schauen wo es dann auf der map kommt und sie immer dem ensptrechend verschieben. Ist echt nicht witzig... ")
 

NtotheS

BeitragMi, Jan 13, 2010 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es + steht, dann kommt der error "parameter must be positive"

Very Happy

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group