Форум 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)

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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.