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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.07.2008, 18:37
NoySteM вне форума Посмотреть профиль Отправить личное сообщение для NoySteM Найти все сообщения от NoySteM
  № 1  
Ответить с цитированием
NoySteM

Регистрация: Jul 2008
Сообщений: 4
По умолчанию Управление клипом с помощью мыши

Господа Флешеры! Помогите новичку.

Задача следующая: Есть мувик (покадровая анимация) 9-ть jpg картинок меняются поочереди и создается эфект поворота объекта вправо и влево. Необходимо сделать так, чтобы объект вращался реагируя на курсор мыши.

исходник http://*****************/files/6772761

Старый 25.07.2008, 19:08
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 2  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
http://flasher.ru/forum/showthread.php?t=113339

Старый 25.07.2008, 21:05
NoySteM вне форума Посмотреть профиль Отправить личное сообщение для NoySteM Найти все сообщения от NoySteM
  № 3  
Ответить с цитированием
NoySteM

Регистрация: Jul 2008
Сообщений: 4
Благодарю, я видел эту ветку, тот метод который описывает zanull я как раз и побовал, но почему то в моей ситуации после добавления кода в мувик, он перестает воспроизводится, показывая только первый кадр, а на движения мыши не реагирует

Старый 26.07.2008, 02:23
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Есть у меня вот такой исходник, гляньте, подойдет ли.
Вложения
Тип файла: rar drag_frames.rar (14.8 Кб, 383 просмотров)
__________________
Reality.getBounds(this);

Старый 26.07.2008, 12:55
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 5  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
NoySteM!

Недавно я писал уже такой код.

Некоторые преимущества моего кода:

1. Централизация кода, т.е. все сделано на первом кадре, что значительно облегчает редактирование кода;
2. Кадры-изображения подгружаются извне. Поэтому отсутствует необходимость в их импортировании и создании на каждом кадре. Так же подгрузку изображений можно осуществлять в подходящие моменты;
3. Очень легко настраивается на свои нужды. Например, можно заставить объект совершить 4 оборота (сколько угодно) за весь путь мыши от одного края области просмтра к другому;
4. Имеет два режима работы:
а) вращение объекта при смещении мыши от одного края объекта к другому;
б) вращение объекта происходит автономно, но скорость и направление вращения зависит от смещения мыши от центра области просмотра.
5. Размер самого исполнимого файла относительно мал (без кадров-изображений)

Все кадры-изображения отрендерены в среде 3D моделирования Rhinosceros с использованием технологии рэйтрэйсинга.

Для использования выполните следующие действия:

1. Создайте пустую директорию в любом удобном для Вас месте
2. Создайте там файл Флеш - fla;
3. В первом кадре главной временной шкалы напишите этот код:

Код:
///////////////////////////////////////////////////////////////////////////////////////////
// Код выполняющий анимацию (вращение вокруг оси Y) динозавра в зависимости от положения //
// мыши в области просмотра.															 //
// 					Created by Alex_beginner. All rights reserved,2008	8-)				 //
//																						 //							 								 
///////////////////////////////////////////////////////////////////////////////////////////
import flash.geom.Rectangle;

//Инициализируем необходимые переменные

//****************************************************************************************
//Настройки																				 *
//****************************************************************************************
var n_frames:Number = 60;//Количество кадров анимации
var Kspeed:Number = 80;//Коэффициент скорости вращения. Определяет диапазон изменения скорости 
//вращения в зависимости от смещения мыши от центра. Подбирается по необходимости.
var n_rot:Number = 2;//Количество полных оборотов объекта за один проход мыши (от края до края)
var container = this;//Клип-контейнер, в котором будет размещена анимация
var xPos:Number = 20;//Левый верхний угол области просмотра - координата X
var yPos:Number = 20;//Левый верхний угол области просмотра - координата Y
var WViewPort:Number = 400; //Ширина области просмотра
var HViewPort:Number = 350; //Высота области просмотра
var rotateMode:Boolean = true;//режим работы анимации 
//(true - вращение объекта осуществляется при движении по всей длине области просмотра в 
//одном направлении,
//false - объект вращается автономно, но скорость и направление вращения зависит от 
//величины смещения от центра области просмотра)
//****************************************************************************************

//****************************************************************************************
//Вспомогательные переменные
//****************************************************************************************

var f_counter:Number = 1;//Счетчик кадров
var speed:Number = null;//расчетный вектор скорости
var speed_abs:Number = null;//модуль расчетной скорости
var indexOffset:Number = null;//Смещение индекса кадров (знак определяет направление)
var curFIndex:Number = 1;//Текущий индекс кадра
var prevFIndex:Number = 1;//Индекс кадра на предыдущей итерации
var timePass:Number = null//время задержки между двума последовательными кадрами
var partial:Number = null;
//***************************************************************************************


//***************************************************************************************
// Код, выполняющий загрузку кадров-изображений с диска в динамически создаваемые клипы * 
//***************************************************************************************
var mclListener:Object = new Object();//Создаем объект-слушатель событий мувилоадера
var frames_mcl:MovieClipLoader = new MovieClipLoader();//создаем экземпляр 
//класса MovieClipLoader
frames_mcl.addListener(mclListener);//Назначаем mclListener слушателем событий frames_mcl

mclListener.onLoadInit = function(target_mc:MovieClip):Void //Обработчик события выполнения
//первого кадра после загрузки изображений
{
	if (target_mc._name != 1) {target_mc._visible = false};
	target_mc._x = xPos;
	target_mc._y = yPos;
	target_mc._width = WViewPort;
	target_mc._height = HViewPort;
	if (f_counter == n_frames)
	{
		frames_mcl.removeListener(mclListener);
		delete mclListener;
		delete frames_mcl;
		//создаем маску-клип и назначем клипу обработчик события onMouseMove
		var mask_mc:MovieClip = createMask(new Rectangle(xPos,yPos,WViewPort,HViewPort));
		if (!rotateMode)
		{
			//назначаем обработчик события onEnterFrame контейнеру клипов-кадров
			container.onEnterFrame = funcRotation2;
			var begTime:Number = getTimer();
		}else
		{
			mask_mc.onMouseMove = funcRotation1;
		}
	}
	f_counter+=1;
};


//Здесь создаем пустые клипы друг против друга и выполняем функцию загрузки изображений в них
for (var i:Number = 1; i<=n_frames; i++)
{
	container.createEmptyMovieClip(i, n_frames-i);
	frames_mcl.loadClip("frames_Dino/Dino-"+i+".jpg",container[i]);
}


//функция вращения для режима rotateMode = false;
function funcRotation2():Void
{
	if (mask_mc.hitTest(_xmouse,_ymouse, false))
		{
			speed = (xPos+WViewPort/2)-_xmouse;
			speed_abs = Math.abs(speed);
			timePass = (1-speed_abs/(WViewPort/2))*Kspeed;
			if ((getTimer()-begTime)>=timePass)
				{
					indexOffset = speed/speed_abs;
					curFIndex +=indexOffset;
					present(false);
					begTime = getTimer();
				}
		}
}

//функция вращения для режима rotateMode = true;
function funcRotation1():Void
{
		if (mask_mc.hitTest(_xmouse,_ymouse, false))
		{
			partial = Math.abs((xPos+WViewPort-_xmouse)*n_rot/WViewPort);
			curFIndex = Math.round((partial - Math.floor(partial))*(n_frames-1)+1);
			present(true);
		}
}

//Перестановка кадров
function present(flag:Boolean):Void
{
		if (!flag)
		{
			if (curFIndex>=n_frames) 
				{
					curFIndex = 1;
				}else if (curFIndex<=1) 
				{
					curFIndex = n_frames;
				};
		}
		container[prevFIndex]._visible = false;
		container[curFIndex]._visible = true;
		prevFIndex = curFIndex;
}


//Создание маски
function createMask(maskRect:Rectangle):MovieClip
{
	var mask_mc:MovieClip = container.createEmptyMovieClip("mask_mc",container.getNextHighestDepth());
	mask_mc.beginFill(0x000000,0);
	mask_mc.moveTo(maskRect.x,maskRect.y);
	mask_mc.lineTo(maskRect.x+maskRect.width,maskRect.y);
	mask_mc.lineTo(maskRect.x+maskRect.width,maskRect.y+maskRect.height);
	mask_mc.lineTo(maskRect.x,maskRect.y+maskRect.height);
	mask_mc.lineTo(maskRect.x,maskRect.y);
	mask_mc.endFill();
	return mask_mc;
}
4. Скопируйте архив во вложении себе на жесткий диск (изображения-кадры)
5. Разархивируйте архив в ту же папку, что и файл Флеша- fla.
6. Запустите fla-файл на выполенение.
Вложения
Тип файла: rar frames_Dino.part1.rar (195.3 Кб, 339 просмотров)
Тип файла: rar frames_Dino.part2.rar (195.3 Кб, 297 просмотров)
Тип файла: rar frames_Dino.part3.rar (195.3 Кб, 288 просмотров)
Тип файла: rar frames_Dino.part4.rar (68.3 Кб, 300 просмотров)
__________________
Случайность, господа, это знаете ли непознанная необходимость.

Старый 27.07.2008, 19:03
NoySteM вне форума Посмотреть профиль Отправить личное сообщение для NoySteM Найти все сообщения от NoySteM
  № 6  
Ответить с цитированием
NoySteM

Регистрация: Jul 2008
Сообщений: 4
Спасибо всем кто откликнулся! Особая бладорность Alex'у, все доступно, с коментариями, то что и было необходимо!

Старый 28.01.2009, 21:29
moof вне форума Посмотреть профиль Отправить личное сообщение для moof Найти все сообщения от moof
  № 7  
Ответить с цитированием
moof

Регистрация: Jul 2008
Сообщений: 1
Допустим у меня 5 кадров. Как мне сделать так что бы 1 кадр при проигрывании был 3, т.е. при движении мыши относительно центра влево порядок отображения был 3->2->1 ,а вправо 3->4->5.

Старый 08.02.2009, 05:04
Acrossfy вне форума Посмотреть профиль Отправить личное сообщение для Acrossfy Найти все сообщения от Acrossfy
  № 8  
Ответить с цитированием
Acrossfy
 
Аватар для Acrossfy

Регистрация: Feb 2009
Сообщений: 180
Если ты про исходник "circle" из темы, ссылка на которую дана выше, делаешь 1-ый кадр анимации ключевым(само собой ). в окошке экшнс пишешь:
Код AS1/AS2:
gotoAndPlay(12);
12-ый, это допустим твой кадр посередине анимации с которого ты хочешь начать. 12-ый кадр делаешь ключевым и в нем, в экшнс пишешь:
Код AS1/AS2:
stop();
Все)

Старый 08.02.2009, 13:50
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А сразу gotoAndStop(12) трудно написать чтоли?)))
__________________
Reality.getBounds(this);

Старый 09.02.2009, 00:33
Acrossfy вне форума Посмотреть профиль Отправить личное сообщение для Acrossfy Найти все сообщения от Acrossfy
  № 10  
Ответить с цитированием
Acrossfy
 
Аватар для Acrossfy

Регистрация: Feb 2009
Сообщений: 180
ну можно и так в принципе

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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