![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
Господа Флешеры! Помогите новичку.
Задача следующая: Есть мувик (покадровая анимация) 9-ть jpg картинок меняются поочереди и создается эфект поворота объекта вправо и влево. Необходимо сделать так, чтобы объект вращался реагируя на курсор мыши. исходник http://*****************/files/6772761 |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
|
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
Благодарю, я видел эту ветку, тот метод который описывает zanull я как раз и побовал, но почему то в моей ситуации после добавления кода в мувик, он перестает воспроизводится, показывая только первый кадр, а на движения мыши не реагирует
![]() |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Есть у меня вот такой исходник, гляньте, подойдет ли.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: 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;
}
5. Разархивируйте архив в ту же папку, что и файл Флеша- fla. 6. Запустите fla-файл на выполенение.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
Спасибо всем кто откликнулся! Особая бладорность Alex'у, все доступно, с коментариями, то что и было необходимо!
|
|
|||||
|
Регистрация: Jul 2008
Сообщений: 1
|
Допустим у меня 5 кадров. Как мне сделать так что бы 1 кадр при проигрывании был 3, т.е. при движении мыши относительно центра влево порядок отображения был 3->2->1 ,а вправо 3->4->5.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
Если ты про исходник "circle" из темы, ссылка на которую дана выше, делаешь 1-ый кадр анимации ключевым(само собой
). в окошке экшнс пишешь:12-ый, это допустим твой кадр посередине анимации с которого ты хочешь начать. 12-ый кадр делаешь ключевым и в нем, в экшнс пишешь: Все) |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А сразу gotoAndStop(12) трудно написать чтоли?)))
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
ну можно и так в принципе
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:53. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|