Monday, June 29, 2009

Using Global Variable in Flex

 

1. Declare the global variable in the main .mxml file.

 

In the main .mxml file :

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="TryAS()">
    <mx:Script>
        <![CDATA[
            public var bookSize:Rectangle = new Rectangle(0,0,800,600);

            public function TryAS():void{
                trace("Hello World");
            }
       ]]>
    </mx:Script>
</mx:WindowedApplication>

2.Use Application.application.yourGlobalVariableName to access the variable.

 

In the .as class you write :

import mx.core.Application;

// Application.application.yourGlobalVariableName

Application.application.bookSize.width

Thursday, June 25, 2009

Writing Action Script in Flex

Writing Action Script in Flex

Example of a .mxml file :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="TryAS()">
    <mx:Script>
        <![CDATA[
            import Puzzles.*;
            public function TryAS():void{
                trace("InitPuzzles");
            }
       ]]>
    </mx:Script>

</mx:Application>

Sunday, December 9, 2007

MDM + as3corelib : 存檔寫 log (文字檔 + 圖檔)

// MDM Version (http://www.multidmedia.com/)
// encoder from as3corelib (http://code.google.com/p/as3corelib/)

/*

如果你要它存 PNG 結果掛掉的話,有可能是因為 轉成 png 以後太大了

(記憶體佔用太多,血淋淋的經驗,死的不明不白,完全看不出來為什麼4 張只存了一張以後好像就沒動靜了)
可以先改用 JPG 存檔並調整他的壓縮比例 JPGEncoder(60),這樣存的檔案體積會比較小,比較不容易掛

*/

import mdm.*;
import com.adobe.images.PNGEncoder;
import com.adobe.images.JPGEncoder;


//Declare global variables

var fileFolderPath:String; // 資料夾的位置
var fileName:String; // 文字檔(log)檔名
var uniqueName:String;

// 用 Flash CS3 的話一定要先用這個指令來 Initiate
mdm.Application.init(this,OnInit); 

// 可接收關掉程式時的 Event
mdm.Application.enableExitHandler();


function OnInit():void {
OpenFile();
}

function OpenFile() {
var myDate:Date = new Date();
var folderExists:Boolean;

uniqueName = myDate.toDateString() + " - "
+ myDate.hours
+"_" + myDate.minutes
+"_" + myDate.seconds ;

fileFolderPath = mdm.System.Paths.desktop + "Record-" + uniqueName + "\\";
folderExists = mdm.FileSystem.folderExists(fileFolderPath);
if( folderExists == true ){
; // 資料夾已經存在
}
else{
// 資料夾不存在就create一個
mdm.FileSystem.makeFolderUnicode(fileFolderPath);
}

// log 檔名
fileName = "Log.txt";

// 在第一行寫入試著在第一行寫入 "#Log\n"
mdm.FileSystem.saveFileUnicode(fileFolderPath + fileName, "#Log\n");

}

// 要寫 log 的時候就把 string pass 給 WriteLog(your_string)
function WriteLog(msg:String) {
appendFile(msg);
}

function appendFile(eMsg:String) {

mdm.FileSystem.appendFileUnicode(fileFolderPath + fileName, eMsg);
}

// 回傳畫著這個 MovieClip 的 BitmapData
function mc2Bitmap(mc1:MovieClip):BitmapData {
var myBitmap:BitmapData = new BitmapData(mc1.width, mc1.height, true, 0);
myBitmap.draw(mc1);
return myBitmap;
}

// 將 MovieClip 轉成 名為 fileName.png 的 PNG 圖檔

function MovieClipToPNG( target_mc:MovieClip, fileName:String):void {
BitmapDataToPNG( mc2Bitmap(target_mc) , fileName );
}

// 將 MovieClip 轉成 名為 fileName.jpg 的 JPG 圖檔

function MovieClipToJPG( target_mc:MovieClip, fileName:String):void {

BitmapDataToJPG( mc2Bitmap(target_mc) , fileName );
}


// 將 BitmapData 轉成 名為 fileName.png 的 PNG 圖檔

function BitmapDataToPNG( targetB:BitmapData, fileName:String ):void {

var baString:String;
var bpd:BitmapData = targetB;
var ba:ByteArray;
var resultString:String;

ba = PNGEncoder.encode(bpd);

var g:Number;
g = 0;

resultString = ba[0];

// MDM 的存檔格式(由 | 分隔)
for (g = 1; g < ba.length; g++) {
resultString += "|" + ba[g];
}

mdm.FileSystem.BinaryFile.setData (resultString);
mdm.FileSystem.BinaryFile.writeData( root["fileFolderPath"] + fileName + ".png" );


}


// 將 BitmapData 轉成 名為 fileName.jpg 的 JPG 圖檔

function BitmapDataToJPG( targetB:BitmapData, fileName:String )
:void {

var baString:String;
var bpd:BitmapData = targetB;
var ba:ByteArray;
var resultString:String;

var jpgEncorder:JPGEncoder = new JPGEncoder(60);

ba = jpgEncorder.encode (bpd);

var g:Number;
g = 0;

resultString = ba[0];

// MDM 的存檔格式(由 | 分隔)
for (g = 1; g < ba.length; g++) {
resultString += "|" + ba[g];
}

mdm.FileSystem.BinaryFile.setData(resultString);
mdm.FileSystem.BinaryFile.writeData( root["fileFolderPath"] + fileName + ".jpg" );


}

Thursday, December 6, 2007

SWF, EXE, MDM 的 exe 都能關掉程式的 function

import mdm.*;

mdm.Application.init(this,OnInit);
mdm.Application.enableExitHandler();


function OnInit():void {
//mdm.Dialogs.prompt("Zinc with Flash CS3, Text Saver!");
}

// 想關程式的時候就 call MyClose()

function MyClose(){
fscommand( "quit" ); // for flash player
mdm.Application.exitWithCode(0); // for mdm

}

/*
這樣子不管單純用 swf, or swf -> exe 都可以透過 fscommand 來關程式 (用 Flash IDE開發, Debug Mode的時候)

而在用 mdm 包裝後, mdm.Application.exitWithCode(0) 就可以關程式了

所以不管你是在什麼階段都能用。
*/

Monday, December 3, 2007

Note : Adobe Flex 2 (Training from the Source)


Lesson 24 Using Shared Objects
Shared Objects 可以由複雜的資料結構組成(話是這樣說沒錯,但是目前的經驗是,也只有簡單的資料型別可以,BitmapData 等大型的東西就要轉成Byte 寫進去,再自己 parse出來了)。學到的重點是使用前最好 instantiate 給它 ex. example.data.accounts = new Array();。另外就是,如果存的東西比較複雜 ex. boolean + array => example.data.accounts = {hasWork:Boolean, buyBooks:Array}。

Note: Essential ActionScript 3.0


Chap 13 Exceptions and Error Handling

講的是 try/ catch/finally 的使用跟邏輯。有學過Java 的人應該很熟練。


Chap 14 Garbage Collection

Programmer 無法強迫System 做 Garbage Collection,甚至連提示它可以 collect 的指令好像沒有,所以一個objct 就算 reference 被設成 null,還是有可能繼續作用(這個還滿重要的,不是設成 null 就沒事了)。你只能自己讓 Deactivate Object(進入可回收狀態,回收時間仍然由系統決定),也就是
  1. 拿掉 Event Handler
  2. 停止 timer 跟 intervals
  3. 停止 playhead (不繼續播放)
  4. 把唯一由自己reference 到的object 也 deactivate。

另外一點就是,如果可以重複使用一個Object就重複使用,而 不是因為方便就一直new,這樣很容易就會把記憶體用光(雖然, 這樣就可以觸發 Garbage Collection!!!)。

使用 MDM 包裝 swf 檔成為全螢幕執行的設定方式

Style-> Window Settings : No Border
Size/Position-> Window Size: MovieSize
Extras : Maximized

from Jones