2D Map Editor
Übersicht

![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Umschreiben des Map-Editors auf variable Größe ist eine tolle Aufgabe zum Erlernen von richtig gutem Programmieren.
Du erkenntst gerade, dass fixe Zahlenwerte den code in seiner Flexibilität einengen. Daraus entsteht der Wunsch es nun vollkommen unabhängig zu programmieren. Und nichts ist leicher als das! Ersetze doch alle "30" durch TileBreite%. Ana hatte dir dazu schon einen Vorschlag gemacht. Und die "26" durch MapBreite%, u.s.w Und jetzt was zur Realisierbarkeit deines Projektes: So geht es allen! Nimm einfach deine Ansprüche zunächst mal etwas zurück und sei mit einem einfacheren Editor und einem einfacheren Spiel zufrieden. Es spricht auch nichts dagegen, erst mal ein Spiel zu machen, bei dem es nur "harmlose" Tiles gibt. nimm die folgende Ziele: 1. Jedes Tile hat eine komplett formatfüllende Eigenschaft: "nur Gras" oder "nur Mauer". 2. Spieler oder Gegner rücken immer um ein ganzes Tile weiter, also optisch 30pix auf einmal 3. Tile 0 ist "Rasen" und ist überall dort, wo sonst nichts anderes ist. 4. Sammelt man etwas auf oder geht eine Türe weg, dann ist dort ab sofort 0, also "Gras" 5. Das Spielfeld ist immer von einem komplett geschlossenem Mauerrechteck eingegrenzt. Damit kannst du schon ganz herrliche Spiele schreiben. Und die Beschränkungen halten dir alle Probleme vom Hals, die Du sonst alle wirst lösen müssen. Sollte dir dieses Projekt gelingen.... (...und ich weiss jetzt schon, dass du das schaffst!) ... dann kannst du ganz getrost ein komplexeres Map-basiertes Spiel in Angriff nehmen. Oder es stückweise ausbauen. Die Leute aus dem Forum helfen ja auch immer. Du solltest aber auch mit der Forensuche nach Lösungen suchen. Da lernt man unglaublich dabei! |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oouh ich hab deinen Beitrag erst jetzt gelesen ... ( Schön wenn man erkennt das es eine zweite seite gibt ![]() Das ist eine Superidee von dir, der "Grundlegende" Mapeditor auf 32*32 Tile Basis war auch schon fertig. Danach war ich am Grübeln verschiedene Tile Größen zu Implementieren und vorallem einen "Hintergrund" (Layer1,quasi) zu schaffen der das komplette bild mit gras.jpg füllt und bearbeitet werden kann. ![]() Der Jetzige Stand ist: 1 Layer - 32*32 Tile, quasi der boden mit 2 Texturen zum Bearbeiten (gras & stein) 2 Layer - 32*32 Tile, was man über dem Boden Platzieren kann 3Texturen (Kiste,Baum,eine Transparente zum löschen) 3 Layer - 128*128 Tile mit 1 Textur (einem Laden Regal xD ) Sehr Sinnig ist das ganze zwar nicht mit zusätzlichen 128er tiles und der Code ist auh irgendwie naja ![]() BlitzBasic: [AUSKLAPPEN] Const xmax=1920, ymax=1080 lg |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst Arrays/Dim Felder auch aus anderen Sachen als Integern machen. Du kannst z.B. einen Type verwenden und so einfacher oder zumindest bequemer an die sachen herkommen. Ich weiß leider nicht wie es um deinen Wissenstand um Types steht. Falls dir das noch gar nichts sagt, dann eventuell erstmal damit beschäftigen oder einen Bogen drum herum machen ansonsten ungefähr so (Ich bin mir bei der BB Dim Syntax unsicher...)
BlitzBasic: [AUSKLAPPEN] Dim Map.Feld(29,29) |
||
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 ![]() |
---|---|---|
nun verstehe ich dich nicht... wenn du schon nicht zufrieden bist mit dem code, warum änderst du es dann nicht?
folgender Verbesserungsvorschlag: Ich denke mal, deine "DELETE"-Bilder sollen volltransparente Platzhalter sein für den Fall, dass in dieser Ebene gar nicht an einer Stelle gemalt werden soll? Dann verwende für alle 3 Ebenen den gleichen Wert, z.b. "0" dafür. Wenn es nun ans Zeichnen geht, fragst Du den Map(x,y)-Wert an dieser Stelle ab und zeichnest gar nix. Das spart Leistung: BlitzBasic: [AUSKLAPPEN] For kx= 0 To 100 Das Tile(3) wird zu Tile(0): BlitzBasic: [AUSKLAPPEN]
Allerdings sollte für alle 3 Ebenen ein entsprechendes DELETE-Bild existieren, das z.b. eine rotes X zeigt. In den "Switch"-Blöcken ändert sich folgendes: BlitzBasic: [AUSKLAPPEN] If switch=1 Then ;wenn switch = (1) landschaft dann -> So und jetzt noch was zum "schlechten Stil": Unnötige Zeilen: BlitzBasic: [AUSKLAPPEN] If MouseX()<100*128 Then mx=MouseX()/128 Die IF-Zeilen sind jetzt Unsinn. MouseX() kann nie größer als 12800 sein! BlitzBasic: [AUSKLAPPEN] For x=0 To 100 Unnötige Variablennamen Du kannst für beide Schleifen x als Variablennamen verwenden. kx ist nicht nötig. Es geht sogar so: BlitzBasic: [AUSKLAPPEN] ; Karte 1 Layer Hintergrund Unnötiges Zeichnen Du malst alle 10.000 Tiles, obwohl die meisten nicht im Bereich des Bildschirm sind. Besser du fragst ab, ob ein Map-Wert überhaupt sichtbar wäre: BlitzBasic: [AUSKLAPPEN] For kx= 0 To 100 |
||
pinochinoBetreff: Versuch 2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So Ich habe den Editor nochmal geschrieben & eine Speichermöglichkeit eingebaut.
BlitzBasic: [AUSKLAPPEN] ;Zombie Shooter - UNNAMED!2D Die Frage ist jetzt Funktioniert das so richtig? Also die .map Datei wird gespeichert. Nur das mit dem Auslesen der .map müsstet ihr mir nochmal verklickern. Ich hab es mir So gedacht: BlitzBasic: [AUSKLAPPEN] ; bilder laden wie im Editor Advice Please! lg |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du MapX & MapY Speicherst, musst du sie auch wieder einlesen! Schon allein, weil die Lese-Position um 8 byte (=2 Int) verschoben ist. | ||
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) |
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] Datei_Map=ReadFile("Level_1.map") Meintest du das so ? habe ja jetzt MapX & MapY wieder Eingelesen! ^^ ![]() lg |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Yupp, so geht's! Aber du musst noch die Array größe anpassen, sonst ist entweder das Array zu klein -> Error(kein platz um alles ein zu lesen) oder zu groß -> Error(So viele Daten stehen nicht mehr in der Datei).
Nochmal Dim ![]() |
||
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) |
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Einfach das Map-Array Dimensionieren
BlitzBasic: [AUSKLAPPEN] ; bilder laden wie im Editor Danek schonmal für deine Hilfe ![]() Wird hoffentlich funktionieren! ![]() lg |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, fast ^^
BlitzBasic: [AUSKLAPPEN] MapX=ReadInt(Datei_Map) Wenn du die Kartengröße anpasst bevor du sie füllst, hast du mehr davon. ![]() |
||
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) |
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Haha ... ![]() Du hast Recht ![]() Ich geh mich Schämen ![]() EDIT:Code: [AUSKLAPPEN] Funktioniert ;)
Danke lg |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So Der Editor Läuft soweit und ich hab mich an die Anfänge der Bewegung des Spielers auf der Erstellten Map Gemacht. Soweit Funktioniert auch alles!(Kollision,Bewegung)
Jedoch bewegt sich der "Spieler" viel zu Schnell über die Map und eine Lösung konnte ich noch nicht Finden. BlitzBasic: [AUSKLAPPEN] Const xmax=800, ymax=600 lg |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Spieler bewegt sich ja immer 1 Feld, also 32 Pixel vorwärts.
Hier gibt es nun 2 Möglichkeiten: Die Tastatur wird nur alle 500msec abgefragt, dadurch bewegt sich der Spieler seltener: BlitzBasic: [AUSKLAPPEN] DrawImage Bild(4), P_X*32,P_Y*32 oder ein weiches "Rutschen" des Spielers: (Code habe ich nicht getestet) BlitzBasic: [AUSKLAPPEN] DrawImage Bild(4), P_X*32+P_S_X , P_Y*32+P_S_Y Die 32 Pixel werden nicht auf einmal zur aktuellen Position dazugezählt, sondern einzeln. Dadurch rutscht die Figur in die neue Position. Die Variable MovingAction gibt an, ob derzeit eine solche "Rutschaktion" schon läuft und in welche Richtung sie geht. Und MovingCounter zählt die 32 Schritte. Bei jedem Schritt wird ein Additionswert P_S_X um eins vergrößert und wenn der Zähler 32 erreicht, wird endlich auch P_X verändert. Erst dann kann die Tastaturabfrage wieder greifen. Es kann durchaus sein, dass auch hier die Bewegung durch einen zusätzlichen Timer gebremst werden muss. (als REM-Zeile bereits eingeplant) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group