PDA

Просмотр полной версии : Эффект увеличение подгружаемой от 10% до 100% ее длины/ширины.


Olejan
25.04.2006, 20:02
Воспользовался советом Flash-гуру, которые раскритиковали меня и пытался сделать вот что:
Недавно я сделал нормальную подгрузку картинки, при нажатии на кнопку. Этот скрипт я хочу доработать таким образом, чтобы подгружаемый JPG-файл увеличивался от 10% своей площади до 100%.
Вот код (красным изменения по поводу этой самой желаемой анимации):
clip.loadImage = function(file)
{
this.image.removeMovieClip();
this.createEmptyMovieClip("image", 0);
this.image.loadMovie(file);
this.onEnterFrame = function()
{
var l = this.image.getBytesLoaded();
var t = this.image.getBytesTotal();

persent = Math.round(l*100/t);
tpers.text = persent + " %";

if (t>0 && l>=t) {
tpers.text = " ";
// загрузка закончилась
delete this.onEnterFrame;
// центровка
this.image._x -= Math.round(this.image._width/2);
this.image._y -= Math.round(this.image._height/2);
// анимация
var image_height: Number = this.image._height/10;
var image_width: Number = this.image._width/10;
while ((image_height = this.image._height) &&
(image_width = this.image._width)) {
this.image._height +=image_height;
this.image._width +=image_width;
this.setInterval(aaa, 500);
}; };
};

};
Что не так в красном коде? Идея такая: сначала присваиваю переменным image_height и image_width 10% настоящей высоты/ширины картинки, потом хочу чтобы при каждом увеличении (this.image._height +=image_height) высоты/ширины на 10% была задержка 0,5 секю А ничего не происходит - картинка вообще не грузится. Подскажите...

Olejan
25.04.2006, 20:04
В конце вообще-то не 2 операторные скобки, а 4 должно быть...

silin
25.04.2006, 20:13
(image_height == this.image._height) && (image_width == this.image._width)

Olejan
25.04.2006, 20:30
2 silin:
Мой косяк, теперь заргузка есть, но все равно анимации нет. :(

Olejan
25.04.2006, 21:07
var image_height: Number = this.image._height/10;
var image_width: Number = this.image._width/10;
this.image._height = image_height;
this.image._width = image_width;
for (i=0; i<9; i++) {
this.image._height +=image_height;
this.image._width +=image_width;
this.image.setInterval(aaa, 5000);
};

Вот нормальный код, вместо красного того. Ошибка я думаю в строчке:
this.image.setInterval(aaa, 5000);
Как сделать задержку в N секунд (милисекунд), после каждого шага цикла?
Подскажите...

Olejan
25.04.2006, 21:25
// анимация
function pauza(p) {
t = getTimer( );
for (i = t; i < t + (p * 1000); i = getTimer( )) {
}
}
var image_height: Number = this.image._height/10;
var image_width: Number = this.image._width/10;
this.image._height = image_height;
this.image._width = image_width;
for (i=0; i<9; i++) {
this.image._height +=image_height;
this.image._width +=image_width;
pauza(1);

};

Изменил тот кусок вот на этот - все равно что-то не так.
Люди, подскажите... плиЗЗЗ!

silin
25.04.2006, 21:37
Как сделать задержку в N секунд (милисекунд), после каждого шага цикла?
никак не сделать..
можно действия, выполняемые в цикле в сетинтвальную функцию засунуть:
clip.loadImage = function (file) {
this.image.removeMovieClip();
this.createEmptyMovieClip("image", 0);
this.image.loadMovie(file);
this.onEnterFrame = function() {
var l = this.image.getBytesLoaded();
var t = this.image.getBytesTotal();
persent = Math.round(l*100/t);
tpers.text = persent+" %";
if (t>0 && l>=t) {
tpers.text = " ";
// загрузка закончилась
delete this.onEnterFrame;
// центровка
this.image._x -= Math.round(this.image._width/2);
this.image._y -= Math.round(this.image._height/2);
var s=this.image._xscale=this.image._yscale=10;
var img=this.image;
var intrv=setInterval(function(){
s+=10;
img._xscale=img._yscale=s;
if(s==100)clearInterval(intrv);
},500);
}
};
};

Olejan
25.04.2006, 21:38
На странице:
http://www.flasher.ru/forum/showthread.php?t=75265&highlight=%EF%E0%F3%E7%E0
Прочитал и переделал свой код:
clip.loadImage = function(file)
{
this.image.removeMovieClip();
this.createEmptyMovieClip("image", 0);
this.image.loadMovie(file);
this.onEnterFrame = function()
{
var l = this.image.getBytesLoaded();
var t = this.image.getBytesTotal();

persent = Math.round(l*100/t);
tpers.text = persent + " %";

if (t>0 && l>=t) {
tpers.text = " ";
// загрузка закончилась
delete this.onEnterFrame;
// анимация
var image_height: Number = this.image._height/10;
var image_width: Number = this.image._width/10;
this.image._height = image_height;
this.image._width = image_width;

var oldTime:Number= getTimer();
if (getTimer()-oldTime>500) {
this.image._height++;
this.image._width++;
}

// центровка
this.image._x -= Math.round(this.image._width/2);
this.image._y -= Math.round(this.image._height/2);

};
};

};

НУ, СЕЙЧАС ТО ПОЧЕМУ НЕ РАБОТАЕТ???
ПОМОГИТЕ, ЧЕЛОВЕК ПОГИБАЕТ!!!

Olejan
25.04.2006, 22:01
2 silin:
Спасибо. Работает. Последнее, а как сделать так, чтобы картинка при увеличении всегда была по центру, то есть видимо после каждого шага должна быть // центровка
this.image._x -= Math.round(this.image._width/2);
this.image._y -= Math.round(this.image._height/2);
но что-то не получается - куда только не пытался я этот кусок впихнуть... :(

RandomUser
25.04.2006, 22:20
А скажи, только честно... Ты в школе арифметику проходил?
Найди учебники за 5-6 класс, найдешь там много интерестного для себя:)

this.image._x = Math.round((_root._width-this.image._width)/2);
this.image._y = Math.round((_root._height-this.image._height)/2);Вроде бы так...

Olejan
25.04.2006, 22:34
2 RandomUser:
А видимо такой умный... :(
наверное разбираешься во Flash'е лучше чем автор этого урока, откуда часть кода:
http://noregret.org/tutor/resize/

Хотя я сомневаюсь в твоих "безграничных" способностях, гений ты наш...
P.S. Если ты еще не понял, то тот кусок кода - правильно делает центровку! - а твой код, гений, полная чушь!!! :)
Вопрос в другом, куда его разместить?

Olejan
25.04.2006, 22:36
2 silin:
Не знаешь как сделать так, чтобы картинка увеличивалась не с центром в левом верхнем углу, а с центром в середине?
P.S. А тот тут всякие вундеркинды умничают с бесполезными советами!

silin
25.04.2006, 22:42
вариантов много..
например: масштабировать не clip.image, а сам clip:
clip.loadImage = function (file) {
this.image.removeMovieClip();
this.createEmptyMovieClip("image", 0);
this.image.loadMovie(file);
this.onEnterFrame = function() {
var l = this.image.getBytesLoaded();
var t = this.image.getBytesTotal();
persent = Math.round(l*100/t);
tpers.text = persent+" %";
if (t>0 && l>=t) {
tpers.text = " ";
// загрузка закончилась
delete this.onEnterFrame;
// центровка
this.image._x -= Math.round(this.image._width/2);
this.image._y -= Math.round(this.image._height/2);
var s=this._xscale=this._yscale=10;
var img=this;
var intrv=setInterval(function(){
s+=10;
img._xscale=img._yscale=s;
if(s==100)clearInterval(intrv);
},500);
}
};
};

Olejan
25.04.2006, 22:51
2 silin:
Как часы!