高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

Flash Debug Tool – FlashTracer

Flash的debug是件痛苦的事,因為SWF在瀏覽器中並不會丟出太多的訊息讓開發者知道到底發生了事情,在Flash的IDE中,可以用trace()的方式把一些測試訊息傳出來,但這在發佈成SWF之後又看不到..

有善心人士(Alessandro Crugnola)開發了一個Firefox的外掛元件,可以讓trace()照樣像在Flash IDE一樣把訊息傳出來,讓Flash的開發人員多了一個debug的方法。

原文說明如下:

While running any .swf Flash file in your browser you can see all the output generated by the “trace” flash functions in this sidebar component. You *NEED* the flash player debug version to run this extension correctly.

除了安裝完FlashTracer的元件外,你可能還需要下載這個

不過後來似乎因為Flash Player有些不同,FlashTracer可能會沒法子正常運作 試著點開Firefox的工具→附加元件→找到FlashTracer的選項→修改”Select output file” 把路徑改成

C:\Documents and Settings\{YourUserName}\Application Data\Macromedia\Flash Player\Logs\flashlog.txt

其中{YourUserName}指的是登入名稱,請依個人電腦設定不同修改

一切安裝、設定完成,重新啟動Firefox,選擇「工具」→「Flash Tracer」(或是快速鍵Alt+A)

如果順利的話,試試這個網址:http://www.eddie.com.tw/FlashLabs/Examples/tracer/

如果能看到它trace出來的資料,恭喜你安裝成功了! image

感謝原作(Alessandro Crugnola)的佛心呀!!

附註:補充一下,其實雖然是Firefox的外掛工具,但其實IE也能用,不過IE也得裝個debug版本的flash player(下載),安裝完之後開啟Firefox,再把Flashtracer打開,即使在IE裡的訊息,Flashtracer也抓得到 :)

Attached sounds fail in loaded movies

這兩天在處理一個案子時遇到一個狀況,困擾了我兩天。例如我先建立了一個menu.swf,並在menu.swf使用Sound類別建立、播放音效如下:

1
2
3
var mySound:Sound = new Sound();
mySound.attachSound("soundClip");
mySound.start();

單獨播放時正常,但當被load到其它swf就發生狀況,聲音出不來。

查了一下Adobe網站的資料有發現這一條這樣寫著:

This script will function properly except when the SWF containing it is loaded into another movie by aloadMovie action. In this case, the loaded movie loses it’s connection to the linked sound.

解決方法是在建立Sound類別時加個this就行了:

1
2
3
var mySound:Sound = new Sound(this);
mySound.attachSound("soundClip");
mySound.start();

搞定收工 :)

Zend Framework安裝

環境:

  • Windows XP Professional(SP2)
  • Appserv(Apache 2.2.4, PHP/5.2.3, MySQL 5.0.45)
  • Zend Framework 1.0.1(2007-07-30)

基本設定

1. 設定mod_rewrite:

編輯httpd.conf

#LoadModule rewrite_module modules/mod_rewrite.so

如果前面的”#”字在的話,就把它拿掉吧(mod_rewrite的詳細資料,可參考apache網站)。

2. 設定include_path:

設定include path之目的,是為了方便在include類別時,省去輸入長長一串位置的時間

  • 可直接修改php.ini之設定。
  • 或是於程式中動態加入set_include_path

參考網址:http://tw2.php.net/set_include_path

3. 設定httpd.conf之document root:

請參考下一段之目錄架構,將document root指向/html

以上設定完之後,請重新啟動Apache,並建議檢視一下error log,看是否有錯誤的地方

Zend Framework設定

1.基本目錄架構

 |-/application
-|-/controllers (MVC之C)
-|-/models (MVC之M)
-|-/views (MVC之V)
–|-/filters
–|-/helpers
–|-/scripts
 |-/html
-|-/images (存放影像檔案)
-|-/scripts (存放script檔)
-|-/styles (存放CSS檔)
-|-.htaccess (配合url rewrite之檔案)
-|-index.php (bootstrap file)
 |-/library
-|-/Zend (這個是ZF的library,可從ZF網站下載)

2. 檔案設定

index.php(bootstrap file),可視各別情況修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
  //Basic Config
  error_reporting(E_ALL | E_STRICT);  //設定Error Report的等級
  date_default_timezone_set('Asia/Taipei');  //設定時區為台北

  //Include path
  define ('P_S', PATH_SEPARATOR);
  set_include_path('.' .P_S .'../library' .P_S .'../application/models/' .P_S .get_include_path());

  require_once 'Zend/Loader.php';
  Zend_Loader::registerAutoload();

  //Controller
  $frontController = Zend_Controller_Front::getInstance();
  $frontController->setControllerDirectory('../application/controllers');

  $frontController->dispatch();

.htaccess設定:

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

基本上這樣設定完,就差不多把環境建置好了。接下來,就是開始設定各別Controller的工作了

其它

在windows系統下要做出.htaccess,可以直接用記事本來做。存檔的時候,選擇「存檔類型(T)」為「所有檔案」,即可直接輸入檔名.htaccess而不會發生錯誤。

其它目錄也可加個.htaccess檔來保護目錄裡的資料,內容為:

deny from all

Controller設定

先設定一個最基本的IndexController,架構請參考上一段:

 |-/application
-|-/controllers (MVC之C)
–|-IndexController.php (Index的Controller) <-新增這個
-|-/models (MVC之M)
-|-/views (MVC之V)
--|-/filters
--|-/helpers
--|-/scripts
--|-/index <--新增這個目錄
----|-index.phtml <--新增這個檔案
----|-happy.phtml <--新增這個檔案

IndexController.php

1
2
3
4
5
6
7
8
9
10
11
<?php
  require_once 'Zend/Controller/Action.php';
  class IndexController extends Zend_Controller_Action{
    public function indexAction(){
      //可以在寫index的Action
    }

    public function happyAction(){
      //可以在這裡寫happy的Action
    }
  }

index.phtml & happy.phtml

這個是indexAction的view,當執行indexAction時,預設會找同名名檔案,並render出頁面內容。Controller的設定大概這樣就完成了(細節可再參觀ZF的Document或是其它高手們的Tutorial)。接下來,打開browser,輸入網址:

http://127.0.0.1/

或是

http://127.0.0.1/index

這兩個網址,它都會找IndexController裡index這個action,然後會找index.phtml來render頁面內容。

http://127.0.0.1/index/happy

它則是會找IndexController裡happy這個action,然後會找happy.phtml來render頁面內容。

基本上到這裡,就把這個小小的MVC架構做出來了。

下一回,再來寫個自己做的簡單的通訊錄的CRUD(Create, Read, Update, Delete) 初試PHP的Framework,難免有些地方寫得不好,還請多指教 :)

PHP5 Magic Function : __autoload

在PHP裡使用類別,若忘了把類別檔案給include進來,在實體化的時候會發生錯誤。在PHP5裡有__autoload這個方便的function可以用。透過它,就可以讓類別檔在需要的時候載入了:

1
2
3
4
5
6
7
8
9
10
11
<?php
  function __autoload($class_name)
  {
      $filename = strtolower($class_name) .'.php';
      $file = site_path .'classes' .DIRECTORY_SEPARATOR .$filename;
      if(!file_exists($file))
      {
          return false;
      }
      include_once ($file);
  }

這樣只要把類別檔放在classes目錄裡面,它在需要用的時候就會透過__autoload function去找到相對應的檔案。

根據php.net所寫的注意事項:

  1. 它在Command Line模式底下不能用
  2. 在裡面丟出Exception抓不到

自動產生swf檔

我的環境: Windows XP Professional(SP2) Appserv(Apache 2.2.4, PHP/5.2.3, MySQL 5.0.45)

透過Ming就可以直接產生swf檔

說明:

Ming is a C library for generating SWF (”Flash”) format movies, plus a set of wrappers for using the library from C++ and popular scripting languages like PHP, Perl, Python, and Ruby.

但Appserv預設沒有把Ming module打開,所以需要先修改一下php.ini

;extension=php_ming.dll

找到這一行,然後把前面的分號去掉,存檔,重新啟動Apache!

程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  $_fonts = new SWFFont('Arial'); //設定字型

  $_text  = new SWFTextField();   //建立TextField
  $_text->setFont($_fonts);       //把字型掛上去
  $_text->setColor(0,0,0);        //設定顏色(R,G,B)
  $_text->setHeight(100);         //設定TextField的高度
  $_text->addString('大家好!');   //把字串掛上去

  $_movie = new SWFMovie();       //建立一個Movie
  $_movie->setDimension(800,600); //設定大小
  $_movie->add($_text);           //把字串加上去

  header('Content-type: application/x-shockwave-flash');
  $_movie->output();

大功告成 :)

如果還要在Server實際產生檔案的話就加這行:

$_movie->save(’abc.swf’);   //在同目錄底下存檔為abc.swf

詳細的使用方法,請見Ming網站。

用Ming做出來的作品集:http://www.gazbming.com/

看看別人的作品集,遠比我上面這個例子好上太多