![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2005
Сообщений: 20
|
Здравствуйте!
Разрабатываю флешку для сайта. Посмотреть можно тут http://94.229.12.216/ Так вот, соты должны увеличиваться при наведении (плавно, анимированно, красиво) и уменьшаться в обратном направлении так же плавно и красиво, когда мышку убираешь. Я сделал анимацию с помощью твинов, но вот незадача: если активно поёрзать мышкой по сотам, то они начинают сдвигаться с места. Причем чем дольше ставишь duration для tween'а, тем больше вероятность что сота уползет в сторону. Вот код класса соты: package main{ import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.net.*; import flash.filters.*; //import fl.motion.Animator; //import flash.display.Sprite; import fl.transitions.Tween; import fl.transitions.easing.*; import fl.transitions.TweenEvent; import flash.text.TextField; import flash.geom.Point; dynamic public class sota extends MovieClip{ var Tweens = new Array(); var Picture = new MovieClip(); public var Title:String = ""; public var Desc:String = ""; public var Link:String = ""; public function sota() { // constructor code buttonMode = true; useHandCursor = true; addEventListener(MouseEvent.ROLL_OVER, SotaEnter); addEventListener(MouseEvent.ROLL_OUT, SotaLeave); addEventListener(MouseEvent.CLICK, gotourl); } public function getPicture(pic:MovieClip):void { Picture = pic; } public function setTitle(titl:String):void { Title = titl; } public function setDesc(titl:String):void { Desc = titl; } public function setLink(titl:String):void { Link = titl; } public function SotaEnter(e:MouseEvent):void { // Поднимаем соту выше остальных this.parent.addChildAt(this, parent.numChildren-1); (parent.parent as MovieClip).desc.text = Desc; title.text = Title; Tweens[8] = new Tween(plashka, "alpha", Strong.easeOut, 0, 1, 1, true); addChildAt(title, numChildren-1); if(Picture.name != Picture.parent.getChildAt(Picture.parent.numChildren-1).name) { Picture.parent.addChildAt(Picture, Picture.parent.numChildren-1); var myTween:Tween = new Tween(Picture, "alpha", Strong.easeOut, 0, 1, 1, true); } // Запишем анимацию увеличения соты Tweens[0] = new Tween(contur, "scaleX", Back.easeOut, 1, 1.2, 10, false); Tweens[1] = new Tween(contur, "x", Back.easeOut, contur.x, contur.x-0.1*contur.width, 10, false); Tweens[2] = new Tween(contur, "scaleY", Back.easeOut, 1, 1.2, 10, false); Tweens[3] = new Tween(contur, "y", Back.easeOut, contur.y, contur.y-0.1*contur.height, 10, false); Tweens[4] = new Tween(maska, "scaleX", Back.easeOut, 1, 1.2, 10, false); Tweens[5] = new Tween(maska, "x", Back.easeOut, maska.x, maska.x-0.1*maska.width, 10, false); Tweens[6] = new Tween(maska, "scaleY", Back.easeOut, 1, 1.2, 10, false); Tweens[7] = new Tween(maska, "y", Back.easeOut, maska.y, maska.y-0.1*maska.height, 10, false); // Добавляем фильтр свечения // Параметры свечения var color:Number = 0x33CCFF; var alpha:Number = 0.8; var blurX:Number = 8; var blurY:Number = 8; var strength:Number = 2; var inner:Boolean = false; var knockout:Boolean = false; var quality:Number = BitmapFilterQuality.HIGH; // Сам фильтр var filterG = new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout); // Добавляем фильтр в список фильтров filters = [filterG]; trace("up"); } public function SotaLeave(e:MouseEvent):void { for each (var myTween in Tweens) { myTween.yoyo(); } // Очищаем значение фильтра filters = []; title.text = ''; trace("down"); } public function gotourl(e:MouseEvent) { var my_request:URLRequest = new URLRequest(Link); navigateToURL(my_request, "_self"); } } } http://cl.ly/3p262n2d1j3Q171D3x3s У кого-нибудь есть идеи по поводу данного глюка? Последний раз редактировалось MadEx; 28.10.2011 в 20:56. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Потому что пока твин не завершен, у свойств объекта одни значения, когда завершен, уже другие, а если твин запустить пока он еще не завершился, то новые значения добавляются не к исходным, а к тем, что есть на данный момент.
+ Стандартные твины сами по себе, мягко говоря, не очень. Лучше использовать greensock tweenlitte или tweenmax, или caurina tweener |
|
|||||
|
если сделать начало координат в центре соты и не двигать ее при анимации, а только масштабировать эта проблема должна пропасть, но со временем они и масштабироваться начинают криво...
|
|
|||||
|
Регистрация: Dec 2005
Сообщений: 20
|
А как мне перенести начало координат в центр соты? На сколько я понял - твин всё равно от левого вернхнего угла будет масшабироваться - поэтому двигать его обязательно.
|
|
|||||
|
Регистрация: Dec 2005
Сообщений: 20
|
Цитата:
При добавлении соты взять начальные координаты контура и маски и записать в глобальную переменную. В событие SotaLeave после выполнения анимации вернуть соту на место. Т.е. видимо надо попробвать эту операцию выполнить в событии Motion.STOP ? Добавлено через 5 часов 27 минут Разобрался с пененосом центра координат и соты убегать перестали |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:04. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|