以注册点拖动旋转对象

给群里的朋友写的东西..不多说了...


  相关下载 (26.5 KiB, 184 hits)

分类: ACTIONSCRIPT , 标签: ,

Air创建子窗体

今天整理了AIR两种创始子窗体的方法
一种是创建空的窗体..再往里边添加内容
另外一种是把一个自定义的组件创建为子窗体
Air创建子窗体


CreateWindow.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" width="300" height="200">
	<mx:Script>
		<![CDATA[
			private function create1():void
			{
				var opt:NativeWindowInitOptions = new NativeWindowInitOptions();
				var window:NativeWindow = new NativeWindow(opt);
				window.title = "代码创建空白子窗体"
				window.width = 300;
				window.height = 200;
				window.activate();
			}
			private function create2():void
			{
				var window:SubWindow = new SubWindow();
				window.open();
			}
		]]>
	</mx:Script>
	<mx:Button x="10" y="10" label="自定义Window组件创建子窗体" click="create2()"/>
	<mx:Button x="10" y="42" label="代码创建空白子窗体" click="create1()"/>
</mx:WindowedApplication>


SubWindow.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12"
	title="自定义Window组件创建子窗体"
	 width="300" height="200">
	<mx:TextArea text="一般先放内容的话用这种方法创建" left="10" right="10" top="10" bottom="10"/>
</mx:Window>


  相关源文件 (402.4 KiB, 404 hits)
分类: AIR , 标签: , ,

动态"修改"注册点

经常有朋友问..如何动态修改一个显示对象的注册点..
而一般的朋友需要修改注册点,基本上都是旋转的需要..
今天来讨论一下这个问题..
首先..我们先理解一下..注册点是一个什么样的概念..


我们先用三种情况来对比一下..
下图是三个MC注册点分别是..左上/居中/右下的三种情况..MC里画着一个100px*100px的正方形..
动态修改注册点

从上图中我们可以看到..所谓的注册点都是相对的..
一个显示对象的注册点,其实就是他的子对象的相应位置
左上:子对象相对位置为0,0
居中:子对象相对位置为-width/2,-height/2
右下:子对象相对位置为-width,-height
其它位置如此类推..

按这种情况..我们看下以下的swf,点击swf任意的地方.会按左上/居中/右下循环切换..

这就是修改注册点的最基本的方法..


相应的..像Bitmap这类显示对象..或像组件这些比较不容易操作子对象的,一般采取的方法就是给他添加一个父对象,然后通过上面的方法来处理..
这种方法的缺点就是增加了无用的容器..复杂化了结构..

那么我们从另一个角度出发..
以不同的注册点旋转..就是以不同的中心点旋转..
我们只要模拟一个中心点..然后计算出对象以该点旋转后相应的x,y的值,就可以达到我们需要的效果..

看看下面的例子..swf上按住左键..调旋转中心的位置..按start开始旋转..按stop停止..

像这样..无论是任意的显示对象..我们都可以指定任意坐标为"注册点",来进行旋转..
不需要像第一种方法..需要改成子对象的位置或添加一个父对象..


下面是源码...
代码写得很乱..角度算了很久...把初中的sin/cos全忘了...
迟点再改成一个类直接调..今天就先到这里..
  相关源文件 (269.2 KiB, 261 hits)
分类: ACTIONSCRIPT , 标签:

Flash下载器

今天用flash帮助里的教程..改写了一个下载器..
测试了一下flash中的FileReference.download..

下载是下载器的demo..带一些简单的统计信息..


代码基本上就是帮助里的..
//Copyright © 2008. Http://L4cd.Net All Rights Reserved.
package {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.net.*;
	import flash.utils.*;
	import fl.managers.*;
	import flash.system.*;

	public class FileReference_download extends Sprite {
		private var file:FileReference;
		private var texthtml:String;
		private var time:Number;
			public function FileReference_download() {
			stage.scaleMode = "noScale";
			var style:TextFormat = new TextFormat("Verdana",12);
			StyleManager.setStyle("textFormat",style)
			
			
			texthtml = "请在上方输入框内输入需要下载的文件地址,外网文件请注意是否有跨域文件.<br/><br/>当前的文件为一个空的swf,为了看到下载效果,我导入了一个中文字体."
			txt.htmlText = texthtml
			
			file = new FileReference();
			file.addEventListener(Event.CANCEL, cancelHandler);
			file.addEventListener(Event.COMPLETE, completeHandler);
			file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			file.addEventListener(Event.OPEN, openHandler);
			file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			file.addEventListener(Event.SELECT, selectHandler);
			bt.addEventListener(MouseEvent.CLICK,startHandler)
		}
		private function startHandler(event:MouseEvent):void {
			if(bt.label == "取消下载"){
				file.cancel();
				txt.htmlText += "下载已取消."
				bt.label = "开始下载"
				return;
			}
			try{
				file.download(new URLRequest(url.text));
			}catch(e:Error){
				txt.htmlText = e.message
			}
		}
		private function cancelHandler(event:Event):void {
			bt.label = "开始下载"
			texthtml = "下载已取消.<br/>"
				txt.htmlText = texthtml;
		}

		private function completeHandler(event:Event):void {
			bt.label = "开始下载"
			txt.htmlText += "下载完毕."
		}

		private function ioErrorHandler(event:IOErrorEvent):void {
			bt.label = "开始下载"
			texthtml = "无较的下载地址.<br/>";
				txt.htmlText = texthtml;
		}

		private function openHandler(event:Event):void {
			texthtml += "正在连接成功,开始下载...<br/>";
				txt.htmlText = texthtml;
			time = getTimer();
		}

		private function progressHandler(event:ProgressEvent):void {
			var file:FileReference = FileReference(event.target);
			var s:Array = [];
			s["total"] = event.bytesTotal;
			s["loaded"] = event.bytesLoaded;
			s["speed"] = int(event.bytesLoaded/(getTimer() - time)*100)/100;
			s["t1"] = int((getTimer() - time)/1000*100)/100;
			s["t2"] = int((s["total"] - s["loaded"])/s["speed"]/1000*100)/100;
			
			
			var t:String = "总字节 : "+s["total"]+"<br/>";
			t += "下载字节: "+s["loaded"]+"<br/>";
			t += "百分比 : "+percentText(s["loaded"]/s["total"]*100)+int(s["loaded"]/s["total"]*10000)/100+"%<br/>";
			t += "平均速度: "+s["speed"]+"kb<br/>";
			t += "已用时间: "+s["t1"]+"秒<br/>";
			t += "剩余时间: "+s["t2"]+"秒<br/>";
			txt.htmlText = texthtml + t;
		}
		private function percentText(ps:int):String{
			var txt:String = "";
			for(var i:uint = 0;i<int(ps/5);i++)txt+="|";
			return txt+"..."
			
		}
		 private function securityErrorHandler(event:SecurityErrorEvent):void {
			bt.label = "开始下载"
			texthtml += "<font color='#ff6600'>"+event.text+"</font><br/>"
			txt.htmlText = texthtml;
		}

		private function selectHandler(event:Event):void {
			bt.label = "取消下载"
			texthtml = "正在进行连接...<br/>";
			txt.htmlText = texthtml;
		}
	}
}


  相关源文件 (307.5 KiB, 233 hits)
分类: ACTIONSCRIPT , 标签: ,

使用bitmapData简单实现涂鸦中的橡皮功能(as3)

之前有网站转载过blog里一篇
使用bitmapData简单实现涂鸦中的橡皮功能
由于里边没介绍..其实代码是as2的..后来一些网站误传为as3的代码..
今天把之前的代码改成了as3的代码..重新发上来..有需要的朋友可以看看...
查看文章剩余部份
分类: ACTIONSCRIPT , 标签: , , ,

自定义Flex的Loading界面(源码)

这个方法网上已经有人写过例子...
在这里我只是自己做个实例并记录一下..
首先~自定义Flex加载的原理其实就是继承mx.preloaders.DownloadProgressBar类..然后重写相关的方法..
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	import mx.events.FlexEvent;
	import mx.preloaders.DownloadProgressBar;

	public class LoadingExampleProgressBar extends DownloadProgressBar
	{
		private var logo:Loader;
		private var txt:TextField;
		private var _preloader:Sprite;
		public function LoadingExampleProgressBar()
		{
			logo = new Loader();
			logo.load(new URLRequest("l4cd.png"));
			addChild(logo);
			
			var style:TextFormat = new TextFormat(null,null,0xFFFFFF,null,null,null,null,null,"center");
			txt = new TextField();
			txt.defaultTextFormat = style;
			txt.width = 200;
			txt.selectable = false;
			txt.height = 20;
			addChild(txt);
			
			super();
		}
		//最重要的代码就在这里..重写preloader,让swf执行加载的时候~进行你希望的操作~
		override public function set preloader(value:Sprite):void{
			_preloader = value
			//四个侦听~分别是 加载进度 / 加载完毕 / 初始化进度 / 初始化完毕
			_preloader.addEventListener(ProgressEvent.PROGRESS,load_progress);
			_preloader.addEventListener(Event.COMPLETE,load_complete);
			_preloader.addEventListener(FlexEvent.INIT_PROGRESS,init_progress);
			_preloader.addEventListener(FlexEvent.INIT_COMPLETE,init_complete);
			
			stage.addEventListener(Event.RESIZE,resize)
			resize(null);
		}
		private function remove():void{
			_preloader.removeEventListener(ProgressEvent.PROGRESS,load_progress);
			_preloader.removeEventListener(Event.COMPLETE,load_complete);
			_preloader.removeEventListener(FlexEvent.INIT_PROGRESS,init_progress);
			_preloader.removeEventListener(FlexEvent.INIT_COMPLETE,init_complete);
			stage.removeEventListener(Event.RESIZE,resize)
		}
		private function resize(e:Event):void{
			logo.x = (stage.stageWidth - 40)/2;
			logo.y = (stage.stageHeight - 80)/2;
			txt.x = (stage.stageWidth - 200)/2;
			txt.y = logo.y + 40+5;
			
			graphics.clear();
			graphics.beginFill(0x333333);
			graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
			graphics.endFill();
		}
		private function load_progress(e:ProgressEvent):void{
			txt.text = "正在加载..."+int(e.bytesLoaded/e.bytesTotal*100)+"%";
		}
		private function load_complete(e:Event):void{
			txt.text = "加载完毕!"
		}
		private function init_progress(e:FlexEvent):void{
			txt.text = "正在初始化..."
		}
		private function init_complete(e:FlexEvent):void{
			txt.text = "初始化完毕!"
			remove()
			//最后这个地方需要dpe一个Event.COMPLETE事件..表示加载完毕让swf继续操作~
			dispatchEvent(new Event(Event.COMPLETE))
		}
	}
}

自定义了加载类后..我们新建一个app测试一下..
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
	preloader="LoadingExampleProgressBar" 
	backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#333333, #333333]">
</mx:Application>
//请自行增加一“大”体积的东西..必放到网上去测试...

  相关源码 (142.0 KiB, 524 hits)
分类: FLEX , 标签: , ,

连连看as3源码



算法自己写的..也许有点乱..
放出源码~有兴趣的朋友可以看看..

主要相关的代码在
net.L4cd.game.iLLK
这个类里...
包括验证点../找出提示点等..
里边还包括了
gs.*
用来让线发光..~

  连连看相关文件 (164.7 KiB, 739 hits)
分类: GAME , 标签: , ,

Video.clear()注意事项

当我们做多个视频切换播放的时候..
为了在当前视频未加载前..不显示之前的视频画面..
一般会使用Video.clear()来清楚之前的画面..

这里需要注意注意的是..
如果你在video使用了smoothing = true(平滑显示视频)属性..
clear()将无效..
就算你clear之前把smoothing设置为flase..也一样无效..
唯一的方法就是remove当前的Video,重新创建一个Video对象..
所以在制作视频播放器的时候..需要二选一..按实际情况来选择自己的需求..
分类: ACTIONSCRIPT , 标签: ,

AIR自定义皮肤时常用到的操作

接触air也有一些时间了...
也写了几个air的程序...(其实也就是把以前的web程序转换一下..增加了一些桌面功能)...
今天以一个实例给大家介绍一下..Air自定义皮肤,一些常见的窗体操作...
如.拖动标题移动窗体,最大化/还原,最小化,关闭,双击标题最大化/还原,拖动边缘调窗体大小等..
air

上图为最终效果,,以及一些操作说明..
其实在这里的自定义皮肤,就是隐藏了边框..然后使用在程序里的元件..调用相关的命令,达到一般的窗体功能..
隐藏了边框在Flash中设置步骤为:(命令 > AIR - 应用程序与安装程序设置 > 窗体样式 - > 自定义镶边)
查看文章剩余部份
分类: AIR , 标签: ,

在FLEX里显示Video的问题

在Flash里..我们可以直接使用
var _video:Video = new Video()
addChild(_video)
来添加Video对象..


可是在Flex里..上述的代码会提示不可以强制把Video对转转换成UIComponent对象..
我们必须通过VideoDisplay作为"桥"..先把Video添加到VideoDisplay中..
再把VideoDisplay添加到Application中..才可以完成Video的显示.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
	<mx:Script>
		<![CDATA[
			private var _video:Video;
			private function init():void{
				_video = new Video(320,240);
				v_Display.addChild(_video);
				
				//获取cam对象.
				_video.attachCamera(Camera.getCamera());
				_video.width = 320
				_video.height = 240
			}
		]]>
	</mx:Script>
	<mx:VideoDisplay id="v_Display" width="320" height="240"/>
</mx:Application>
分类: FLEX , 标签: ,