Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   3D вращение (http://www.flasher.ru/forum/showthread.php?t=138093)

greegreeman 30.03.2010 14:45

3D вращение
 
подскажите плиз, есть может пример похожей работы с разбором того, как это делается, а то даже не знаю с какой стороны подступить...
http://www.shimanoservicecentre.co.uk/

in4core 30.03.2010 15:59

Решения
1. использовать АС3 - лучший выход.
2. Писать умопомрочительный скрипт на АС2 ( самый ужасный выход)
3. Нарисовать все это руками ( сделать анимацию руками)
4. Найти готовый исходник на АС2 с вращающимся меню. ( их в нете полно)

__П.с. данная ссылка не имеет ничего общего с 3д вращением. сдесь 2д

udaaff 30.03.2010 16:33

http://www.google.com/search?client=...utf-8&oe=utf-8

Цитата:

2. Писать умопомрочительный скрипт на АС2 ( самый ужасный выход)
Делал когда-то давным давно на AS2 эту карусель. Ничего в этом ужасного и умопомрачительного нету.

Цитата:

3. Нарисовать все это руками ( сделать анимацию руками)
Руками ее не нарисуешь. Если только в самом примитивном виде с вращением в одной плоскости. Но это извращение.

in4core 30.03.2010 17:02

Ту удав. Я рад за тебя что ты ее делал когда то! Тока вот время драгоценное - ты наверное не во что не ставил.
А нарисовать руками можно как угодно хоть в 3д хоть в 2д. Основы анимации ручной ничего слоджного нет. Я несколько каруселек делал для разных проектов руками. Ниче сложного и главное быстро. Конечно если объектов не более 4х. Если более то геморойно уже. Поэтому и говорю АС3 лучший выход

Добавлено через 2 минуты
П.с. и мне не нравится, что ты считаешь, что люди не могут нарисовать руками, то что НЕ можешь нарисовать ты.
Я готов поставить любые деньги, что нарисую ТОЧНО такую же карусель руками с примитивным кодом типа stop(); play(); .... не считая маус мув евентов. Если хошь давай замажимся. Сделаю за пол дня. Банк не менее 1000 р

greegreeman 30.03.2010 17:13

сорри, что встреваю :), но какой бюджет может быть у такой карусели? за сколько бы вы сделали такой вариант как на ссылке? хоть руками, хоть ногами ). т.к. мало опыта не могу оценить стоимость такой работы

in4core 30.03.2010 17:23

1000 сделал бы

udaaff 30.03.2010 17:24

Цитата:

Тока вот время драгоценное - ты наверное не во что не ставил.
Не волнуйтесь так за меня. Мое время было оплачено :)

Цитата:

П.с. и мне не нравится, что ты считаешь, что люди не могут нарисовать руками, то что НЕ можешь нарисовать ты.
Нарисовать вращение в одной плоскости можно. Но в примере объекты двигаются как по горизонтали, так и по вертикали.

Цитата:

сорри, что встреваю , но какой бюджет может быть у такой карусели? за сколько бы вы сделали такой вариант как на ссылке? хоть руками, хоть ногами ).
Я же вам ссылку дал. Валом каруселей и всё бесплатно. Если так уж сильно желаете купить карусель, могу вам ту что делал продать за 15$ :)
http://test.typing.by/k/menu.html

Hauts 30.03.2010 17:31

in4core, а можно ли ссылки на те карусели, что вы рисовали руками?

in4core 30.03.2010 17:34

Былоб можно кинул. Я когда на компанию флешувую работал 2 года назад, там все проекты улетали, где их щас искать без понятия. Еще скрипты не изучал, тогда делал.

greegreeman 30.03.2010 17:50

udaaff, вы сами заметили, что объекты в примере двигаются как по вертикали так и по горизонтали. я пока не нашел такого примера. а ваш на AS3?

Dezar 30.03.2010 17:52

имхо. тоже делал на ас2 каруселЪку.правда там фишка была в том, что количество элементов было динамичное.и радиус тянулся в зависимости от кол-ва.НО.ничего супер геморного там не было.
от силы строчек 50 кода.+у меня уменьшались в размере+прозрачность.в зависимости от удаления))
где-то валяется в сданных проектах.
а вот нарисовать такое руками?
ладно гонять по кругу..юзать прев фреи и некст фреим.а как вы будете вертикаль отсчитывать?как вы это рисовали-то in4core?
и что за фирма такая, которая позволила такои модуль делать анимациеи???

udaaff 30.03.2010 18:00

Цитата:

Сообщение от greegreeman (Сообщение 896839)
udaaff, вы сами заметили, что объекты в примере двигаются как по вертикали так и по горизонтали. я пока не нашел такого примера. а ваш на AS3?

На AS2. + реализовано и всё то, что Dezar перечислил.

in4core 30.03.2010 18:17

Я про вертикаль ниче не говорил. В моем посте написано конкретно, про кручение по кругу и все. БЕЗ маус мув эффектов ( что подразумевалось насчет вертикала).... просто некорректно наверное выразился

Dezar 30.03.2010 18:19

так вариант рисования топстартера не устроит:)так как ему надо чтоб "все было" :)

in4core 30.03.2010 18:28

Ну если надо все то конечно. Яж не понимаю слова буквально что НУЖНО прям 100% как там.

greegreeman 30.03.2010 18:54

хотел бы разобраться с этой каруселью сам. только на AS3. жаль, что примеры только с горизонтальной или вертикальной прокруткой ) хотя может я пока плохо искал

Dezar 30.03.2010 19:07

так а в чем проблема добавить _xscale и _alpha ??

greegreeman 30.03.2010 19:12

с альфа понятно. как скейл работает в этой карусели - это вопрос

Dezar 30.03.2010 19:25

на самом деле принцип у них один и тот же.
как вы считаете альфу?

greegreeman 30.03.2010 19:32

Код AS3:

//Вычисляем коэффициент масштабирования для imageHolder (чем дальше картинка -> тем меньше масштаб)
 var scaleRatio = focalLength/(focalLength + imageHolder.zpos3D);
 
 //Масштабируем imageHolder в соответствии с scale ratio
 imageHolder.scaleX = imageHolder.scaleY = scaleRatio;
 
 //Установим альфа для  imageHolder
 imageHolder.alpha = 0.3;

Добавлено через 37 секунд
только это на AS3

Dezar 30.03.2010 19:37

вы написал, что вам с альфой понятно.значит вы представляете как будете делать на as2 это же, но с альфой так?покажите код по которому вы хотите считать альфу

greegreeman 31.03.2010 15:20

Dezar, нефига мне не понятно с альфой как оказалось... не мог бы ты объяснить как все-таки это делать, учитывая, что как ты сказал - это всего 50 строк. буду оч. признателен.

Добавлено через 1 минуту
в смысле не с альфой код 50 строк ), а вся каруселька

Добавлено через 11 часов 9 минут
неужели никто не объяснит как это сделать? подсчет альфа и вертикальное перемещение

Dezar 01.04.2010 07:07

самое простое это отслеживать координаты.
можно создать 3 измерение и отслеживать насколько "глубоко" ушел объект.
вроде как все.другие методы не знаю.если бы объекты не двигались относительно мыши по вертикали можно было бы вообще тупо сделать просчет y и в зависимости от этого скалить и альфить)

Hauts 01.04.2010 07:52

Самое простое - создать массив. Потом в цикле присвоить каждому клипу его "родной" угол поворота.

Код AS1/AS2:

var clips:Array = [clip_1, clip_2, clip_3, clip_4, clip_5, clip_6];
var total:Number = clips.length;
var clipAngle:Number = 360/total;
for (var k:Number = 0; k<total; k++) {
        clips[k].angle = k*clipAngle;
}

Потом создать текущий угол, то есть значение поворота "камеры". И считать положение (размер, прозрачность и т.д.) для каждого объека исходя из суммы "родного" угла объекта и текущего поворота. Примерно так:

Код AS1/AS2:

import flash.filters.BlurFilter;
var clips:Array = [clip_1, clip_2, clip_3, clip_4, clip_5, clip_6];
var total:Number = clips.length;
var clipAngle:Number = 360/total;
for (var k:Number = 0; k<total; k++) {
        clips[k].angle = k*clipAngle;
        clips[k].blurFilter = new BlurFilter(0, 0, 3);
        clips[k].filters = [clips[k].blurFilter];
}
var carouselX:Number = 275;
var carouselY:Number = 200;
var carouselWidth:Number = 200;
var carouselHeight:Number = 30;
var scaleChange:Number = 30;
var alphaChange:Number = 40;
var maxBlur:Number = 10;
var viewAngle:Number = 0;
var PI180:Number = Math.PI/180;
function updateCarousel() {
        viewAngle += ((carouselX-this._xmouse)-viewAngle)/10;
        carouselHeight += (((carouselY-this._ymouse)/5)-carouselHeight)/10;
        for (var k:Number = 0; k<total; k++) {
                var clip = clips[k];
                var currentClipAngle = (viewAngle+clip.angle)*PI180;
                var cosAngle = Math.cos(currentClipAngle);
                var sinAngle = Math.sin(currentClipAngle);
                var distanceCoeff = (sinAngle/2)-0.5;
                clip._x = carouselX+cosAngle*carouselWidth;
                clip._y = carouselY+sinAngle*carouselHeight;
                clip._xscale = 100+scaleChange*distanceCoeff;
                clip._yscale = clip._xscale;
                clip._alpha = 100+alphaChange*distanceCoeff;
                clip.blurFilter.blurX = maxBlur-(maxBlur*(distanceCoeff+1));
                clip.blurFilter.blurY = clip.blurFilter.blurX;
                clip.filters = [clip.blurFilter];
                clip.z = distanceCoeff;
        }
        clips.sort(zOrder);
        for (var k:Number = 0; k<total; k++) {
                clips[k].swapDepths(k);
        }
}
function zOrder(a, b) {
        if (a.z<b.z) {
                return -1;
        } else if (a.z>b.z) {
                return 1;
        } else {
                return 0;
        }
}
this.onEnterFrame = updateCarousel;

Сортировка тоже по значению угла поворота. Ну и можно настраивать немного:

carouselX - положение карусели по x;
carouselY - положение карусели по y;
carouselWidth - ширина карусели;
carouselHeight - высота карусели;
scaleChange - насколько может меняться размер клипов. Значения лучше ставить от 0 до 99.
alphaChange - максимальное изменение прозрачности.
maxBlur - максимальное значение размытия клипов.

Надеюсь вам пригодится.

alex_195 01.04.2010 13:41

Hauts! Спасибо за поучительный урок!

greegreeman 01.04.2010 14:04

ага. спасибо, буду разбираться, вроде все доступно :)


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

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