Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.12.2013, 15:53
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 21  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Вот один из способов изменения размеров, если Вам что то не понятно, то спрашивайте.
Код AS3:
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);
		}
 
	}
 
}
Код AS3:
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.
Старый 07.12.2013, 17:06
AlexeySPB вне форума Посмотреть профиль Отправить личное сообщение для AlexeySPB Найти все сообщения от AlexeySPB
  № 22  
Ответить с цитированием
AlexeySPB

Регистрация: 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, время: 18:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
zoom в AS3
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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