Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   создание эффекта "жалюзи" (http://www.flasher.ru/forum/showthread.php?t=80307)

MishaD 25.05.2006 22:03

создание эффекта "жалюзи"
 
Подскажите плиз, как можно реализовать такой вот эффект перехода между картинками - http://www.volvocars.us/

Заранне спасибо!

artcraft 25.05.2006 23:07

маска такая - можно руками или программно её сделать

MishaD 25.05.2006 23:09

Цитата:

Сообщение от artcraft
маска такая - можно руками или программно её сделать

Да я пробую, но что-то никак не получается :( А можно конкретнее, как ее сделать?

aksios 26.05.2006 00:24

Цитата:

Сообщение от MishaD
Да я пробую, но что-то никак не получается :( А можно конкретнее, как ее сделать?

Это не возможно - работы на секунд 30.

MIX-er 26.05.2006 11:04

на сколько я понял она на транзакшенах?)

Nirth 26.05.2006 11:50

Не совсем то что там но в принципе без гемора
Код:

import flash.geom.Rectangle
import flash.geom.Point;
import mx.transitions.TransitionManager;
import mx.transitions.Blinds
import mx.transitions.easing.*;
function drawRect(size:Rectangle,color:Number):MovieClip {
        var result:MovieClip = createEmptyMovieClip("mc_"+color+getTimer().toString+"_"+Math.random().toString,this.getNextHighestDepth());
        result.beginFill(color);
        result.moveTo(size.topLeft.x,size.topLeft.y);
        result.lineTo(size.bottomRight.x,size.topLeft.y);
        result.lineTo(size.bottomRight.x,size.bottomRight.y);
        result.lineTo(size.topLeft.x,size.bottomRight.y);
        result.lineTo(size.topLeft.x,size.topLeft.y);
        result.endFill();
        return result;
}
var bg:MovieClip = drawRect(new Rectangle(0,0,360,260),0xFF00FF);
var mask:MovieClip = drawRect(new Rectangle(0,0,360,260),0xFF6600);
var tm:TransitionManager = new TransitionManager(mask);
tm.startTransition({type:Blinds, direction:Transition.IN, duration:1, easing:Regular.easeOut, numStrips:20, dimension:1});


Nirth 26.05.2006 17:32

асинхронный вариант
Код:

import mx.transitions.Blinds;
import mx.transitions.Transition;
import mx.transitions.TransitionManager;
import mx.transitions.Tween;

class com.onorange.lib.transitions.AsyncBlinds extends Blinds
{
        private var tweenPositions:Array = new Array();
        private var actualFrameRate:Number = 25;
        private var totalFramesInAnimation:Number;
        private var currentFrame:Number=0;
        private var needDispatchEvent:Boolean=false;
        private var delay:Number;
       
        public function AsyncBlinds (content:MovieClip, transParams:Object, manager:TransitionManager)
        {
                this.init(content,transParams,manager);
        }
        private function init(content,transParams,manager):Void
        {
                super.init(content,transParams,manager);
                actualFrameRate = transParams.fps;
                totalFramesInAnimation = actualFrameRate*this.duration-4;
                delay = Math.floor(totalFramesInAnimation/this._numStrips);
        }
       
       
       
        private function _resetTween():Void
        {
                currentFrame = 0;
                needDispatchEvent=false;
                // do clean-up of possibly existing tween
                this._twn.stop();
                this._twn.removeListener (this);
                this._twn.stop();
                this._twn = new Tween (this,
                                                                                  null,
                                                                                  this.easing,
                                                                                  0,
                                                                                  1,
                                                                                  this.duration/2,
                                                                                  true);
                // need to first stop the tween and THEN set the prop to avoid rendering glitches
                this._twn.stop();
                this._twn.prop = "progress";
                this._twn.addListener (this);
        }
       
        private function _render (p:Number):Void
        {
                if(!needDispatchEvent)
                {
                        this.tweenPositions.push(p);
                }
                var h:Number = 100/this._numStrips;
                var mask:MovieClip = this._innerMask;
                mask.clear();
                var i:Number = this._numStrips;
                mask.beginFill (0xFF0000);
                for(var i:Number=0;i<=this._numStrips;i++)
                {
                        if(currentFrame>=i)
                        {
                                var f:Number = (currentFrame+i<this.tweenPositions.length-1)?Math.floor(currentFrame+i):this.tweenPositions.length-1;
                                var s:Number = this.tweenPositions[f]*h;
                                this.drawBox (mask, -50, i*h - 50, 100, s);
                        }
                       
                }
                mask.endFill();
                currentFrame++;
               
        };
        function onMotionFinished (src:Object):Void {
                if(needDispatchEvent)
                {
                        if (this.direction) {
                                this.dispatchEvent ({type:"transitionOutDone", target:this});
                        } else {
                                this.dispatchEvent ({type:"transitionInDone", target:this});
                        }
                        delete this._twn;
                }else{
                        needDispatchEvent = true;
                        this._twn.yoyo();
                }
        }
}

Вставляем в classpath
запускаем аналогично
Код:

import flash.geom.Rectangle
import flash.geom.Point;
import mx.transitions.TransitionManager;
import mx.transitions.Blinds;
import mx.transitions.Transition;
import com.onorange.lib.transitions.AsyncBlinds;
import mx.transitions.easing.*;
function drawRect(size:Rectangle,color:Number):MovieClip {
        var result:MovieClip = createEmptyMovieClip("mc_"+color+getTimer().toString+"_"+Math.random().toString,this.getNextHighestDepth());
        result.beginFill(color);
        result.moveTo(size.topLeft.x,size.topLeft.y);
        result.lineTo(size.bottomRight.x,size.topLeft.y);
        result.lineTo(size.bottomRight.x,size.bottomRight.y);
        result.lineTo(size.topLeft.x,size.bottomRight.y);
        result.lineTo(size.topLeft.x,size.topLeft.y);
        result.endFill();
        return result;
}
var tm2:TransitionManager = new TransitionManager(drawRect(new Rectangle(0,30,300,30),0xFF6600));
tm2.startTransition({type:AsyncBlinds, fps:50, direction:Transition.IN, duration:4, easing:Bounce.easeOut, numStrips:30, dimension:1});

не забыть про параметр fps, куда нужно вписать текущий fps .
щас думаю над вопросом авто определения.

artcraft 26.05.2006 17:43

Nirth - браво - исчерпывающий ответ :~)

MishaD 26.05.2006 18:02

Спасибо! То что нужно!


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

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