Показать сообщение отдельно
Старый 02.12.2008, 13:44
dashaaa вне форума Посмотреть профиль Отправить личное сообщение для dashaaa Найти все сообщения от dashaaa
  № 5  
Ответить с цитированием
dashaaa

Регистрация: Sep 2008
Адрес: Moscow
Сообщений: 44
Отправить сообщение для dashaaa с помощью ICQ
NoCD, большое спасибо за пример и за внимание к вопросу!
Я только сегодня увидела ответ, поэтому вчера сама тоже до чего-то дошла.
Во-первых, предположительно, анимация с помощью класса Tween более плавная, чем если писать координаты, куда мувику переместиться (и удобнее - легко варьировать скорость движения в секундах).
Поэтому, я сделала вот так:
Код AS1/AS2:
import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.utils.Delegate;
class Ball extends MovieClip {
var initX:Number;
var initY:Number;
var FunnyAnimation:Tween;
var FunnyAnimation1:Tween;
var duration:Number = 2;
var comeBack:Boolean = false;
// максимальный сдвиг от начального положения. Можно сделать больше, для наглядности анимации
static var vibrShift = 10;
var lastShift:Number = 0;
var yo:Boolean = false;
 
function funAnimProlong() {
	FunnyAnimation1.onMotionFinished = null;
	FunnyAnimation.onMotionFinished = null;			
	Vibration();
}
public function shift(x_shift:Number, y_shift:Number):Void {
	FunnyAnimation = new Tween(this, "_x", None.easeNone, this._x, initX+x_shift, duration, true);
	FunnyAnimation1 = new Tween(this, "_y", None.easeNone, this._y, initY+y_shift, duration, true);
	FunnyAnimation.onMotionFinished = Delegate.create(this, funAnimProlong);
}
public function Vibration():Void {
	var direct:Number = Math.floor(Math.random()*4);
	if (direct == lastShift) {direct = (direct+1)%4;}
	lastShift = direct;
	var shX:Number = 5+Math.floor(vibrShift*Math.random());
	var shY:Number = 5+Math.floor(vibrShift*Math.random());
	switch (direct) {
		case 0 :shift(shX,shY);break;
		case 1 :shift(shX,(-1)*shY);break;
		case 2 :shift((-1)*shX,shY);break;
		case 3 :shift((-1)*shX,(-1)*shY);break;
	}
}
public function Ball() {
	initY = this._y;
	initX = this._x;
	Vibration();
}
}
Вот здесь можно лицезреть результат: vibr.rar

И, пока мувиклипов, которые двигаются таким образом мало (25) всё работает хорошо. Но когда их 100 начинаются подёргивания. Но мне-то нужно 100
Может можно переписать как-нибудь, чтобы не дёргалось? Вообще-то правильность функции funAnimProlong() вызвает у меня сомнения
И ещё вопрос - можно ли сделать чтобы анимация из одной точки в другую была не по прямой, а по какой-нибудь плавной линии?