Einleitung
Da ich schon immer versucht habe mal ein eigenes kleines 2D Spiel zu programmieren. (auch früher als ich AutoIt noch garnicht kannte)
Nun wollte ich gucken wie ich so etwas in AutoIt umsetzten kann. Meine erste Idee war es, Bilder zu benutzten und diese auf der GUI Oberfläche zu verschieben. Mein zweiter Gedanke war es, das ich vieleicht eine Funktion erstellen könnte mit der man einfach 2D Objekte erstellen kann, welche aber merken, wenn sie ein anderes Objekt berühren.
Einführung in das Thema
Prinzip Objekte/Grundlagen
_SetPlayingField()
Zu aller erst gibt man den Spielflächen Rand mit der Funktion _SetPlayingField() an. Denn ein Objekt soll merken wenn es den Rand des Spielfeld berührt. _SetPlayingField(0,0,500,500) setzt die größe des Spiefeldes auf 500*500 pixel und der obere linke punkt des feldes ist (0|0).
_CreateObject()
Man erstellt mit der _CreateObject() Funktion 4 eckige Bilder auf einem Spielfeld.
$testbild=_CreateObject("bild.jpg",100,450,50,50,"test",2) erstellt ein Bild mit dem Aussehen von der Datei bild.jpg an den Koordinaten x=100 und y=450. Was das "test" zu bedeuten hat spielt noch keine Bedeutung. Dafür ist der letzte wert wichtig. 0 ist für Objekte die keine anderen Berühren können, 1 ist für gegenstände die andere Berühren können aber den Rand nicht und 2 heißt sie können andere Objekte und den Rand berühren und das sie sich gegenseitig blocken.
_ObjectTouch()
Mit ObjectTouch können wir herausfinden ob ein Object irgend etwas anderes berührt. if _ObjectTouch($testbild)=0 Bei diesem Beispiel sehen wir, das der Wert 0 zurück gegeben wird, wenn das Object ncihts anders berührt und 1, wenn es was anders berührt.
_ObjectMove()
Diese Funktion ist sehr wichtig! Damit wird ein Objekt verschoben, hier der Beispiel Code: _MoveObject($testbild,"x",10)
Das $testbild Object wird auf der X-Achse um 10 nach rechts verschoben, aber nur wenn es nicht daran gehindert wird!
Fals ein anderes Objekt auf der Strecke liegt passiert garnichts! Wenn dies der fall ist gibt die FUnktion 0 zurück, ansonsten 1.
_DeleteObject()
Mit _DeleteObject($testbild) wird das Objekt wieder gelöscht.
Erweiterte Funktionen
Nachdem wir die Basis gelernt haben können wir schon einfache 2D Programme schreiben, doch es fehlen noch weitere nützliche Funktionen die einen neue Anwendungsmöglichkeiten erlauben. Eines davon sind die Objektgruppen.
Objekt Gruppen
Ihr habt die Möglichkeit eine Array von Objekten zu erstellen, dafür bietet meine UDF noch weitere wichtige Funktionen. Eine Array von Objekten wird hier auch Objekt Gruppe genannt.
_MoveObjectGroup()
Dieser Befehl arbeitet genau so wie _MoveObject(), nur das die Array der Objekte mitgegeben wird und alle Objekte in dieser Array verschoben werden. Wichtig ist, das die Array 1Dimensional ist und es keine leeren Elemente gibt.
Beispiel:
dim $testbild[2]
$testbild[0]=_CreateObject("bild.jpg",100,450,50,50,"test",2)
$testbild[1]=_CreateObject("bildB.jpg",100,400,50,50,"test",2)
_MoveObjectGroup($testbild,"x",5)
_ObjectGroupTouch()
Ich glaube hierzu muss ich nicht mehr viel sagen, es Funktioniert genau so wie _ObjectTouch()
_DeleteObjectGroup()
Mit _DeleteObjectGroup() wird die gesamte Objekt Array gelöscht. (Man sollte grundsätzlich Objekt Gruppen mit dieser Funktion löschen!)
Erweiterte Funktionen für Objekt Gruppen
_SetObjectGroup()
Damit wird eine Objekt Gruppe gesetzt, dies ist aber nicht zwingend notwendig, nur wenn man die Funktion _GetObjectGroup() benutzten will.
_GetObjectGroup()
Diese Funktion kann sehr nützlich sein, doch es wird die _SetObjectGroup() Funktion vorrausgetzt. Man gibt ein Objekt mit und fals es in einer Objekt Gruppe ist, wird die Array der Objekt Gruppe zurück gegeben, ansonsten der Wert 0.
Objekt Gruppen in Array
Vieleicht möchtest du eine Array von Objekt Gruppen machen, dies währe eine 2Dimensionale Array. Doch bei den ObjectGroup-FUnktionen kann man nur 1 Dimensionale Array mitgeben. Darum braucht man hier die Funktion _GetObjectGroupString() und _GetObjectGroupArray().
_GetObjectGroupString()
Wandelt die Array einer Objekt Gruppe in einen String, den man gut in einer Array speichern kann.
_GetObjectGroupArray()
Damit sich das ganze lohnt wandelt man mit dieser Funktion den String wieder in eine Array um und kann ihn weiter benutzten
Klassen
Ganz zu beginn der ANleitung haben wir uns gefragt, wofür das "test" in _CreateObject("bild.jpg",100,450,50,50,"test",2) nützlich sein könnte. Dieses "test" ordnet das Objekt der Klasse "test" zu. Und wann wird das gebraucht?
_ObjectTouchClass()
Dies Funktioniert genau so wie _ObjectTouch(), nur das diesmal überprüft wird ob das Objekt ein anders Objekt einer bestimmten Klasse berührt.
if _ObjectTouchClass($hans,"test")=1 then
_ObjectGroupTouchClass()
Dies ist nochmal dasselbe, nur das überprüft wird ob eine Objekt Gruppe eine Klasse berührt.
Mein Beispiel:
Damit habe ich dann ein ganz ganz einfaches Jump&Run gemacht.
Man steuert eine Kreuz und kann nach rechts/links laufen und mit leer auf andere Kisten springen.
Außerdem gibt es Pilze welche sich die ganze zeit bewegen. Wird man von ihnen berührt, stirbt man. Springt man auf sie drauf, verschwinden sie.
(So wie bei Super Mario)
Download:
Last Update: 13.2.2009
MfG Oger-Lord