Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Увеличение битмапа (http://www.flasher.ru/forum/showthread.php?t=185999)

pomuс 25.10.2012 20:09

Увеличение битмапа
 
Вот делаю я импорт битмапы, потом вещаю tweenlite анимацию, и получается полная дребеда. Вот код
Код AS3:

var bm12:Bitmap = new Bitmap();
var pic12:Loader = new Loader();
pic12.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete2);
pic12.load(new URLRequest('12.jpg'));
 
function onLoadComplete2(e:Event):void{
pic12.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete2);
 
bm12 = Bitmap(pic12.content);
bm12.width = bm12.width/8;
bm12.height = bm12.height/8;
bm12.smoothing = true;
 
btn12.buttonMode = true;
btn12.addEventListener(MouseEvent.CLICK, clicked12);
function clicked12 (e:MouseEvent):void{
 
        addChild(bm12);
        bm12.x = mouseX;
        bm12.y = mouseY;
        TweenLite.to(bm12, 1, {x:stage.stageWidth/2 - bm12.width*3/2, y:stage.stageHeight/2 - bm12.height*3/2, scaleX:3, scaleY:3});
}
}

Размер картинки большой, поэтому я его делю на 8. Есди убрать твин, т овсе в порядке. Как только активирую твин, у меня картинка из точки курсора выдвигается на весь свой реальный размер.
Подумал может есть смысл засунуть в контейнер, и потом уже твинить контейнер. Набираю
Код AS3:

var container2:MovieClip = new MovieClip();
        container2.width = bm12.width;
        container2.height= bm12.height;
        container2.x = mouseX;
        container2.y = mouseY;
        addChild(container2);
        container2.addChild(bm12);

в таком случае вообще ничего не отображается
Что я не так делаю?
P.S. нашел в хелпе адоба следующее "К объекту Bitmap не должно применяться растягивание, поворот и наклон." . Собственн опонятно почему он у меня становится огромным. Но тогда почему он не засовывается у меня в контейнер MovieClip?

Wolsh 25.10.2012 20:42

А что Вас удивляет? Вы хотите за 1 секунду увеличить картинку из 1/8 размера до трех реальных размеров. Конечно это взрыв.
Цитата:

var container2:MovieClip = new MovieClip();
Зачем Вам МувиКлип? Вы собираетесь использовать таймлайн?
Цитата:

container2.width = bm12.width;
container2.height= bm12.height
А это что за магия? У пустоты не бывает размера в пикселях.

pomuс 25.10.2012 21:44

Цитата:

Сообщение от Wolsh (Сообщение 1101374)
А что Вас удивляет? Вы хотите за 1 секунду увеличить картинку из 1/8 размера до трех реальных размеров. Конечно это взрыв.

ну как же, сначала я обозначаю что размер будет 1/8 от текущего. Разве нет? Да даже если назначать реальные прочто значения как 400 и 300 все равно ничего не загружается
MovieClip переправил в Sprite, но это точно не был ключевой момент

а вот по поводу последнее не очень понял... в общем я перепробывал по разному, и назначая пиксели размеры и с переменными...

Wolsh 25.10.2012 23:10

ОК. Постараюсь подробней.
Цитата:

Как только активирую твин, у меня картинка из точки курсора выдвигается на весь свой реальный размер.
Ваши слова? Мой ответ не совпадает? Может, Вы используете слово "выдвигается" в каком-то своем, особом смысле? Я просто силюсь сопоставить Ваши фразы "выдвигается на весь свой реальный размер" и "все равно ничего не загружается". Давайте оставим панику и попробуем объясняться нормальным русским языком, не перепрыгивая с пятого на десятое?
Цитата:

в общем я перепробывал по разному, и назначая пиксели размеры и с переменными...
Что во фразе "пустота не имеет размеров" Вам непонятно? Вы создаете новый пустой, абсолютно ПУСТОЙ, МувиКлип (теперь спрайт, это хорошо). И начинаете назначать ему размеры. Пустому. Размеры. Размер ЧЕГО Вы пытаетесь установить? Ничего же нет. Никакого отображения. Нет ничего, что могло бы быть 300, или 10, или 100500. Размер любого контейнера (спрайт, мувиклип и др) — это размер его контента. Добавляете в него битмап — и тогда появляется размер, равный размеру битмапа. Теперь у контейнера есть отображение, и значит есть размеры. Уберите свои магические строчки, они в лучшем случае вообще ничего не делают.
Далее.. Вот теперь, когда Вы поместили битмап в контейнер, при клике по кнопке Вы помещаете контейнер в точку клика. ОК. А вот тот код, в котором Вы назначаете координаты самому битмапу —
Цитата:

addChild(bm12);
bm12.x = mouseX;
bm12.y = mouseY;
TweenLite.to(bm12, 1, {x:stage.stageWidth/2 - bm12.width*3/2, y:stage.stageHeight/2 - bm12.height*3/2, scaleX:3, scaleY:3});
— Вы его изменяли? Или теперь у Вас и контейнер смещен, и битмап внутри контейнера смещен? Может, поэтому Вы его не видите?

Добавлено через 8 минут
Цитата:

P.S. нашел в хелпе адоба следующее "К объекту Bitmap не должно применяться растягивание, поворот и наклон."
Вообще-то перед этим вырванным отрывком есть еще текст. И он гласит:
Цитата:

Подпрограмма копирования пикселей работает намного быстрее, чем векторное средство визуализации, но объект Bitmap должен соответствовать определенным условиям для его использования.
Для того, чтобы подпрограмма копирования пикселей работала БЫСТРЕЕ, битмап не должен подвергаться трансформациям (потому что тогда надо не копировать, а пересчитывать, что конечно намного дольше), только и всего.

pomuс 26.10.2012 01:52

Wolsh
спасибо, вчитался, вдумался, и все поправил. Хоть теперь есть ясность раз и навсегда


Часовой пояс GMT +4, время: 07:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.