![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вот один из способов изменения размеров, если Вам что то не понятно, то спрашивайте.
package { import flash.display.Sprite; import flash.geom.Point; public class ScaleTest extends Sprite { public function ScaleTest() { var object0:Sprite = new Sprite(); object0.graphics.beginFill(0x987436); object0.graphics.drawRect(0, 0, 697, 86); object0.graphics.endFill() addChild(object0); var object1:Sprite = new Sprite(); object1.graphics.beginFill(0x987436); object1.graphics.drawRect(0, 0, 697, 86); object1.graphics.endFill() object1.x = 0; object1.y = 100; addChild(object1); var center0:Point = new Point(337.5, 43); var center1:Point = new Point(337.5, 143); var frameRate:Number = stage.frameRate; //передаём в класс обьект, размеры которого нужно изменить, начальные и конечные размеры //думаю Вы должны понять в какой последовательности, так как значения использую Ваши //следующий параметр ( у меня 3 ) это врямя за которое должны измениться размеры //point это точка от которой относительно которой должны изменяться размеры //у меня это центр, но можно любую другую //последний параметр это частота кадров, её можно написать просто цифрой, вот сколько у Вас кадров столько и напишите ScalePoint.to(object0, 3, 697, 619, 86, 74, center0,frameRate); ScalePoint.to(object1, 3, 697, 619, 86, 74, center1,30); } } } package { import flash.display.DisplayObject; import flash.events.Event; import flash.geom.Point; public class ScalePoint { private var sXS:Number; private var sXF:Number; private var sYS:Number; private var sYF:Number; private var target:DisplayObject; private var p:Point; private var currentTime:Number = 0; private var duration:Number; private var fps:Number; public function ScalePoint(target:DisplayObject, duration:Number, sW:Number, fW:Number, sH:Number, fH:Number, point:Point, fps:Number = 30) { if (target.stage) { target.stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); }else { target.addEventListener(Event.ADDED_TO_STAGE, target_addedToStageHandler); } const coefficientWidth:Number = 1 - (((sW - fW) / (sW / 100)) / 100); const coefficientHeight:Number = 1 - (((sH - fH) / (sH / 100)) / 100); sXS = target.scaleX; sXF = (coefficientWidth >= 0?coefficientWidth:coefficientWidth * -1) - sXS; sYS = target.scaleY; sYF = (coefficientHeight >= 0?coefficientHeight:coefficientHeight * -1) - sYS; this.target = target; this.p = point; this.fps = fps; this.duration = duration; } public static function to(target:DisplayObject, duration:Number, sW:Number, fW:Number, sH:Number, fH:Number, point:Point, fps:Number = 30):ScalePoint { return new ScalePoint(target, duration, sW, fW, sH, fH, point, fps); } private function stage_enterFrameHandler(event:Event):void { var time:Number = 1 / 1000 * this.fps; currentTime += time; var ratio:Number = currentTime / duration; if (currentTime >= duration) { ratio = 1; this.target.stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); } setRatio(ratio); } private function target_addedToStageHandler(event:Event):void { event.currentTarget.removeEventListener(Event.ADDED_TO_STAGE, target_addedToStageHandler); this.target.stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); } private function setRatio(ratio:Number):void { const sX:Number = ratio * sXF + sXS; const sY:Number = ratio * sYF + sYS; const dXS:Number = Math.round((target.x - p.x) / target.scaleX); const dYS:Number = Math.round((target.y - p.y) / target.scaleY); target.scaleX = sX; target.scaleY = sY; target.x = p.x + dXS * target.scaleX; target.y = p.y + dYS * target.scaleY; } } } Последний раз редактировалось Akopalipsis; 03.12.2013 в 16:09. |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 10
|
В общем, у меня получилось что-то вроде этого:
import com.greensock.*; import com.greensock.easing.*; var timeline:TimelineMax = new TimelineMax({repeat: -1}); // Зумируем слайд до размера 619х74 timeline.insert (TweenLite.to (mc1, 1, {width:619, height:74, x:0, y:0, delay:5})); timeline.insert (TweenLite.to (mc2, 1, {width:619, height:74, x:0, y:74, delay:5})); timeline.insert (TweenLite.to (mc3, 1, {width:619, height:74, x:0, y:148, delay:5})); timeline.insert (TweenLite.to (mc4, 1, {width:619, height:74, x:0, y:222, delay:5})); timeline.insert (TweenLite.to (mc5, 1, {width:619, height:74, x:0, y:296, delay:5})); //Сегменты слайда разъезжаются в стороны, открывая следующий слайд timeline.insert (TweenLite.to (mc1, 1, {x:"-619", delay:10})); timeline.insert (TweenLite.to (mc2, 1, {x:"619", delay:10.34})); timeline.insert (TweenLite.to (mc3, 1, {x:"619", delay:10.54})); timeline.insert (TweenLite.to (mc4, 1, {x:"-619", delay:10.54})); timeline.insert (TweenLite.to (mc5, 1, {x:"-619", delay:10.34})); Но визуальный результат, пока, не тот, который ожидается. Все дело в зуме. Каждый слайд состоит из пяти равных горизонтальных сегментов, которые были нарезаны в Photoshop, импортированы во Flash и использованы в качестве MovieClip (-ов). В момент зумирования, когда каждый MovieClip переходит из размера 679х86 в 619х74 видно, что слайд состоит из отдельных сегментов (не очень видно, но видно, как будто строки пробегают по слайду), а хотелось сделать как здесь - небольшой "гладкий" отъезд при смене слайда (см. слайдер): http://www.motocms.ru/flash-template...preview/38878/ . Может быть здесь нужно не слайд нарезать, а как-то маски применять? Буду всем благодарен за идеи и ответы. Добавлено через 71 час 36 минут Всем спасибо за участие. Тема закрыта. С кодом и масками разобрался сам. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:12. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| zoom в AS3 |
|
|