4
5 ///////////////////////////////
6
7 function main()
8 {
9 vec_set(screen_size,vector(800,400,0));
10 vec_set(screen_color,vector(50,1,1)); // dark blue
11 vec_set(sky_color,vector(50,1,1)); // dark blue
12 video_window(NULL,NULL,0,"My New Game");
13 d3d_antialias = 1;
14 shadow_stencil = 3;
15
16 level_load("my_level.wmb");
17 vec_set(camera.x,vector(-250,0,50));
18 vec_set(camera.pan,vector(0,-15,0));
19
20 }
Die beiden Includes oben im Skript sind die Standard, also Default Dateien die für ein Spiel notwendig sind. Dabei wird mit "acknex.h" die Header Datei geladen welche auf die Acknex8 Engine zugreift und in "default.c" sind Standardbefehle für die grundlegende Kamerasteuerung enthalten.
Mit der Main Funktion wird ein Fenster in der Größe 800x400 mit der Bildschirmfarbe Dunkel Blau generiert (Z. 9+10) und eine Himmelsfarbe für das zu ladende Level definiert (Z. 11).
Ebenfalls wird das Fenster noch Formatiert und mit einer Beschriftung des Rahemens versehen "My New Game" (Z. 12). In den nächsten beiden Befhelen wird die Stufe des Antialias und der Schattentypus festgelegt (Z. 13+14).
Die Letzten drei Befehle sind für das zu ladende Level was wir für unser "Hallo Welt" Programm nicht benötigen. Mit dem Befehl "level_load" wird das Level geladen und mit den "vec_set" Befehlen wird die Kamera ausgerichtet.
Dies ist wie bereits gesagt ein kleines 20 Zeilen Skript um bereits ein Level mit allen Einstellungen zu laden. Für unser "Hallo Welt" Programm benötigen wir nur:
1 ///////////////////////////////
2 #include <acknex.h>
3 #include <default.c>
4
5 ///////////////////////////////
6
7 function main()
8 {
9 vec_set(screen_size,vector(800,400,0));
10 vec_set(screen_color,vector(50,1,1));
11 video_window(NULL,NULL,0,"My New Game");
12 }
Hierbei ist jedoch der 3. Befehl in Zeile 11 nur optional, weil damit ledeglich das Fenster Formatiert und Text auf dem Rahmen angezeigt wird.
1.2.2 Texte
Um jetzt den gewünschten Text "Hallo Welt" zu definieren, der später angezeigt werden soll müssen wir jetzt einen sogenannten String definieren in dem der Text steht.
Dieser wird wie folgt definiert:
STRING* hallo_welt = "Hallo Welt !";
Dieser String muss zwischen den Includes und der Main-Funktion stehen um als Global gesetzt zu sein. Wenn er in der Main-Funktion oder einer anderen Funktion steht gilt er nur für diese Funktion in der der String steht und kann von keiner Funktion Action oder Text ausserhalb genutzt werden.
Als nächstes muss der Text definiert werden welcher der String sein soll. Im Text werden neben dem String noch die Position am Bildschirm, die Schriftart (Font) und der Layer definiert.
Der Layer ist die Schicht auf der sich der Text befinden soll. Objekte, Texte oder Panels mit einem höheren Layer werden über den Text gelegt und mit einem niedrigeren Layer darunter.
Ein Text lässt sich wie folgt definieren:
STRING* hallo_welt = "Hallo Welt !";
FONT* txtfont1 = "Arial#20";
TEXT* hw_text =
{
string = hallo_welt;
pos_x = 50;
pos_y = 50;
font = txtfont1;
layer = 1;
}
oder:
TEXT* hw_text =
{
string = "Hallo Welt !";
pos_x = 50;
pos_y = 50;
font = "Arial#20";
layer = 1;
}
Hier sind zwei Beispiele aufgeführt wie man einen Text definieren kann. Einmal mit String und Font als Vordefinietion und einmal mit integrierter String und Font definition.
Der Text Hallo Welt wird mit dieser Text definition in der Schriftart Arial mit Schriftgröße 20 an Bildposition (50|50) angezeigt.
Man beachte aber das hierbei die X|Y-Koordinatien nicht von links unten nach rechts oben betrachtet werden soinder von links oben nach rechts unten!
Natürlich muss der Text jetzt noch auf dem Bildschirm dargestellt werden.
Dafür gibt es zwei Varianten wie man das bewerkställigen kann.
Man kann zum einen in der Textdefinietion die sogenannten Flags oder Flags2 Elemente setzten (SHOW) oder man kann in der Main-Funktion mit dem Befehl "set(...) den Text darstellen.
TEXT* hw_text =
{
string = hallo_welt;
pos_x = 50;
pos_y = 50;
font = txtfont1;
flags2 = SHOW;
}
oder:
function main()
{
...
set(hw_text,SHOW);
...
}
Welche von den beiden Varianten man jetzt am besten benutzt hängt davon ab wie man Programmiert und vor allen soll der Text dauerhaft oder nur per Aufruf sichtbar sein.
Für dauerhafte Darstellung sollte man die Variante mit den flags in der Textdefinition benutzten und für Text der per Afuruf erscheinen und verschwinden soll set(...). Bei dem Befehl set(...) kann man um den Text wieder von Bildschirm zu entfernen vor dem SHOW ein Ausrufezeichen "!" setzen:
Text sichtbar:
set(hw_text,SHOW);
Text nicht sichtbar:
reset(hw_text,SHOW);
Das besagte Ausrufezeichen steht in fast allen Programmiersprachen für "Nicht" also besagt der Befehl einfach nur: Text hw_text, Nicht SHOW/Zeigen.
1.2.3 Das fertige Skript
Im ganzen gesehen sieht das "Hallo Welt" Skript jetzt so aus:
1 ///////////////////////////////
2 #include <acknex.h>
3 #include <default.c>
4
5 ///////////////////////////////
6
7 STRING* hallo_welt = "Hallo Welt !";
8 FONT* txtfont1 = "Arial#20";
9
10 TEXT* hw_text =
11 {
12 string = hallo_welt;
13 pos_x = 50;
14 pos_y = 50;
15 font = txtfont1;
16 layer = 1;
17 }
18
19 function main()
20 {
21 vec_set(screen_size,vector(800,400,0));
22 vec_set(screen_color,vector(50,1,1));
23 video_window(NULL,NULL,0,"My New Game");
24 set(hw_text,SHOW);
25 }
Dies ist jedoch nur eine der möglichkeiten wie man das zusammenstellen kann, man kann wie gsagt die Font und String definition gleich in die Textdefinition schreiben oder den Text über eine Flag Definition direkt anzeigen lassen. Wenn man den Text direkt über diese Definition anzeigen lässt ich nicht umbedingt eine Main Funktion notwendig. Dafür, weil ja in der Main Funktion alle Bildformatierungen definiert wurden wird das Fenster halt in der Default Einstellung dargestellt.
Dies war jetzt ein Beispiel wie man in Lite-C ein "Halloe Welt" Programm schreibt. Man kann mit der A8 Engine aber auch Windows Anwendungen schreiben. Dies benötigt jedoch extra Headerdateien und Befehle die im Handbuch zu 3D Game Studio leider nicht weiter erleutert werden.
Im Sample-Ordner von 3D Game Studio findet man bereits ein Skript mit dem Namen "Hello World". Darin wird ein "Hallo Welt" Programm gezeigt wie es in dieser Form geschrieben wird.
In dem Skript steht folgendes:
1 #include <litec.h>
2
3 int WinMain()
4 {
5 MessageBox(NULL,"Hello,World!","My first program",0);
6 }
Dieses 6 Zeilige Skript besitzt nur ein Include für die Header Datei "litec.h". Die wird für solche Operationen benötigt. Die Main Funktion heißt hier anderes, sie ist eine Integerfunktion namens WinMain. Diese sagt der Engine das dies die Main Funktion für ein Windowsprogramm sein woll.
In dieser Funktion steht ein einziger Befehl "MessageBox". Dieser erstellt ein kleines Default-Windowsfenster mit normalen weißen Hintergrund indem der Text "Hello World!" aufgeführt wird.
Dies ist aber für das Spieleprogrammieren mit Lite-C nicht wirklich von belangen, also können wir das bei Seite schieben.
Variablen und Strings
Variablen und Strings sind einer, wenn nicht sogar der Wichtigste Bestandteil eines jeden Quellcodes, vor allem die Variablen.
Beide vorgestellten Skripte sind hier zum Download bereitgestellt.
Skript 1
Skript 2