|
Einleitung
Die Grundstruktur
Die neun Puzzleteile
Das Einrasten der Puzzleteile
in das
Gitternetz
Zur Positionierung der Puzzleteile
Was bringt dieses Tutorial?
![]()
Willkommen zum Puzzle Tutorial. Hier wird auf sehr einfache Weise gezeigt, wie
du mit hitTests und if-Schleifen ein Puzzlespiel erstellen kannst.
![]()
![]()
![]()
Die Grundstuktur
![]()
Das Puzzlespiel besteht im Wesentichen aus drei Keyframes: Im ersten Keyframe
wird überprüft, ob jedes Puzzleteil an der richtigen Stelle liegt.
Ist dies der Fall, springt Flash zum dritten Keyframe und das Puzzle ist fertig.
Im dritten Frame ist auch eine Schaltfläche "nochmal spielen"
eingefügt. Wenn noch nicht alle Puzzleteile an der richtigen Stelle liegen,
springt Flash zum zweiten Keyframe und führt die dort stehende Anweisung
aus: "gotoAndPlay (1);". Diese Schleife wird so lange durchgeführt,
bis alle Puzzleteie an der richtigen Stelle liegen.
Die Überprüfung im ersten Keyframe, ob alle Puzzleteile an der richtigen
Stelle liegen:
if ( _root.pic_1.hitTest(_root.hit_1)==true)Zu beachten ist hier, dass die If-Schleifen ineinander verschachtelt sind. Erst wenn alle Bedingungen erfüllt sind, wird die entsprechende gotoAndStop-Anweisung ausgeführt.
{if ( _root.pic_2.hitTest(_root.hit_2)==true)
{if ( _root.pic_3.hitTest(_root.hit_3)==true)
{if ( _root.pic_4.hitTest(_root.hit_4)==true)
{if ( _root.pic_5.hitTest(_root.hit_5)==true)
{if ( _root.pic_6.hitTest(_root.hit_6)==true)
{if ( _root.pic_7.hitTest(_root.hit_7)==true)
{if ( _root.pic_8.hitTest(_root.hit_8)==true)
{if ( _root.pic_9.hitTest(_root.hit_9)==true)
{gotoAndStop(3);}}}}}}}}}
on (press) {
startDrag (this, true);}
on (release) {
stopDrag ();

Nachdem das Puzzleteil über dem Gitternetz losgelassen worden ist, erfolgt
eine hitTest Abfrage: Es wird überprüft, ob sich das Puzzleteil mit
einem kleinen grünen Quadrat ( ist normalerweise nicht sichtbar wg. Alphawert
= 0 % ) überschneidet. Ist dies der Fall, wird das Puzzleteil zentriert
in das Quadrat eingesetzt. Dies wird jeweils mit der Zeile "this._x= .
. ." erreicht. Die neun Puzzleteile habe ich pic_1, pic_2, usw. und die
kleinen Quadrate, die für den hitTest gebraucht werden, hit_1, hit_2 usw.
genannt. Man könnte anstatt von "this" auch jeweils immer den
Namen des jeweiligen Puzzleteiles "pic_1, pic_2, ect. " schreiben.
Die Verwendung von "this" hat hier den Vorteil, dass man den Quellcode
von dragger für jedes Puzzleteil verwenden kann.:
if ( this.hitTest(_root.hit_1)==true)
{this._x=_root.puzzlex; this._y=_root.puzzley;}
if ( this.hitTest(_root.hit_2)==true)
{this._x=_root.puzzlex+40; this._y=_root.puzzley;}
if ( this.hitTest(_root.hit_3)==true)
{this._x=_root.puzzlex+80; this._y=_root.puzzley;}
if ( this.hitTest(_root.hit_4)==true)
{this._x=_root.puzzlex; this._y=_root.puzzley+40;}
if ( this.hitTest(_root.hit_5)==true)
{this._x=_root.puzzlex+40; this._y=_root.puzzley+40;}
if ( this.hitTest(_root.hit_6)==true)
{this._x=_root.puzzlex+80; this._y=_root.puzzley+40;}
if ( this.hitTest(_root.hit_7)==true)
{this._x=_root.puzzlex; this._y=_root.puzzley+80;}
if ( this.hitTest(_root.hit_8)==true)
{this._x=_root.puzzlex+40; this._y=_root.puzzley+80;}
if ( this.hitTest(_root.hit_9)==true)
{this._x=_root.puzzlex+80; this._y=_root.puzzley+80;} }
Wichtig hierbei ist, dass die hitTest-Abfragen jeweils in der Klammer der on(release)-Anweisung stehen, damit die hitTests jedesmal stattfinden, wenn die Maustaste losgelassen wird:
on (release) {
stopDrag ();
if ( this.hitTest(_root.hit_1 )==true)
{this._x=_root.puzzlex; this._y=_root.puzzley;}
}
