Idee und Hilfe zu dem Robot Control Tutorial

boyi

Grünschnabel
Hallo,
Ich hätte eine Frage zu dem Tutorial von Matthias Kannengiesser " Robot Control"
http://www.tutorials.de/tutorials11336.html
und würde mich auf jede Hilfe freuen.
Und zwar geht es dadrum, dass bei der fünften Variante die Funktion Sprung hinzugekommen ist.
} else if (Key.isDown(Key.SPACE)) {
this.gotoAndStop("Sprung");

Ich möchte jetzt aus dieser Höpffunktion (durch das Drücken der Leertaste) eine andere machen.
Meine Figur soll dabei nicht springen, sondern durch das drücken dieser Taste eine Interaktion gestartet werden. Zum Beispiel, sollte sich ein Bild öffnen oder eine externe swf Datei gestartet werden.
Das ganze sollte aber nicht passieren, sobald der Benutzer die Leertaste drückt.
Sondern erst dann, wenn meine Figur an einem bestimmten Punkt gelangt ist.
Ein Beispiel um das zu verdeutlichen.
Nehmen wir an, der Robot spaziert über einen Stein, und in dem Moment drückt der benutzer die Leertaste, erst dann soll die Interaktion stattfinden.
Wie löse ich dieses Problem?
Wie ihr sehen könnt, bin ich noch nicht fitt in Flash, so würde ich mich auf "Hilfe für dummis" freuen.
Danke im Vorraus.
 
Hi,
Ansatzweise hast Du Dein Problem doch schon fast gelöst.

"Sondern erst dann, wenn meine Figur an einem bestimmten Punkt gelangt ist.
"
In Flash gibt es ein Koordinatensystem, welches Dir die Möglichkeit bietet die Position des Movieclips zu ermitteln. Im folgenden Script wird abgefragt ob die Positionauf der X-Achse des Movieclips grösser als 250 ist, wenn ja gehezu und spiele Frame 1.
PHP:
onClipEvent(enterFrame){
	if(this._x>=250){
		this.gotoAndPlay(1);
	}
Um das ganze noch an eine Taste zu binden kannst Du das Script noch wie folgt erweitern:
PHP:
onClipEvent(enterFrame){
	if((this._x>=250)&&(Key.isDown(key.SPACE)){
		this.gotoAndPlay(1);
	}
Der && Operator lässt einen 2 Bedingungen gleichzeitig abfragen, also würde das ganze wirklich erst dann initialisiert werden, wenn der MC auf der x Achse weiter als 250 ist UND die Leertaste gedrückt wird.

Das ganze kann man auch mit einem Hittest realiseren, wobei man dann 2 kollidierenden Movieclips benötigt und nicht nach dem Koordinatensystem arbeitet. Dazu brauchst du einfach einen Movieclip "stein" und Deinen Roboter. Aber wie genau man das macht lass ich Dich mal selbst herausfinden, hab mir den ganzen Kram auch alles Mühseelig aus Büchern, Foren und der Referenz gesucht.

Hoffe aber ich konnte trotzdem weiterhelfen,
mfg
ikon
 
Zuletzt bearbeitet:
Ok irgendwie komme ich nicht weiter, mein Script sieht bisher so aus:

Code:
onClipEvent (enterFrame) }
	 laufen(480, 50, 295, 279, 0.8, 0.5, 1.75,_y/36);
    
     if ((this._x>=250)&&(Key.isDown(key.SPACE)) {
        this.gotoAndPlay(1);
    }  
}

Als Fehler wird folgendes gemeldet:

Code:
**Fehler** Szene=Scene 1, Ebene=Läufer, Bild=1:Zeile 1: '{' erwartet
     onClipEvent (enterFrame) }

**Fehler** Szene=Scene 1, Ebene=Läufer, Bild=1:Zeile 2: Anweisung muss innerhalb einer onClipEvent-Prozedur vorliegen
     	 laufen(480, 50, 295, 279, 0.8, 0.5, 1.75,_y/36);

**Fehler** Szene=Scene 1, Ebene=Läufer, Bild=1:Zeile 3: ')' erwartet
         if((this._x>=250)&&(Key.isDown(key.SPACE)){

**Fehler** Szene=Scene 1, Ebene=Läufer, Bild=1:Zeile 6: Unerwartetes Auftreten von '}
     }

Wenn ich zum Beispiel, in Zeile eins aus meinem { ein } mache, so erhalte ich einen Syntaxfehler. Was mache ich falsch?
 
dann schreib es doch so..
PHP:
 onClipEvent (enterFrame) {
 	 laufen(480, 50, 295, 279, 0.8, 0.5, 1.75,_y/36);
     
      if ((this._x>=250)&&(Key.isDown(key.SPACE)) {
         this.gotoAndPlay(1);
     }  
 }
und achte darauf das es nicht movieclip.prototype
sondern MovieClip.prototype heißt
 
Zuletzt bearbeitet:
Danke. Am Ende war nicht nur das - onClipEvent (enterFrame) }
Falsch, sondern auch eine Klammer in Zeile 3 hatte ich vergessen zu setzen.
Bitte diesen Thread noch nicht schließen, vielleicht habe ich noch die ein oder andere Frage. Danke für Eure Hilfe.
 
Ok neues Problem.
Nun möchte ich meine Figur so erweitern, dass beim drücken der Spacetaste, ein Sound abgespielt wird.
Habe die sound Datei in die Bibliothek importiert (Name der Datei : creepy)
Mein code sieht so aus:

PHP:
MovieClip.prototype.tonstart = function () {
	ton = new Sound(this);
	ton.attachSound (Key.isDown(key.SPACE));
	ton.start(0,1);
 }

Ich erhalte keine Fehlermeldung, trotzdem passiert nichts beim drücken der Space Taste.
Meine zweite Variante für den Quellcode wäre:
PHP:
MovieClip.prototype.tonstart = function () {
	ton = new Sound(this);
	ton.attachSound("SPACE");
	ton.start(0,1);
}

Auch hier passiert nichts. Was habe ich falsch bzw. vergessen?
 
Zuletzt bearbeitet:
ton.attachSound (Key.isDown(key.SPACE));
Also, das kann schonmal garnicht funktionieren; willst Du einem Soundobjekt die bool'sche Rückgabe der isDown-Funktion zuweisen?

Du brauchst den Sound auch nicht bei jedem Aufruf zu attachen, einmal reicht:
PHP:
MovieClip.prototype.ton_init = function(sname) {
    this.sound = new Sound(this);
    this.sound.attachSound(sname);
}

MovieClip.prototype.tonstart = function() {
    this.sound.start();
}

meinMovieClip.ton_init("meinsound.mp3");
Damit kannst Du jedem MovieClip einen Sound zuweisen. Abspielen könntest Du ihn dann z.B. mit diesem Aufruf:
PHP:
meinMovieClip.tonstart();
Zum Anlegen, Verwalten und Abspielen von Sounds gibt es etliche Herangehensweisen (von simpel bis sehr flexibel). Wenn Du in der Forumsuche nach den Begriffen "Sound", "Sound Objekt" oder "attachSound" suchst, solltest Du viele Threads finden, in denen diverse Ansätze erklärt werden.

Gruß
.
 
Zuletzt bearbeitet:
Danke für deine Hilfe. Habe es mit deiner Variante versucht.
Doch wie zuvor, keine Fehlermeldung und auch kein sound.
Mein Quellcode:
PHP:
 MovieClip.prototype.ton_init = function(Creepy) {
    this.sound = new Sound(this);
    this.sound.attachSound(Creepy);
}

MovieClip.prototype.tonstart = function() {
    this.sound.start();
}
 
Hi,

bei mir funktioniert es mit exakt diesem Code. Hast Du den Sound auch zum Export für AS freigegeben?

Ansonsten: hier habe ich nochmal einen Prototype zur Soundsteuerung hingestellt, der etwas flexibler arbeitet.

Gruß
.
 

Neue Beiträge

Zurück