motion ease

flashsi

Erfahrenes Mitglied
Hallo,

könnte mir jemand behilflich sein?
Ich habe einen MC, der soll, wenn man ihn anklickt von seiner Position nach unten fallen. Wie kann ich das mit AS realisieren?

Grüsse


----------

Bin nun selber weiter gekommen. Sie so aus:


b.onMouseDown = function () {
fallen = 1;
}
b.onEnterFrame = function(){
this._y = this._y + fallen;
fallen = fallen + 0.5;

}

Kann man das einfacher schreiben? Und wie kann ich den Fall bei y=300 stoppen? Mit

if (_y = 300) {
stop();
}

funktioniert das nicht.

Danke
 
Zuletzt bearbeitet:
Naja - du kannst testen ob das ganze über 300 herübergeht. Sonderlich genau wird das aber nicht werden, wenn du die Fallgeschwindigkeit variierst - du müsstest ja exakt auf die 300 kommen. if(b._y <= 300).

Ansonsten ist das der richtige Weg :) Kleiner Tipp:

Code:
this._y = this._y + fallen;
fallen = fallen + 0.5;

entspricht

Code:
this._y += fallen;
fallen += 0.5;

(Und es gibt [ code ] - Fenster :) )
 
Vielen Dank. Da werde ich dran rumbasteln.
Wie kann ich denn den _x und _y Wert eines MC auslesen und in eine Variable packen?

Ich habe das so gemacht:

Code:
b._y = werty;
trace(werty);

Ergibt aber immer undifined.

Und vielleicht noch was: mit was für einer Formel erreiche ich denn in AS eine Ease-Funktion? Mit dem verschnellern klappts. Aber das einbremsen bekomme ich nicht hin.

Grüsse
 
Du speicherst Werte bei Variablen von rechts nach links in die Variable.
Zu erst must du die Variable deklarieren
Code:
var wetry;
Danach kannst du dieser Variable den Wert zuweisen
Code:
werty = b._y;
Und nun kannst du ihn aus geben.
Code:
trace(werty);

Das ganze geht dann auch schneller und sieht so aus
Code:
var werty = b._y;
trace(werty);
 
Ja ich würde so etwas mit der Tween Klasse von Flash realisieren.

Such am besten mal in der Flashhilfe ( F1 drück ) nach "mx.transitions.Tween". Da ist es perfekt erklärt wie man Tweens mit Hilfe von Actionscript machen kann.

Ein kleines Beispiel:
Code:
import mx.transitions.Tween;

b.onRelease = function () {
	var end = b._y + 200;
	falldown(b._y, end);
}
function falldown(pBegin, pEnd){ 
	var myTween:Tween = new Tween(this.b, "_y", mx.transitions.easing.Regular.easeOut, pBegin, pEnd, 0.2, true);
}
 
Das eröffnet eine ganz neue Ebene. Und machts zugleich komplizierter.
Wenn Du mir noch was helfen könntest:

Ich habe mehrer Zeichen als MC auf der Bühne, die ich auf einen klick alle nacheinander nach rechts verschieben möchte. D.h. ich muss die Variable zeichen immer wieder mit einem neuen "Buchstaben" belegen, die dann nacheinander nach links sliden. Aber auf einen klick. Kompliziert.

Code:
var zeichen = b1, (dann intervall), b3 (neuer Intervall), usw.;


Code:
import mx.transitions.Tween;




strich.onPress = function () {
	var end = zeichen._x + 100;
	slideright(zeichen._x, end);
}
function slideright(pBegin, pEnd){ 
	var myTween:Tween = new Tween(this.zeichen, "_x", mx.transitions.easing.Back.easeOut, pBegin, pEnd, 3, true);
}


Ich muss bei jedem Durchgang die var zeichen neu belegen. Und ihm sagen, er soll so und so viele Durchgänge machen.


Wenns Dich nicht nervt, mir würde es viel helfen.


------------------------------

Code:
var zeichen = ["b1","b2","b3","b4","b5"];


import mx.transitions.Tween;

strich.onPress = function () {
	i = 0;
	var end = zeichen[i]._x + 100;
	slideright(zeichen[i]._x, end);
}
function slideright(pBegin, pEnd){ 
	var myTween:Tween = new Tween(this.zeichen[i], "_x", mx.transitions.easing.Back.easeOut, pBegin, pEnd, 3, true);
}

i = i++;

Damit bin ich doch schon nah dran, oder?


Grüsse
 
Zuletzt bearbeitet:
Naja nicht so wirklich.
Also wenn ich das richtig verstanden habe willst du b1, b2 etc nach und nach tweenen lassen. D.H. wenn der eine fertig ist soll der nächste kommen oder sich ein bisschen überlappen.

Zeitintervalle in denen das Programm warten soll löst man mit setInterval. Diesen kann man dann mit clearInterval auch wieder beenden, damit er nicht von vorne beginnt. Da du mehrere Intervalle hast musst du diese in Funktionen packen und sie immer dann aufrufen wenn der alte Interval zu Ende ist.

Konkret sieht dies dann so aus:

Code:
import mx.transitions.Tween;

var zeichen = ["b1","b2","b3","b4","b5"];
var interval;
var end;
var begin;
var i;
var intDuration = 1000;  // Milisekunden
var tweenDuration = 3;	 // Sekunden

strich.onPress = function () {
	i = -1;
	newInterval();
}

function newInterval(){
	i++;
	interval = setInterval(wait, intDuration);
}

function wait(){
	clearInterval(interval);
	slideright(i);
	if(i <= zeichen.length)	newInterval();
}

function slideright(i){ 
	begin = this[zeichen[i]]._x;
	end = this[zeichen[i]]._x + 100;
	var myTween:Tween = new Tween(this[zeichen[i]], "_x", mx.transitions.easing.Back.easeOut, begin, end, tweenDuration, true);
}

beim Drücken den Buttons wird nun die Funktion newInterval(); aufgerufen und dort dann gewartet dann wird die Funktion wait() aufgerufen welche den Interval löscht das Tween beginnt und wenn i noch nicht gleichgroß ist wie zeichen.length wird das wiederholt.

Wenn du willst, das gleich beim Drücken der erste MC sich bewegen soll muss du es so machen.

Code:
strich.onPress = function () {
	i = 0;
	slideright(0);
	newInterval();
}

So wird einfach der 1. MC gleich verschoben und der Interval gilt nur für den 2.MC
 
Das ist klasse! Vielen Dank. Damit kann ich schon gut rumbasteln. Und ich checks auch so langsam.
Wenn Du mal Schauspielunterricht brauchst - melde Dich.


Grüsse
 
Zurück