2D Map Editor
Übersicht

pinochinoBetreff: 2D Map Editor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Community,
Ich möchte mir für Testzwecke einen kleinen MapEditor schreiben, doch scheitere ich scheinbar schon am einfachsten. Der Code ist quasi grad begonnen und schon macht er nicht was er soll. ![]() Erstmal sollen nur alle Felder mit dem Stein.jpg belegt werden. Code: [AUSKLAPPEN] Const xmax=800, ymax=600
Graphics xmax,ymax,16,2 fps=CreateTimer(60) Global KEY_ESC=1 Dim texture(2) texture(1)=LoadImage("gras.jpg") texture(2)=LoadImage("stein.jpg") Dim map(30,30) For x=0To 30 For y=0To 30 map(x,y)=texture(2) Next Next Repeat WaitTimer(fps) For y=0 To 30 For x=0 To 30 DrawImage texture(map(x,y)),178,172 Next Next ;zum Beenden des Programms, ESC If KeyHit(KEY_ESC) Then game_end=1 Flip 0 Cls Until game_end=1 End Satz mit X! Bitte freundlichst um Hilfestellungen! grüße pinO |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fehlermeldung, Zeile, was passiert statt dessen?
Was auffällt: map(x,y)=texture(2) - map enthält damit das Handle (Referenz) zu einem Bild, also muss es auch DrawImage map(x,y) heißen. Das Textur-Array würde nur Sinn machen wenn es map(x,y)=2 hieße. Und dann zeichnest du die Bilder knapp tausend mal auf einer Stelle übereinander; x und y aus den Schleifen müssen schon bei Drawimage verwendet werden. Mit einer anderen Grafiktiefe als 32 bit wäre ich auch vorsichtig; kann sein, das Transparenzen damit nicht dar gestellt werden können und 32 bit sollten auch Standard sein. Für die Zukunft: Code Einrücken & exakte Fehlerbeschreibung. Danke. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
AnaBetreff: Re: 2D Map Editor |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Dim texture(2) texture(1)=LoadImage("gras.jpg") texture(2)=LoadImage("stein.jpg") Hier liegen also nun die Images auf texture(1) und texture(2), die Dims waren irgendwie komisch gemacht bei BB aber du kannst davon ausgehen das es aufjedenfall auch ein, jetzt ungenutztes texture(0) gibt. Glaube bei Dim - Feldern werden mit Dim x(2) die Felder 0 1 und 2 angelegt. Code: [AUSKLAPPEN] Dim map(30,30) Also hier eine 31x31 Map, ist okay Code: [AUSKLAPPEN] For x=0To 30 For y=0To 30 map(x,y)=texture(2) Next Next Nun weißt du jedem feld ein Image zu, das kannst du also auch benutzen Code: [AUSKLAPPEN] For y=0 To 30 For x=0 To 30 DrawImage texture(map(x,y)),178,172 Next Next Was du hier aber nicht machst, du kannst es einfach wie ein Image behandeln, nur das es halt einen index erwartet. Desweiteren würden alle Images auf einen Punkt gezeichnet werden, denke mal du meinst das mehr so: Code: [AUSKLAPPEN] Global IWidth = imagewidth(map(0,0)); Nur damit man nicht immer die größe des Bildes bestimmen muss... Global Iheight = imageheight((map(0,0));... weil deine Tiles ja sicherlich gleich groß sind. For y = 0 to 30 for x = 0 to 30 Drawimage map(x,y),X_koordinate + x * IWidth ,Y_koordinate + y * Iheight next next Die Variablen X/Y_koordinate geben den Punkt an, von dem aus die Map angefangen werden soll, und x/y die Position in der Reihenfolge, und Iwidth/height wie breit dein image ist. Du kannst also map, ganz normal als Variable benutzen, alternativ könntest du auch den Wert 1 oder 2 in Map speichern und dann Code: [AUSKLAPPEN] Drawimage texture(map(x,y)) verwenden, allerdings hast du dich hier für einen Mittelweg entschieden, der leider nicht sinnvoll ist. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vorneweg schon mal einige Bitten für das Einstellen von Texten ins Forum:
1. richtige Code-Boxen Verwende bitte zum Einfügen hier im Forum nicht den Code-Tag sondern den [BB]-Tag (siehe rechts oben im Antworten-Editor. statt: Code: [AUSKLAPPEN] Dim texture(2)
texture(1)=LoadImage("gras.jpg") texture(2)=LoadImage("stein.jpg") Dim map(30,30) For x=0To 30 For y=0To 30 map(x,y)=texture(2) Next Next lieber: BlitzBasic: [AUSKLAPPEN] Dim texture(2) 2. Bitte einrücken Bei IF , FOR , SELECT , FUNCTION , WHILE , ... gehört der Code immer einen TAB tiefer eingerückt. Gewöhne Dir das gleich in BB an. Dann sind Zeilen, die hier ins Forum kopierst auch gleich richtig eingerückt. Notfalls musst du die Zeilen im Forum per SPACE-Taste einrücken. 1TAB=4SPACE. jetzt zu deinem Code Die DIMs bitte immer eine Nummer größer als Du sie brauchst. Das wären bei deinen Texturen BlitzBasic: [AUSKLAPPEN] Dim Texture(3) und bei deinen Maps BlitzBasic: [AUSKLAPPEN] Dim Map( 31 , 31 ) Also, normalerweise speichert man in der Map nicht die Bilder.... BlitzBasic: [AUSKLAPPEN] map(x,y) = texture(2)
sondern die Nummer unter der das Bild zu finden ist: BlitzBasic: [AUSKLAPPEN] map(x,y) = 2
Das Malen erfolgt dann aus einer Kombination von beidem: BlitzBasic: [AUSKLAPPEN] DrawImage Texture( Map(x,y) ) , x*32 , y*32 Tutorial zum Map-Editor In meinem Datei-Lesen-Tutorial gibt es ein Kapitel IV, dass dich in diesem Zusammenhang interessieren dürfte: https://www.blitzforum.de/foru...hp?t=33651 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Midimaster hat Folgendes geschrieben: Die DIMs bitte immer eine Nummer größer als Du sie brauchst. ...warum?
|
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() weil du so einem BB-Neuling nicht großartig erklären musst, warum er wenn er nur bis Texture(2) verwendet unbedingt DIM Texture(3) schreiben sollte. Bei BB wäre dies nicht nötig... ..., aber bei allen anderen Programmiersprachen läuft das so. Also soll er sich es jetzt angewöhnen ohne dass er großartig verstehen muss, warum.... ![]() Man kann auch gleich Dim Texture(100) schreiben und verliert dabei nur 0.0004 MB Ram! Spart sich aber eine Menge Fehlersucherei, wenn man die 3.Texture anlegt |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist ziemlich genau umgekehrt: In BB gibt man bei Dims eben nicht die Grösse an, sondern den End-Index.
Mit BlitzBasic: [AUSKLAPPEN] Dim texture(2)hat man also ein Array mit 3 Feldern: 0, 1 und 2. Midimaster hat Folgendes geschrieben: weil du so einem BB-Neuling nicht großartig erklären musst, warum er wenn er nur bis Texture(2) verwendet unbedingt DIM Texture(3) schreiben sollte. Bei BB wäre dies nicht nötig... Die beiden Sätze verstehe ich jetzt nicht ganz. Kann es sein, dass du irgendwo BB mit BMax vertauscht hast?
mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dem kann ich nicht zustimmen.
Wer in BlitzBasic programmiert, sollte lernen, was die Eigenheiten der Sprache sind, nicht was sie nicht sind. Wer sich Hokus-Pokus Lösungen (keine Ahnung was passiert, funktioniert aber irgendwie) à la alle Arrays einfach mal mit 100 initialisieren aneignet, verliert auf lange Sicht. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Holzchopf
ich meinte das in Bezug auf alle anderen Programmiersprachen. In BB ist es nicht nötig, aber eben nur in BB. Und auch da wäre ja kein "Fehler", das Feld zu groß zu dimensionieren. Oder hat das irgendwelche Nachteile? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Midimaster hat Folgendes geschrieben: ...
Also, normalerweise speichert man in der Map nicht die Bilder.... BlitzBasic: [AUSKLAPPEN] map(x,y) = texture(2)
sondern die Nummer unter der das Bild zu finden ist: BlitzBasic: [AUSKLAPPEN] map(x,y) = 2 ...Ist in diesem Fall nicht richtig, da hier keine Tiles ausgesondert, sondern die einzelne Bilder geladen werden, werden eben dessen Handles und nicht die nicht vorhandenen Frame-Indizes benötigt. Ein Tilessystem aus einem geladenem Bild dessen Einzelbilder auszusondern halte ich jedoch auch für besser. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Und auch da wäre ja kein "Fehler", das Feld zu groß zu dimensionieren.
Es wäre dennoch verschenderischer Umgang UND nicht wirklich korrekt, und antrainierte Fehler sind schwer zu entfernen. Es ist doch durchaus möglich zu erklären dass es bei 0 beginnt, und in diesem Fall hätte der Fragesteller sogar mit einem kleineren Dim noch arbeiten können- es wäre also sogar richtig 'falsch'. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Pinochino,
Bevor sich die "großen Jungs" sich hier in idealistischen und programmierpädagogischen Diskussion verlaufen, ist deine Frage ausreichend beantwortet? |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jaaa,
erstmal Danke an alle beteiligten. Ich werde jetzt noch ein wenig Tüfteln und mich bei bedarf wieder melden! ![]() lg EDIT: Habe das ganze jetzt soweit hinbekommen das der bildschirm mit dem Bild gras.jpg ausgefüllt wird, allerdings flackert der screen jetzt arg. BlitzBasic: [AUSKLAPPEN] Const xmax=800, ymax=600 |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] SetBuffer BackBuffer() ;fehlt am Anfang nach Graphics Außerdem würd ich statt DrawImage zu DrawBlock ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würd grad am liebsten im Boden versinken...
![]() ![]() wie unangenehm peinlich .... danke ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ändere mal die Reihenfolge des Zeichnens:
BlitzBasic: [AUSKLAPPEN] fps=30 Und wenn das nix hilft, dann so: BlitzBasic: [AUSKLAPPEN] Repeat Das ist meine Variante, es schont die Grafikkarte und CPU und spart Strom, wenn eigentlich nichts neues zu malen ist. Alle 150msec wird der Bildschirm neu gezeichnet für den Fall, das mal ein anderes Windows- Fenster über das Spiel gezogen wurde. Wenn der User im Map-Editor etwas gestaltet, kannst Du das sofortige Neumalen erzwingen, indem Du NeuMalenZeit auf 0 setzt. [syntax="bb"]BlitzBasic: [AUSKLAPPEN] Repeat |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mir eine Tileset.bmp Heruntergeladen mit Pflanzen/Büschen. diese sind jetzt alle auf einem Großen Bild.
Muss ich vor dem Benutzen jedes einzelne Bild(objekt) ausschneiden welches ich einfügen will ? Hier ist diese Tile.bmp, damit ihr sie euch mal ensehen könnt. ![]() https://www.blitzforum.de/upload/file.php?id=10768 Mein Mini-Editor Funktioniert jetzt soweit nur speichern/laden ist noch nicht eingebaut. BlitzBasic: [AUSKLAPPEN] Const xmax=800, ymax=600 |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du ja schon DrawBlock verwendest, ist das Einbauen eines TileSets nur noch ein kleiner Schritt.
Wenn das TileSet aus vielen gleich großen Mini-Bildern zusammengesetzt ist, kannst du es mit.. BlitzBasic: [AUSKLAPPEN] Bilder = LoadAnimImage(Datei$ , 30, 30, 0 , Anzahl , 2) ...in eine Variable Bilder laden und dann mit ... BlitzBasic: [AUSKLAPPEN] DrawBlock Bilder , X*30 , Y*30 , Map(X,Y) ...direkt einzelne Teilbilder daraus Malen. BB kümmert sich um den jeweils richtigen Ausschnitt. Die Nummerierung der Teilbilder läuft so: Zitat: erste Reihe: 1 , 2 , 3 , .... , 8
zweite Reihe: 9, 10 ,11 , .... dritte Reihe: 17, 18, .... ..... wenn z.b. im TileSet 8 Bilder in einer Zeile stehen |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann ich den Mapeditor auf verschiedene Größen auslegen? (30*30,64*32, 64*64 ....)
DrawBlock muss wohl wieder raus wegn Transparenz. ![]() Dann hab ich Überlegt Iso-Tiles (oder wie sich das nennt) zu verwenden weil der "Look" viel schöner ist. Ich glaube ich habe noch zu wenige Grundkenntnisse um das alles zu realisieren. ![]() @Midimaster Hast du zu deinen Tutorials vllt sowas wie "Übungsaufgaben" um das Verständnins zu "Testen"? lg |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo pinochino!
Soweit ich weiß, ist es nicht möglich, verschieden-artige Kacheln aus einem Bild zu extrahieren. BlitzBasic: [AUSKLAPPEN] Bilder = LoadAnimImage(Datei$ , 30, 30, 0 , Anzahl , 2) Das ist der Befehl, wie Midimaster bereits geschrieben hat, um ein Bild mit mehreren Frames zu laden! Meines Wissens nach musst du für jede einzigartige Kachelbreite das bild neu laden, bzw in anderen variablen speichern. Hierzu ist dann anzuraten, das du dir deine Tiles auf mehrere Bilder auslagerst. Der Befehl 'LoadAnimImage' erwartet folgende Parameter: Ordner+Datei$, Breite, Höhe, Erstes Bild, Anzahl und Modus Ordner+Datei ist zb "Grafiken\Tileset.png". Breite und höhe meint deine gewünschte KACHELBREITE. Erstes Bild ist der index, welches dein erstes zu ladendes Bild enthält und Anzahl ist eben die Anzahl. Mit dem Modus habe ich nicht viel rumexperimentiert, dazu kann ich leider nicht viel sagen. Der Index wird von oben links nach unten rechts durchgezählt. Also wenn dein Bild zb 5x 10 Tiles enthält, ist Index = 10 das erste Bild, der 2ten Reihe von oben^^ Wichtig ist, das hier die Zählung bei null beginnt. Nun, deswegen würde ich anraten, deine Kacheln in unterschiedliche Bilder auszulagern. So kannst du immer bei 0 beginnen (Als index) und die gewünschte anzahl einfach abzählen. Ausserdem, nicht vergessen, die Bilder in entsprechende Variablen packen! |
||
- Zuletzt bearbeitet von PhillipK am Do, Jun 23, 2011 19:47, insgesamt einmal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group