Levels

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Beni

Betreff: Levels

BeitragSo, Okt 10, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Leute kann mir einer sagen wie ein Datei je nach dem wie viele Levels man schon geschafft hat verschiedene 2D Levels lädt?
 

feider

ehemals "Decelion"

Betreff: Re: Levels

BeitragSo, Okt 10, 2004 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Beni hat Folgendes geschrieben:
Leute kann mir einer sagen wie ein Datei je nach dem wie viele Levels man schon geschafft hat verschiedene 2D Levels lädt?

WAS MEINST DU?
DRÜCKE DICH MIT DER DEUTSCHEN GRAMMATIK AUS!!!
Sonst wird dir keiner helfen können.


ciao
wammerl

PS: Oder meinst du, wie ein Programm vreschiedene Levels laden kann?
  • Zuletzt bearbeitet von feider am So, Okt 10, 2004 20:22, insgesamt einmal bearbeitet
 

Beni

BeitragSo, Okt 10, 2004 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
OK
Ich hab ein bischen Müll geschrieben
Ich meinte:
Eine Datei soll ein Level laden
Wenn man das level geschafft hat
dann soll die Datei ein anderes Level laden
Ich schnall des nicht

Ist das jetzt verstäntlich?
  • Zuletzt bearbeitet von Beni am Mo, Okt 11, 2004 20:20, insgesamt einmal bearbeitet

Jolinah

BeitragSo, Okt 10, 2004 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das macht man normalerweise nicht in einer externen Datei sondern im Code selber Wink

Meistens definiert man das sogar in einem Level selber. Wenn das level mit einer Tileengine dargestellt wird so hat ein Level meistens mehrere Layer. Unter anderem auch ein Datenlayer. Das heisst du kannst zu jedem Tile in deinem Level noch eigene Daten hinzufügen, die aber auch bei genau gleichem Tile unterschiedlich sein können. Dann machst du ein Tile das ausschliesslich zum Level wechseln dient (unsichtbares Tile). In den Datenlayer dieses Tiles setzt du dann den Dateinamen des nächsten Levels rein. Wenn der Spieler dann in diesem Tile steht wird der Dateiname ausgelesen und das Level mit diesem Dateinamen geladen.

Das war jetzt natürlich die etwas kompliziertere Methode. Du könntest auch einfach in eine Textdatei die Level reihenfolge reinschreiben. Dann wenn das level zu Ende ist öffnest du diese Datei und gehst jede Zeile durch bis du auf das aktuelle Level triffst. Dann liest du eine Zeile mehr noch aus und diese ist dann das nächste Level.

Gibt natürlich noch viel mehr andere Methoden...
 

Beni

BeitragSo, Okt 10, 2004 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry aber das hab ich nicht gecheckt.
Kann mir jemand eine der vielen anderen möglichkeiten sagen?

Paul

BeitragSo, Okt 10, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ich vermute jetzt mal, du willst , dass wenn man den ersten level geschaft hat und das Spiel neu startet gleich der zweite geladen wird, oder?

Einfach mit "Writeline" in eine Datei schreiben, welcher LEvel schon geschafft wurde und das ganze mit "Readline" wieder auslesen, für einzelheiten: www. blitzbase.de

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!
 

Beni

BeitragSo, Okt 10, 2004 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein Nein
Ich schreib da Dim und des ganze Zeug hin
und weiter unten die Leveldaten.
Dann will ich das wenn man das Level durch gespielt hat ein anderes geladen wird und des klappt net
 

Beni

BeitragSo, Okt 10, 2004 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Halt!
Ich hab grad gemerckt das des Level überhaupt nicht tut.
Da kommt eine Fehlermeldung in der steht:"Out of data"
Dann mach ich OK und es kommt: "Memory access violation"
Shocked Shocked Shocked
 

David

BeitragSo, Okt 10, 2004 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Was, Dim... Leveldaten, pha!
Wieso machen das hier alle? Ich finde die Methode so doof wie nochwas...
Schreib deine Daten in eine externe Datei und überleg dir dafür ein eigenes Format!
Das bringt auch diverse Vorteile mit sich, wirst du sehen!

Aber lass den Dim Quatsch, das schränkt dich nur ein!

grüße
http://bl4ckd0g.funpic.de

Jolinah

BeitragSo, Okt 10, 2004 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Jolinah hat Folgendes geschrieben:
Das macht man normalerweise nicht in einer externen Datei sondern im Code selber Wink


Ich meinte damit das Level wechseln selber, nicht die Leveldatei. Weil er hat was von ner Datei gesagt die das Level wechselt Very Happy

Natürlich gehören Levels in ne eigene Datei, aber es geht nicht um die Levels selber sondern wie man den Übergang macht. Und da gibt es viele Möglichkeiten.

Am Ende muss man doch nur wenn irgendwas geschieht das aktuelle Level aus dem Speicher löschen und das neue Laden. Wann das Level gewechselt werden soll muss jeder selber festlegen. Am Anfang ist es am einfachsten per Tastendruck die Levels wechseln zu lassen. So kann man es schonmal testen. Und da meistens (zumindest bei 2D) die Levels in einem Array gespeichert sind kann man dazu ganz einfach das Level Array neu dimensionieren. Hier ein Beispiel wie die Loadfunktion dann aussehen könnte:

Code: [AUSKLAPPEN]

Graphics 1024,768,0,1
SetBuffer BackBuffer()

Const MAX_LEVELS = 5  ;Es gibt 5 festgelegte Levels

Dim level(0,0) ;Am Anfang nur auf 0,0 setzen
Dim levelnamen$(MAX_LEVELS - 1) ;Wenn es 5 festgelegte Levels gibt 0 - 4

levelnamen(0) = "Level1.map"
levelnamen(1) = "Level2.map"
levelnamen(2) = "Level3.map"
levelnamen(3) = "Level4.map"
levelnamen(4) = "Level5.map"

akt_level = 0  ;Das aktuelle Level soll "Level1.map" sein

Load_Level(levelnamen(akt_level))  ;Das aktuelle Level laden.


Repeat
Cls

  If keyhit(57) then  ;Bei Leertaste...
    akt_level = akt_level + 1 ;1 Level vorwärts springen...
    If akt_level > MAX_LEVELS - 1 then akt_level = 0  ;Wenn es das Level nicht gibt wieder auf 0 setzen
    Load_Level(levelnamen(akt_level)) ;Nun das Level laden.
  Endif

  Level_Zeichnen()


Flip
Until Keyhit(1)

EndGraphics
End


Function Load_Level(level$)
  file = ReadFile(level$)
  If not file return 0

  breite_der_map = ReadInt(file)
  hoehe_der_map = ReadInt(file)


  ;Hier der wichtige Teil, alles was in dem Array war wird wieder auf 0
  ;gesetzt, und die Array Dimension wird neu bestimmt. So können
  ;dann levels unterschiedlicher Grösse geladen werden.

  Dim level(breite_der_map,hoehe_der_map) 

  ;Und jetzt können ganz Normal die Daten in dieses Array geladen werden
  ;worauf ich hier jetzt nicht weiter eingehe.

  ...

  closefile(file)
End Function


Natürlich ist das nur 1 Methode von vielen. Und die Level werden üblicherweise nicht bei Druck auf die Leertaste gewechselt, da musst du jetzt nur noch irgend nen Zeitpunkt definieren wo das Level gewechselt werden soll, z.Bsp wenn der Player vor ner Ausgangstür steht etc.
 

David

BeitragMo, Okt 11, 2004 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Jo, noch viel leichter wäre es wenn der Link, vom einem zum anderen Level, in den Leveldateien gespeichert wäre.
Dann müsste dieser nur ausgelesen werden und bei auslösen eines Triggerevents (o.ä.) muss nurnoch der entsprechende Level geladen werden.

So kann man das ganze auch etwas allgemeiner halten!

grüße
http://bl4ckd0g.funpic.de

Jolinah

BeitragMo, Okt 11, 2004 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, da hast recht. Wollte ich ihm zuerst auch Vorschlagen aber habs wohl zu kompliziert erklärt mit Datenlayer etc. so das er es nicht verstanden hat Very Happy

regaa

BeitragMo, Okt 11, 2004 9:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Beni, such doch mal auf blitzbase.de nach Readline(), Writeline() und Function()

Wird dir sicherlich weiterhelfen.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

David

BeitragMo, Okt 11, 2004 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Am besten soll er sich mal Datei-Input/Output im allgemeinen ansehen!
Vorallem interessant wären Befehle zum speichern binärer Daten!
Denn die Leveldaten im Textformat zu speichern ist auch nicht gerade optimal!

grüße
http://bl4ckd0g.funpic.de
 

Beni

BeitragMo, Okt 11, 2004 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Leute jetzt hab ichs kapiert! Idea
Nur ein Problem hab ich noch.
Wie und Wo schreib ich die Leveldaten also wo ein Bild gesetzt wird und wo nicht?
 

Beni

BeitragMo, Okt 11, 2004 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hilft mir denn keiner???
Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad
 

David

BeitragMo, Okt 11, 2004 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Dafür musst du dir halt ein Levelformat überlegen.
Am einfachsten wäre es, wenn du nur einen Layer hast und jedes Tile, aus deinem Tileset, eine Nummer zugewießen bekommt...

Dann könnte dein Levelformat so aussehen:

Code: [AUSKLAPPEN]

MapWidth ( 4 byte )
MapHeight( 4 byte )

[ array of MapWidth * MapHeight ] ( 1 byte pro Tile )


Komplizierter wirds dann wenn mehrere Layer, animierte Tiles, Trigger usw hinzukommen. Und/Oder wenn die Tiles verschiedene Eigenschaften zugewießen bekommen, wie: Durchlässig, Tödlich usw...

grüße
http://bl4ckd0g.funpic.de
 

Beni

BeitragDi, Okt 12, 2004 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, ich glaub ich bin zu blöd um des zu checken
Geht des net auch irgend wie anders?
 

David

BeitragDi, Okt 12, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Doch, du schreibst den Mist hart in deinen Code. Das ist aber nicht viel einfacher, dafür aber sehr viel schlechter! Smile

grüße
http://bl4ckd0g.funpic.de

regaa

BeitragDi, Okt 12, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
könntest ja ganz einfach mit writeline z.B.

bildname:bildpositionx:bildpositiony
bildname:bildpositionx:bildpositiony
bildname:bildpositionx:bildpositiony

in eine datei reinschreiben und nach dem gleichen prionzip wieder auslesen.

Also das ist schon wirklich eine SEHR einfache Lösung.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group