PDA

Просмотр полной версии : Плавный программный scale из класса.


Violent_C
09.03.2006, 04:39
Здравствуйте.
Есть класс Cards и залинкованный к нему мувик Card_mc.
Вопрос такой - как можно программно в классе по наведению мыши на мувик (onRollOver) сделать плавный scale до 120% скажем за 5 кадров, и по onRollOut соскейлить назад до 100% тоже за 5 кадров?
Спасибо заранее.

Usnul
09.03.2006, 04:48
onMovieClipEvent(enterFrame){
if(this.hitTest(this._xmouse,this._ymouse,true) and this._width<120){
this._width+=4;
}
else if(this._width>100){
this._width-=4;
}
}

в редактор не загонял, но если ты припишешь этот код на свой мувик то эффек будет приближен к тому что ты хочешь.

ЗЫ
про скейл читай мануал, я непомню точные имена свойств.

Король
09.03.2006, 05:19
Делюсь.



MovieClip.prototype.tween = function(tweens, speed, onComplete) {
if (!this.controller) {
this.controller = this.createEmptyMovieClip('controller', 0);
}
this.goals = {};
this.t = 0;
this.onComplete = onComplete;
this.amounts = {};
this.regularSteps = {};
this.speed = speed;
this.v = 0;
for (var i in arguments[0]) {
this.goals[i] = arguments[0][i];
this.regularSteps[i] = (this.goals[i]-this[i])/this.speed;
this.amounts[i] = [];
for (var v = 0; v<=this.speed; v++) {
this.amounts[i][v] = this.regularSteps[i];
}
}
this.controller.onEnterFrame = function() {
for (var i in this._parent.goals) {
this._parent[i] += this._parent.amounts[i][this._parent.t];
}
this._parent.t++;
if (this._parent.t>=this._parent.speed) {
delete this.onEnterFrame;
this._parent.onComplete();
}
};
};



Прототип использовать оч легко - просто создаешь объект такого вида:


tw = {_x:100, _y:300, _xscale:300, _alpha:45, _width:213}


и вызываешь твин -


speed = 10
onComplete = 0
mc.tween(tw, speed, onComplete)


прототип удобен прежде всего тем, что можно запихать в объект трансформации любые поддерживаемые свойствa мувика в любом количестве, и он в них превратится

nuran
09.03.2006, 06:41
а может проще воспользоваться mx.transitions.Tween (кто не в теме -- поиск рулит) ?

Король
09.03.2006, 06:45
в mx.transitions.Tween для транзишна каждого свойства нужен отдельный твин (я могу ошибаться конечно, но по-моему это так), а тут - все сразу.

Olmer
09.03.2006, 11:15
А можно по подробнее о прототипах?

Король
09.03.2006, 11:17
что именно?

silin
09.03.2006, 12:22
Здравствуйте.
Есть класс Cards и залинкованный к нему мувик Card_mc.
Вопрос такой - как можно программно в классе по наведению мыши на мувик (onRollOver) сделать плавный scale до 120% скажем за 5 кадров, и по onRollOut соскейлить назад до 100% тоже за 5 кадров?
Спасибо заранее.
import mx.transitions.Tween;
class Cards extends MovieClip{
function onRollOver(){
new Tween(this,'_xscale',null,_xscale,120,5);
new Tween(this,'_yscale',null,_xscale,120,5);
}
function onRollOut(){
new Tween(this,'_xscale',null,_xscale,100,5);
new Tween(this,'_yscale',null,_xscale,100,5);
}
}

__i
09.03.2006, 18:02
Продолжая разговор, а как это сделать но не какоето количество кадров а за какое-то время в мс?

silin
09.03.2006, 18:36
new Tween(this,'_yscale',null,_xscale,100,2,true);//2 - секунды