2008 年 10 月 08 日 09:39:48 (L4CD.NET) / /
给群里的朋友写的东西..不多说了...
相关下载 (26.5 KiB, 184 hits)
2008 年 10 月 07 日 09:31:24 (L4CD.NET) / /
今天整理了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
,
标签: AIR , 创建 , 子窗体
2008 年 09 月 28 日 09:16:29 (L4CD.NET) / /
经常有朋友问..如何动态修改一个显示对象的注册点..
而一般的朋友需要修改注册点,基本上都是旋转的需要..
今天来讨论一下这个问题..
首先..我们先理解一下..注册点是一个什么样的概念..
我们先用三种情况来对比一下..
下图是三个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)
2008 年 09 月 26 日 09:04:10 (L4CD.NET) / /
今天用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)
2008 年 09 月 25 日 11:43:41 (L4CD.NET) / /
之前有网站转载过blog里一篇
使用bitmapData简单实现涂鸦中的橡皮功能由于里边没介绍..其实代码是
as2的..后来一些网站误传为
as3的代码..
今天把之前的代码改成了as3的代码..重新发上来..有需要的朋友可以看看...
查看文章剩余部份
2008 年 09 月 19 日 11:34:31 (L4CD.NET) / /
这个方法网上已经有人写过例子...
在这里我只是自己做个实例并记录一下..
首先~自定义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)
2008 年 09 月 16 日 05:06:29 (L4CD.NET) / /
算法自己写的..也许有点乱..
放出源码~有兴趣的朋友可以看看..
主要相关的代码在
net.L4cd.game.iLLK
这个类里...
包括验证点../找出提示点等..
里边还包括了
gs.*
用来让线发光..~
连连看相关文件 (164.7 KiB, 739 hits)
分类: GAME
,
标签: as3 , 源码 , 连连看
2008 年 09 月 16 日 05:05:19 (L4CD.NET) / /
当我们做多个视频切换播放的时候..
为了在当前视频未加载前..不显示之前的视频画面..
一般会使用Video.clear()来清楚之前的画面..
这里需要注意注意的是..
如果你在video使用了smoothing = true(平滑显示视频)属性..
clear()将无效..
就算你clear之前把smoothing设置为flase..也一样无效..
唯一的方法就是remove当前的Video,重新创建一个Video对象..
所以在制作视频播放器的时候..需要二选一..按实际情况来选择自己的需求..
2008 年 09 月 15 日 05:02:34 (L4CD.NET) / /
接触air也有一些时间了...
也写了几个air的程序...(其实也就是把以前的web程序转换一下..增加了一些桌面功能)...
今天以一个实例给大家介绍一下..Air自定义皮肤,一些常见的窗体操作...
如.拖动标题移动窗体,最大化/还原,最小化,关闭,双击标题最大化/还原,拖动边缘调窗体大小等..

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