Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.03.2008, 22:11
AS3_coder вне форума Посмотреть профиль Найти все сообщения от AS3_coder
  № 1  
Ответить с цитированием
AS3_coder
Banned

Регистрация: Mar 2008
Сообщений: 2
По умолчанию 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);
		
	}
}
}
Мой вариант не работает

Старый 21.03.2008, 01:14
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 2  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
в as3 нет swapDepths().. и вообще работа с глубинами отличается немного. читайте внимательно что вам пишет компилятор

Старый 21.03.2008, 02:35
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
во как я заглянул,теперь как честный человек не могу остаться в стороне..
в 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;
		}
		
	}
	
}
Вложения
Тип файла: zip glass.zip (71.6 Кб, 87 просмотров)

Старый 21.03.2008, 10:30
telit вне форума Посмотреть профиль Отправить личное сообщение для telit Найти все сообщения от telit
  № 4  
Ответить с цитированием
telit
 
Аватар для telit

Регистрация: Jul 2007
Сообщений: 306
Теперь можешь на silin.fatal.ru в раздел AS3 поставить ЗАЧЕТ!!!


Последний раз редактировалось telit; 21.03.2008 в 10:32.
Старый 21.03.2008, 10:40
AS3_coder вне форума Посмотреть профиль Найти все сообщения от AS3_coder
  № 5  
Ответить с цитированием
AS3_coder
Banned

Регистрация: Mar 2008
Сообщений: 2
Спасибо большое!

Старый 22.03.2008, 09:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
telit, аккаунт AS3_coder забанен. 1 человек = 1 аккаунт и плодить одинаковые темы от разных аккаунтов не пройдет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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