Unterschied zwischen Funktionen und normalem Code

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Seven

BeitragDi, Okt 18, 2011 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
nagut, schade.

Dann kommen hier noch meine vorerst letzten Fragen:
Wenn ich extern Daten auslagere, bespielsweiße um die festgelegte Auflösung zu speichern,
oder für die Map Dateien usw, was für eine Datei muss dies sein?

*.cfg sieht man hierfür ab und an, jedoch ist das keine speziales Dateiformat.
Eben so gut könnte ich ja *.txt nehmen.

Andere wiederum verwenden etwas "höheres" wie z.B. *.pak, was sich auch nicht einfach
mit dem Editor lesen lässt.

2. Frage:
Wie ungefähr funktioniert das Laden?
Momentan stelle ich mir das so vor, dass irgendein Bild, oder auch mehrere angezeigt werden,
während im Hintergrund das Programm das Level generiert und gleichzeitig wird durch ein
Ladebalken gezeigt wie man ist.

ZEVS

BeitragDi, Okt 18, 2011 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Dateinamenserweiterung stellt unter Windows einen Mechanismus dar, mit dem das Betriebssystem erkennt, womit es die Datei öffnen soll. Nichts weiteres. Du kannst jeden freien Dateinamen wählen, auch ohne Dateiendung. Auch die Wahl einer eigenen, neuen Dateiendung ist möglich.

Das Laden musst du genau so machen, wie du es beschrieben hast: Ein bisschen laden, neuen Frame mit gefüllterem Ladebalken zeichnen, laden, zeichnen... Der Ladealgorhythmus muss entsprechend angepasst werden, dass er seinen eigenen Fortschritt einschätzt und an entsprechender Stelle immer neu zeichnet.

ZEVS
 

Seven

BeitragDi, Okt 18, 2011 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber öffnet der Editor nicht alles, unabhängig vom Dateiformat?
Und wenn beim öffnen dann die Kryptischen Zeichen auftauchen, dann heißt dies
doch, dass es ein wenig besonders ist, oder nicht?
Und wie genau kommt man von Blitzbasic auf diese "besonderen Dateien"?

Muss ich mir überhaupt besondere Gedanken um die Dateiendung machen,
wenn man sie am ende sowieso mit dem Editor einsehen kann und Blitzbasic
ebenso interagieren kann, wie der Editor?

ZEVS

BeitragDi, Okt 18, 2011 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist nichts besonderes. Textdaten beschränken sich einfach nur auf bestimmte Bytes, Binärdateien können jedes Byte enthalten. Entsprechend nimmst du einfach ReadFile nur halt mit ReadInt, ReadShort, ReadByte und ReadFloat. Das spart Speicherplatz und verhindert Einsehen mit dem Editor. Zum Schreiben WriteFile, wie immer.

Du brauchst dir keine Gedanken um die Dateiendung machen.

ZEVS

BladeRunner

Moderator

BeitragMi, Okt 19, 2011 6:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine kleine Einschränkung: Ich würde keine groß bekannte nehmen, wie zB PDF - einfach um Verwirrungen vorzubeugen, nicht weil es technisch nichtr möglich wäre.
Und: nahezu jedes Dateiformat enthält am Anfang (im "Header") ein Erkennungszeichen, anhand dessen auch dein Programm weiss dass es sich um ein gülötiges File für dein Format handelt.
Du könntest zB am Beginn jedes Files die Zeichenkette "SevenData" haben. Wenn das nicht da ist, ist das geöffnete File schon mal nicht von deinem Editor Wink
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

Xeres

Moderator

BeitragMi, Okt 19, 2011 8:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit *.pak werden auch Archive benannt, in denen mehrere Dateien stehen: Wenn du z.B. ein paar Bilder hast, kannst du die Daten alle einzeln lesen und dann Hintereinander in eine Datei schreiben - mit einem passenden Header zum entpacken, damit du weißt, was, wie viele Dateien und wo sie anfangen und enden. Weder Bildbetrachter noch Textprozessoren können mit der Datei etwas sinnvolles anfangen, womit du dem 08/15 User den Zugriff verweigerst.
Dazu brauchst du aber schon etwas Know-how und 100%ig sicher ist es prinzipiell auch nicht - ich würd mir um so was erst später mal Gedanken machen.
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)

Midimaster

BeitragMi, Okt 19, 2011 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du noch nie mit Dateien gearbeitet hast würde ich Dir dringend raten, alles als reines ASCII abzuspeichern. Das bedeutet dass Du nur mit Texten arbeitest. Die offizielle Endung wäre dann .TXT

Lies dazu mein Dateien-Tutorial: https://www.blitzforum.de/foru...hp?t=33651

Der Vorteil ist, Du kannst so erzeugte Dateien jederzeit mit einem normalen Text-Editor öffnen und sehen, ob alles korrekt angekommen ist. Zweiter Vorteil: Du kannst Dich zuerst mal nur um das LESEN von Dateien kümmern, weil Du die Dateien zunächst einfach mit dem Text-Editor erstellen kannst. Dritter Vorteil: Du kannst falls etwas schief gegangen ist, die Datei im Text-Editor korrigieren.

Bei den heutigen Computern sind auch bei TXT-Dateien keine Performance-Einbrüche zu erwarten, solange Du unter 10.000 Zeilen bleibst. Der Verschlüsselungsgedanke ist zwar nett, hat aber in einem Anfänger-Projekt nichts zu suchen.

Mein Rat: Lern erst mal mit TXT-Dateien zurechtzukommen!

In einer Textdatei wird nur mit Texten gearbeitet. Auch Zahlen werden zu Texten. Die Zahl 32 wird also nicht als ein Byte mit dem Wert 32, sondern als 2 Zeichen "3" gefolgt von "2" abgespeichert. Würdest Du die Methode 1 nehmen, dann würdest du im Texteditor nur ein Leerzeichen sehen. Aber bei der zweiten Methode siehst Du ganz normal die 32.

Der Zugriff auf die Datei (Lesen und schreiben) erfolgt dabei immer mit den String-Befehlen: ReadLine() bzw WriteLine(). Die haben gleich noch den Vorteil, dass für jeden abgespeicherten Parameter eine eigene Zeile verwendet wird.

BlitzBasic: [AUSKLAPPEN]
Zahl%=123 
Ergebnis%=0

OutStream=WriteFile("test.txt")
WriteLine OutStream, Zahl
CloseFile OutStream

InStream=ReadFile("test.txt")
Ergebnis = ReadLine( InStream)
CloseFile InStream

Print Ergebnis
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Seven

BeitragFr, Okt 21, 2011 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Tutorial hab ich letztens gesehen^^

Da wäre noch was; Ich hab ein wenig gestöbert, was halbtransparenz in Blitzbasic angeht und als beste
Lösung wird für gewöhnlich Draw3D genannt. Braucht man lange zur einarbeitung und hat man weitere
Vorteile davon?

Kennt jmd. die Animationen bei Pflanzen gegen Zombies?
Zum einen bewegen sich die Pflanzen, hin und her und zum anderen greifen sie an. So werden mehrere
Animationen benutzt, aber wie geht das? (Ich brauche keine genaue Erklärung, sondern Anhaltspunkte,
wo ich zu suchen habe, oder was ich brauche)
 

PacMani

BeitragFr, Okt 21, 2011 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Draw3D ist eigentlich nicht schwer. Aber überstürze nicht gleich alles.
Es lassen sich auch ohne Draw3D gute Spiele erstellen Wink

Um deine zweite Frage zu beantworten: Die Herangehensweise bei 3D-Modellen und 2D-Bildern ist da sehr ähnlich. Du hast bei einem Bild alle benötigten Bilder in einer sinnvollen Reihenfolge hintereinander, bei 3D-Modellen sind das die benötigten Zwischenframes.
Du ordnest dann die Animationen z.B. so an:
15-Bilder Hin-und-Herbewegen
15-Bilder Angreifen (Kugeln spuckten die glaub ich ^^)

Und dann berechnest du dir die Indizes in der Gesamtliste der Einzelbilder raus, z.B. so
Hin-und-Herbewegen: Start = Index 0, Ende = Index 14
Anfreifen: Start = Index 15, Ende = Index 30
Dann muss man bei DrawImage immer den Index dazwischen übergeben...

[spoiler]
Bei meinem momentanen Spiel habe ich so etwas ähnliches mit 2D-Bildern gemacht. Und habe mir letztendlich einen Animation-Type geschrieben um mir die Arbeit zu erleichtern. Um mir immer wieder die gleiche Rechnerei für Animationen zu sparen überlasse ich das einfach einer UpdateAnimation()-Funktion. Du machst dann einfach CreateAnimation(ZuvorGeladenesAnimImage, ErsterFrame, LetzterFrame, [Animationstyp = Vorwärts], [Wiederholen = True], [Geschwindigkeit = 1.0]) und lässt in der Hauptschleife die Funktion UpdateAnimations() alle Frames der Animationen richtig (und FPS-unabhängig) neu berechnen.
Wenn du dann ein Bild brauchst, rufst du einfach DrawAnimation(AnimationXyz) auf und es wird der passende Frame gezeichnet.
Den Animationstype mit Funktionen poste ich demnächst im Codearchiv, kann sie dir aber auch schon im Vornherein schicken, schreib mir einfach ne PM.
[/spoiler]
 

Seven

BeitragSa, Okt 22, 2011 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Verstehe, danke.
Ich hab deinen Threat vorhin gesehen. Ich denke ich warte und kümmere mich erst einmal
um was anderes. Die Engine läuft ja noch nicht^^

und zu der hab ich auch gleich mal eine Frage; Ich habe mich umgeguckt und viele schwören auf Tiles
und die habe ich mir kurz angesehen. Die Auflösung beträgt 32x32. Kann man das verstellen?
bzw. ich habe das ausprobiert und dann lief es nicht mehr.

Vor allem geht es mir darum, dass es nicht mehr ein 1 : 1 Verhältnis in der Auflösung ist.

Xeres

Moderator

BeitragSa, Okt 22, 2011 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie groß du deine Tiles wählst, ist deine Entscheidung. Die Auflösung hat damit auch nicht wirklich zu tun - du brauchst halt genug Tiles um den Kartenbereich voll zu zeichnen.
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)
 

PacMani

BeitragSa, Okt 22, 2011 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Allerdings, meine Tiles sind z.B. 30x15 Pixel groß.
 

Seven

BeitragSo, Okt 23, 2011 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab vergessen die geänderten Zahlen in die For Next schleifen einzusetzen, deshalb ging es nicht Rolling Eyes

Gerade habe ich mir Draw3D angesehen. Es sieht unglaublich aus xD
Von dem neuem Spielzeug bin ich geradezu begeistert.

Beim Tut Bereich habe ich kein Tutorial dazu gefunden. Gibs etwa keins?
Heißt das per Hilfe Funktion lernen?

Naja, ich hab noch etwas Zeit und ich kann es mir nicht verkneifen, also stöbere
ich gleich die Befehle nach.

Falls Midimaster antwortet;
Bei der Gelegenheit mal eine andere Frage; Schon mal darüber nachgedacht ein Buch zu schreiben?

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group