要说这下雪效果真的是太老土了,不过今天为了演示如何创建无任务栏图标的窗体,就暂时就它吧,呵呵。
首先看一下代码结构:

打开flash cs3,新建一个AIR文档,保存为Snow.fla文件,文档类中填写Main,然后在同目录下新建一个Main.as文件,在其中写入经下代码:
package
{
import flash.desktop.DockIcon;
import flash.desktop.NativeApplication;
import flash.desktop.SystemTrayIcon;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindowSystemChrome;
import flash.display.NativeWindowType;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.system.Capabilities;
import flash.utils.Timer;
/**
* ...
* @author Jaja
*/
public class Main extends Sprite
{
private var snowWindow:NativeWindow;
private var rootMenu:NativeMenu = new NativeMenu;
private var quitItem:NativeMenuItem = new NativeMenuItem("退出");
private var timer:Timer = new Timer(50);
public function Main():void
{
buildNewWindow();
buildMenu();
configListeners();
timer.start();
buildTray();
stage.nativeWindow.close();
}
private function buildNewWindow():void {
snowWindow = getWindow(false, false, false, true);
snowWindow.x = 0;
snowWindow.y = 0;
snowWindow.width = Capabilities.screenResolutionX;
snowWindow.height = Capabilities.screenResolutionY;
snowWindow.alwaysInFront = true;
snowWindow.activate();
}
private function buildMenu():void {
rootMenu.addItem(quitItem);
}
private function configListeners():void {
quitItem.addEventListener(Event.SELECT, function() { snowWindow.close(); } );
timer.addEventListener(TimerEvent.TIMER, snow);
}
private function snow(event:TimerEvent):void {
var flower:SnowFlower = new SnowFlower;
snowWindow.stage.addChild(flower);
}
private function buildTray():void {
var sprite:Sprite = new Sprite;
sprite.graphics.beginFill(0xFFFFFF);
sprite.graphics.drawCircle(8, 8, 8);
sprite.graphics.endFill();
var bitmapData:BitmapData = new BitmapData(16, 16, true, 0x00FFFFFF);
bitmapData.draw(sprite);
var bitmap:Bitmap = new Bitmap(bitmapData);
NativeApplication.nativeApplication.icon.bitmaps = [bitmap];
SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = rootMenu;
}
private function getWindow( showTaskIcon:Boolean = true, resizable:Boolean = true, maximizable:Boolean = true, transparent:Boolean = false):NativeWindow {
var option:NativeWindowInitOptions = new NativeWindowInitOptions;
option.resizable = resizable;
option.maximizable = maximizable;
if(transparent){
option.systemChrome = NativeWindowSystemChrome.NONE;
option.transparent = true;
}
if(!showTaskIcon){
option.type = NativeWindowType.UTILITY;
}
var win:NativeWindow = new NativeWindow(option);
var stage:Stage = win.stage;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
win.width = 400;
win.height = 300;
return win;
}
}
}
若要运行此例我们还需要一个SnowFlower类。
在同目录下新建一个SnowFlower.as,在其中输入以下代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.system.Capabilities;
/**
* ...
* @author Jaja
*/
public class SnowFlower extends Sprite
{
private var speedX:int = 0;
private var speedY:int = 0;
public function SnowFlower() :void
{
buildFlower();
initSpeed();
initLocal();
configListeners();
}
private function buildFlower():void {
graphics.beginFill(0xFFFFFF, Math.random() * 0.5 + 0.5);
graphics.drawCircle(0, 0, Math.random() * 5);
graphics.endFill();
}
private function initSpeed():void {
speedX = Math.random() * 6 - 3;
speedY = Math.random() * 5 + 5;
}
private function initLocal():void {
this.x = Capabilities.screenResolutionX * Math.random();
this.y = -10;
}
private function configListeners():void {
this.addEventListener(Event.ENTER_FRAME, movingFlower);
}
private function movingFlower(event:Event):void {
this.x += speedX;
this.y += speedY;
if (this.x > Capabilities.screenResolutionX) {
this.removeEventListener(Event.ENTER_FRAME, movingFlower);
try {
this.parent.removeChild(this);
}catch (error:Error) {
}
}
}
}
}
好了,Ctrl+Enter运行我们的实例,看看效果吧!