PDA

Просмотр полной версии : Гладкое увеличение кнопок


Ануб
09.10.2009, 10:00
Очень нравится плавное увеличение/уменьшение кнопок в игре "счастливый фермер" при наведении/отведении курсора мыши, захотел сделать такое же. Вроде бы всё получилось, но работает хреново - иногда дрожит вместо начала увеличения, как бы застряв на старте. Особенно это видно при наведении мыши на самый край мувиклипа.

Прошу разъяснить, что нужно поправить в коде, чтобы работало как часы.

Во вложении исходник CS3

Сам код:

var bglowfilter = new flash.filters.GlowFilter();
bglowfilter.color = 0x000000;
bglowfilter.strength = 0.35;
bglowfilter.blurY = 15;
bglowfilter.blurX = 15;
var bglowfilter_arr:Array = new Array();
bglowfilter_arr.push(bglowfilter);

function scbuttons(tar) {
var b1:MovieClip = tar;
b1.filters = bglowfilter_arr;
b1.sc = 100;
b1.scmax = 170;
b1.scdelta = 14;
b1.over = 0;
b1.onRollOver = function() {
this.over = 1;
this.swapDepths(_root.getNextHighestDepth());
scaling();
};
b1.onRollOut = function() {
this.over = 0;
scaling();
};
function scaling() {
if (b1.over == 1) {
b1.onEnterFrame = function() {
if (this.sc<this.scmax) {
this.sc += this.scdelta;
this._xscale = this.sc;
this._yscale = this.sc;
} else {
this.onEnterFrame = null;
}
};
} else {

b1.onEnterFrame = function() {
if (this.sc>100) {
this.sc -= this.scdelta;
this._xscale = this.sc;
this._yscale = this.sc;
} else {
this.onEnterFrame = null;
}
};

}
}
}
scbuttons(b1);
scbuttons(b2);
scbuttons(b3);

woland24
09.10.2009, 13:26
у меня было такое дрожжание когда при наведении на край кнопки менялся кадр мувика и в нем было изображение на пару пикселей меньше предыдущего и курсор уже оказывался не на кнопке и возвращался ппервый кадр, и т.д....

GreyClown
09.10.2009, 14:14
а что мешает сделать так?


var size:Number = 50;

b1.onRollOver = function(){
var s:Number = 0;
onEnterFrame = function(){
if(s<=size) {
b1._xscale = 100 + s;
b1._yscale = 100 + s;
s+=10;
}
}
}

b1.onRollOut = function(){
var s:Number = 0;
onEnterFrame = function(){
if(s<=size) {
b1._xscale = 100 + size - s;
b1._yscale = 150 - s;
s+=10;
}
}
}


исходник приаттачил

там уж сам подгонишь под свои нужды

samana
12.10.2009, 22:03
Этот лучше, потому что когда перестает быть нужным, onEnterFrame удаляется, и не грузит комп без причины.
clip.onRollOver = function() {
this.onEnterFrame = function() {
if (this._xscale < 200) {
this._xscale = this._yscale += 10;
}
};
};
clip.onRollOut = clip.onDragOut = function () {
this.onEnterFrame = function() {
if (this._xscale > 100) {
this._xscale = this._yscale -= 10;
}
if (this._xscale == 100) {
delete this.onEnterFrame;
}
};
};