Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   GlassWin на AS3 silin.fatal.ru (http://www.flasher.ru/forum/showthread.php?t=109794)

AS3_coder 20.03.2008 22:11

GlassWin на AS3 silin.fatal.ru
 
как переписать этот класс на AS3?
Код:

import flash.filters.*;
import flash.geom.*;
import flash.display.*;

class GlassWin extends MovieClip{
        private var glassColor:Number=0xD9FFFF;
        private var glassAlpha:Number=35;
        private var mousePoint:Point;
        private var alphaScreen:MovieClip;
        private var blurScreen:MovieClip;
        private var blurBitmap:BitmapData;
       
        public function GlassWin(){
                var w:Number=Math.floor(_width);
                var h:Number=Math.floor(_height);
                var lowDepth=0;
                //всех поднимем на 2, чтоб освободить место для скринов
                for(var i in this) {
                        if(this[i].getDepth()<lowDepth)lowDepth=this[i].getDepth();
                        _root.swapDepths.call(this[i],this[i].getDepth()+2);
                }
                //////////////
                var bounds=getBounds(this);
                alphaScreen=this.createEmptyMovieClip("alphaScreen",lowDepth+1);
                blurScreen=this.createEmptyMovieClip("blurScreen",lowDepth);
                alphaScreen._x=blurScreen._x=bounds.xMin;
                alphaScreen._y=blurScreen._y=bounds.yMin;
                alphaScreen.beginFill(glassColor,glassAlpha);
                alphaScreen.lineTo(w,0);
                alphaScreen.lineTo(w,h);
                alphaScreen.lineTo(0,h);
                alphaScreen.endFill();
                ////////
                blurBitmap=new BitmapData(w,h);
                blurScreen.attachBitmap(blurBitmap,0);
                getScreen();
                render();
        }
       
        function onPress(){
                mousePoint=new Point(_xmouse,_ymouse);
                onEnterFrame=render;
        }
       
        function onRelease(){
                onEnterFrame=null;
        }
       
        function render(){
                _x+=_xmouse-mousePoint.x;
                _y+=_ymouse-mousePoint.y;
                mousePoint=new Point(_xmouse,_ymouse);
                getScreen();
                updateAfterEvent();
        }
       
        function getScreen(){
                var p:Point=new Point(_x,_y);
                _parent.localToGlobal(p);
                var tx:Number=-(p.x+blurScreen._x);
                var ty:Number=-(p.y+blurScreen._y);
                var mtrx=new Matrix(1,0,0,1,tx,ty);
                _visible=false;
                blurBitmap.draw(_root,mtrx);
                _visible=true;
                blurBitmap.applyFilter(blurBitmap,blurBitmap.rectangle,new Point(),new BlurFilter(10,10));
        }
}

Вот что я попробовал...
Код:

package{
import flash.filters.*;
import flash.geom.*;
import flash.display.*;
import flash.events.*;

public class GlassWin extends MovieClip{
    private var glassColor:Number=0xD9FFFF;
        private var glassAlpha:Number=35;
        private var mousePoint:Point;
        private var alphaScreen:MovieClip;
        private var blurScreen:MovieClip;
        private var blurBitmap:BitmapData;
       
        public function mouseDownHandler(event:MouseEvent){
                mousePoint=new Point(mouseX,mouseY);
                addEventListener(Event.ENTER_FRAME, render);
        }
       
        public function clickHandler(){
                removeEventListener(Event.ENTER_FRAME, render);
        }
       
        public function render(e:Event){
                x+=mouseX-mousePoint.x;
                y+=mouseY-mousePoint.y;
                mousePoint=new Point(mouseX,mouseY);
                getScreen();
        }
       
        public function getScreen():void{
                var p:Point=new Point(x,y);
                parent.localToGlobal(p);
                var tx:Number=-(p.x+blurScreen.x);
                var ty:Number=-(p.y+blurScreen.y);
                var mtrx=new Matrix(1,0,0,1,tx,ty);
                visible=false;
                blurBitmap.draw(stage,mtrx);
                visible=true;
                blurBitmap.applyFilter(blurBitmap,blurBitmap.rectangle,new Point(),new BlurFilter(10,10));
        }
       
        public function GlassWin(){
        var w:Number=Math.floor(this.width);
        var h:Number=Math.floor(this.height);
                var lowDepth=0;
                //всех поднимем на 2, чтоб освободить место для скринов
                for(var i in this) {
                        if(this[i].getDepth()<lowDepth)lowDepth=this[i].getDepth();
                        stage.swapDepths.call(this[i],this[i].getDepth()+2);
                }
                //////////////
                var bounds=getBounds(this);
                var alphaScreen:MovieClip = new MovieClip();
                addChild(alphaScreen);
                var blurScreen:MovieClip = new MovieClip();
                addChild(blurScreen);
                alphaScreen.x=blurScreen.x=bounds.x;
                alphaScreen.y=blurScreen.y=bounds.y;
                alphaScreen.graphics.beginFill(glassColor,glassAlpha);
                alphaScreen.graphics.lineTo(w,0);
                alphaScreen.graphics.lineTo(w,h);
                alphaScreen.graphics.lineTo(0,h);
                alphaScreen.graphics.endFill();
                ////////
                blurBitmap=new BitmapData(w,h);
                var blurScreen1:Bitmap = new Bitmap(blurBitmap);
                blurScreen.addChild(blurScreen1)
                getScreen();
                render();
               
                addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
                addEventListener(MouseEvent.CLICK, clickHandler);
               
        }
}
}

Мой вариант не работает :(

fljot 21.03.2008 01:14

в as3 нет swapDepths().. и вообще работа с глубинами отличается немного. читайте внимательно что вам пишет компилятор

silin 21.03.2008 02:35

Вложений: 1
во как я заглянул,теперь как честный человек не могу остаться в стороне..
в AS3 имхо все существенно проще: просто на нулевой глубине создаем битмап, в который походу копируем parent (или что-там нужно), скрывая перед этим сам мувик..
упрощенная (контент мувика должен быть в координатах 0,0), но вполне рабочая версия:
Код:

package  {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.filters.BlurFilter;
        import flash.geom.Matrix;
        import flash.geom.Point;
       
       
        public class GlassWin extends MovieClip{
                private var clickPoint:Point;
                private var blurBMP:Bitmap;
                public function GlassWin() {
                        blurBMP = new Bitmap(new BitmapData(width, height));
                        blurBMP.filters= [new BlurFilter(16,16)];
                        addChildAt(blurBMP, 0);
                       
                        addEventListener(MouseEvent.MOUSE_DOWN, onPress);
                        addEventListener(MouseEvent.MOUSE_UP, onRelease);
                        render();
                }
               
                private function onRelease(e:MouseEvent):void {
                        removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                }
               
                private function onPress(e:MouseEvent):void {
                        clickPoint = new Point(mouseX, mouseY);
                        addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                }
               
                private function onMouseMove(e:MouseEvent):void {
                        x += mouseX - clickPoint.x;
                        y += mouseY - clickPoint.y;
                        clickPoint = new Point(mouseX, mouseY);
                        render();
                }
               
                private function render():void {
                        var mtrx:Matrix = new Matrix();
                        mtrx.translate(-x, -y);
                        visible = false;
                        blurBMP.bitmapData.draw(parent, mtrx);
                        visible = true;
                }
               
        }
       
}


telit 21.03.2008 10:30

Теперь можешь на silin.fatal.ru в раздел AS3 поставить :) ЗАЧЕТ!!!

AS3_coder 21.03.2008 10:40

Спасибо большое!

etc 22.03.2008 09:47

telit, аккаунт AS3_coder забанен. 1 человек = 1 аккаунт и плодить одинаковые темы от разных аккаунтов не пройдет.


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

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