Instance mit onClipEvent(mouseDown) im Intervall bewegen

LiveLongLearning

Grünschnabel
Ich moechte ein einfaches Spiel ,das ich im Internet gesehen habe, nachbauen um mit einer Gruppe von Schuelern etwas ActionScripting in Flash zu ueben.
Leider bin ich selbst noch ganz am Anfang mit meinen Kenntnissen.
Hier die Adresse des Spiels: http://www.seethru.co.uk/games/helicopter.htm

Soweit bin ich gekommen:
Ich habe eine Instance eines MovieClips (fliegender Helicopter) in einem Layer.
Der Helicopter bewegt sich staendig nach unten.
Das habe ich mit folgendem Action Script zum Movie Clip hinbekommen.

onClipEvent (enterFrame) {
this._y = this._y + 5;
}

Ich moechte nun, dass man der Abwaertsbewegung sozusagen entgegensteuern kann indem man die linke Maustaste gedrueckt haelt.
Leider bewegt sich der MovieClip nur einmal nach oben obwohl ich denke, dass ich mit 'setInterval' angebe, das diese Zeile des codes staendig (10 mal pro Sekunde) wiederholt werden soll.

onClipEvent(mouseDown){
helisteps = setInterval(this._y = this._y - 25, 100);
}

Ich hoffe meine Erklaerungen sind verstaendlich.
Weiss jemand wo mein Denkfehler liegt? Und hat jemand die Geduld mir zu helfen?

Danke im voraus.
 
Hi,

ich würde das so machen:

Code:
blubb = 0;
_root.onMouseDown = function() {
 blubb = 1;
}
_root.onMouseUp = function() {
 blubb = 0;
}

_root.onEnterFrame = function() {
 if(blubb) {
  _root.helicopter._y += 10;
 } else {
  _root.helikopter._y -= 10;
 }
}

Ungetestet, sollte aber funktionieren.

Gruß
jens
 
Getestet und funktioniert.
Habe aber ein Frame Script benutzen muessen. Als Movie Clip Action gings nicht.
Bin jedenfalss ganz happy mit dem Ergebnis.

Danke! Das hat meinen Sonntag gerettet!

Gruss
Monika
 
Ja das ist nen Frmecode -

onClipEvent(enterFrame) <- Objektcode, veraltet
_root.onEnterFrame = function() <- Framecode, neu!

Gruß
jens (der hofft dass du das deinen schüern ordentlich beibringst :-) )
 
Danke Jens.
Dabei hatte ich das aus irgend einer Beispieldatei in der Hilfe genommen.
Tja, man kann sich halt auf nix mehr verlassen.

Ich freue mich jedenfalls sehr, dass ich hier so schnell und unkompliziert Hilfe finde.

Gruss
Monika
 
Noch was zu
helisteps = setInterval(this._y = this._y - 25, 100);

Intervalle kannst Du natürlich auch verwenden (macht vor allem dann Sinn, wenn Du Aufrufe in einem anderen Intervall als die Framerate benötigst. Allerdings ist der Aufruf ein etwas anderer. setInterval erwartet eine Funktion als ersten Parameter:
PHP:
clearInterval(helisteps);
helisteps = setInterval(function() { _y = _y - 25; }, 100);
(this kannst Du in dieser Funktion ebenfalls nicht verwenden, da es sich nicht um eine Objektmethode handelt)

Du müsstest dann zusätzlich clearInterval bei einem mouseUp aufrufen.

Gruß
.
 
Zuletzt bearbeitet:
Sorry for the delay - war ein paar Tage unterwegs.

Ehrlich gesagt 'schwahnt' mir nur was mit 'Objektmethode' gemeint ist.
Ich kann diesen Weg zwar in meiner Datei nachvollziehen, erklaeren koennte ich das ganze nicht.
Muss auch zugeben, dass ich immer noch kein gescheites Buch habe.
Meine Programmierkenntnisse beschraenken sich auf ein wenig VisualBasic und JavaScript.
Kannst Du mir eventuell eines empfehlen?
Habe uebrigens unter ' Verliere Motion Tween nach Action Script' schon mein naechstes Problem in Forum gelistet.

Danke fuer Dein Interesse.
Monika
 
Hmm, ich versuchs mal zu erklären:

"this" verweist auf das aktuelle Objekt (sprich: entweder die Hauptzeitleiste, oder eben den MC, in dem Du Dich befindest). In Funktionen, die auf einer Zeitleiste angelegt wurden, kannst Du "this" daher verwenden, um auf den aktuellen MC zu verweisen.

Machst Du aber z.B. folgendes:
PHP:
var bla = new Object();
bla.machwas = function() {
    trace(this);
}

bla.machwas();
, wirst Du in der trace-Aktion keine Referenz auf den Clip, in dem das Script steht, ausgegeben bekommen, sondern eine Referenz auf das Objekt "bla".

Ähnlich ist es bei einer Funktion, die "on the fly" direkt im Aufruf von setInterval angelegt wird: Da diese Funktion nicht direkt zu dem MC gehört, in dem Du Dich befindest (sondern eigentlich zu gar keinem Objekt), bekommst Du mit "this" auch keine Referenz auf diesen Clip.

Gruß
.
 
Zurück