[Flash AS3] 載入與按鈕 (2)

既然是有外部載入的,但有些問題可以討論的

A.swf載入B.swf

應該A.swf跟B.swf的畫格數不同
但我有在B.swf做按鈕,按下後將A.swf的畫格切換到指定畫格
載入其他的swf使用

由剛剛的方式就可以看到,MainTimeline能有多個但stage只有一個

OK.  這裡告訴你如何從A.swf設定事件在B.swf的按鈕上

先寫載入B.swf到myb_mc的語法

var loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_CompleteHandler);
loader.load(new URLRequest(“B.swf”));
myb_mc.addChild(loader);
loader.x = 0;
loader.y = 0;

這裡不同的是,多了一行語法,意思是偵聽事件,當載入完成後執行loader_CompleteHandler函數
在loader_CompleteHandler函數可以這麼寫

function loader_CompleteHandler(e:Event):void
{
   loader.getChildAt(0).btn01.addEventListener(MouseEvent.CLICK,btn01_clickHandler);
}

function btn01_clickHandler(e:MouseEvent):void
{
   /*一些程式碼*/
}

幫在B.swf的btn01按鈕掛上偵聽事件

————————————————————–

方式不同,但做法相同的另一個寫法
陣列寫法,事先定義好按鈕陣列
程式寫的時候一併附掛偵聽事件,再由引發事件主人的名字還判斷要做甚麼事

 

function loader_CompleteHandler(e:Event):void
{
 var buttonsArr:Array = [loader.getChildAt(0).btn01, loader.getChildAt(0).btn02];

 for (var i:int = 0; i< buttonsArr.length; i++)
 {
  buttonsArr[i].addEventListener(MouseEvent.CLICK,clickHandler);
 }
}

function clickHandler(e:MouseEvent):void
{
   switch (evt.target.name)
   {
     case “btn01” :
          /*一些程式碼*/
          break;
      case “btn02” :
          /*一些程式碼*/
          break;
    }
}

 

[Flash AS3] 載入與按鈕 (1)

完全沒碰過Flash的語法
或者以下我的文章大家如果看不懂

強烈建議手邊要有書!!!

因為AS3語法不會太簡單,我對這語法還不熟
這理做筆記用以免馬上忘記

這是普通載入一個swf或是圖檔的寫法

var loader = new Loader();   //設定loader為載入影片的物件
loader.load(new URLRequest(“home.swf”)); //設定載入來源名稱
addChild(loader);    //載入至舞台(stage)上
loader.x = 0;  //設定載入後的X位置
loader.y = 0;  //設定載入後的Y位置

 語法中addChild的前面如果沒寫字,就是載入到舞台上
而有寫名字就會載入到指定名稱的MovieClip上

例如

myMovieClip.addChild(loader);

=======================================================

先說說Flash的階層概念

在Flash中,大部分的東西都是物件(DisplayObject),只是有名字跟沒名字而已(可做程式化控制)
載有載入外部檔案的時候,MainTimeline可以有多個,而stage只有一個

根目錄是[object Stage]

假設空白舞台上有個MovieClip叫做show_me

[object Stage]>[object MainTimeline]>show_me [object  MovieClip]

———————————–

如何切換其路徑?

假設要切換到[object MainTimeline]
可以這樣測試

trace(stage.numChildren); 
trace(stage.getChildAt(0)); 

Output視窗就會顯示1[object MainTimeline]
意指stage下只有一個子物件,而該第0號物件為MainTimeline (主時間軸)

相關指令:
numChildren():int                      是該物件底下有多少子物件
getChildAt(index:int)                  抓取第n個子物件
getChildByName(name:String)   抓指定名稱的子物件

———————————–

剛剛有提到
例如載A.swf載入B.swf的時候,MainTimeline會有多個,而stage只有一個
B.swf獨立執行時,有它自己的stage

而被A.swf所載入時,MainTimeline的父物件會被換成loader

如何知道的?

有個指令叫parent抓取其父物件

if (getChildAt(0).parent.parent == this.stage)
{
   trace(“並未由外部載入”);
}
else
{
   trace(“由外部載入”);
   trace(getChildAt(0).parent.parent);
}

這是判斷swf是否從外部載入,可判斷該swf執行時有沒有看到stage
外部載入這行就會顯示該loader物件為誰

 

 

 

[MySQL] 解決中文亂碼,預設編碼改為UTF-8設定

這個設定幾乎是設定MySQL必備的設定

這問題特別在xampp的環境(Windows版和Linux版)下,或者Fedora Linux使用yum安裝的mysqld會出現的問題

 

新增表格如果不指定編碼,預設會用latin1

在C:\xampp\mysql\bin\my.ini     (Windows版的路徑)

找到 [client] 區塊

加入

default-character-set=utf8

找到 [mysqld] 區塊

加入

character-set-server=utf8
collation-server=utf8_general_ci

———————————————————————–

如果是Linux的Xampp for linux,用命令列打入
vi /opt/lampp/etc/my.cnf

如果是yum裝的mysqld,用命令列打入

vi /etc/my.cnf

照Windows的敘述做修改

[Fedora12]Linux的GRUB修復,安裝GRUB

大家在製作多重開機時都會遇到這個問題
就是不管是XP先安裝或是Linux先安裝

都會有開機資訊被覆蓋的情況

先講重要概念

————————————————————————–

重要概念

1. MBR為Master Boot Record每顆硬碟只有一個,寫在硬碟的第0軌上

2. 每切出的分割,除了裡面有檔案系統的資訊外,還有一個開機資訊(boot sector)

3. 大致的開機流程是,當BIOS控制權轉交到一顆硬碟上,會先讀取該硬碟的MBR
再由MBR裡寫的資訊(如果沒有則為active的分割區),載入該分割區的(boot sector),再經由該資訊,找到系統重要檔案,載入作業系統

4. 而多重開機則大多為在MBR裡寫入開機管理程式,顯示介面讓使用者選擇到開機的分割區或是其他資訊
(也有些開機管理程式程式太大,MBR的空間塞不進去,會從MBR中導到某個分割區的boot sector,再從該資訊載入開機管理程式)

5. 而Linux比較特別,可以直接從GRUB直接載入核心,載入作業系統 

解決辦法如下:

————————————————————————–

winXP下的開機資訊修復

放入XP安裝光碟,用它開機

按R進入Recovery Console下打fixmbr修復

或是使用spfdisk的修復MBR功能

A:\>spfdisk /mbr

————————————————————————–

Linux下的開機選單(GRUB)修復

放入你使用的Linux版本的LiveCD,用它開機
在登入到桌面之後,打開命令列

以Fedora 12為例 (GRUB 1版的做法)

(註:以下這段ubuntu就不適用,因為它使用GRUB 2版。做法為另一種)
(該做法不限定在Fedora,Redhat系列的都可以用,像是RHEL,Cent OS … 等等)

先打入fdisk -l查看磁碟分割的狀況

[root@localhost ~]#fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x129dfc88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63    18844244     9422091    7  HPFS/NTFS
/dev/sda2        18844245   625137344   303146550    f  W95 Ext’d (LBA)
/dev/sda5        18860310    52516484    16828087+   7  HPFS/NTFS
/dev/sda6        52516548    60918479     4200966   83  Linux
/dev/sda7        60918543    62990864     1036161   82  Linux swap / Solaris
/dev/sda8        62990928    96454259    16731666    7  HPFS/NTFS
/dev/sda9        96454323   625137344   264341511    7  HPFS/NTFS

 

找到Fedora安裝的分割區(ext3或ext4分割,該目錄含有GRUB的資訊)
我的電腦為/dev/sda6

打入grub進入頁面

[root@localhost~]#grub

切換根目錄為Fedora安裝的目錄

grub> root (hd0,5)
root (hd0,5)
 Filesystem type is ext2fs, partition type 0x83

這個時候可能要嘗試一下,大約是在前面查到的sda6的上一號或下一號
出現ext2fs字樣就可以繼續

 

範例1:

寫入開機資訊到該硬碟的MBR

grub> setup (hd0)
setup (hd0)
Checking if “/boot/grub/stage1” exists… no
Checking if “/grub/stage1” exists… yes
Checking if “/grub/stage2” exists… yes
Checking if “/grub/e2fs_stage1_5” exists… yes
Running “embed /grub/e2fs_stage1_5 (hd0)”…  15 sectors are embedded.
succeeded
Running “install /grub/stage1 (hd0) (hd0)1+15 p (hd0,5)/grub/stage2
/grub/grub.conf”… succeeded
Done.

出現類似succeeded字樣就成功了

 

範例2:

寫入開機資訊到Fedora的該分割區的開機磁軌
(我的是sda6,也就是這裡的(hd0,5)每台電腦環境不同,請以你的為主)

grub> setup (hd0,5)
setup (hd0,5)
 Checking if “/boot/grub/stage1” exists… yes
 Checking if “/boot/grub/stage2” exists… yes
 Checking if “/boot/grub/e2fs_stage1_5” exists… yes
 Running “embed /boot/grub/e2fs_stage1_5 (hd0,5)”… failed (this is not fatal)
 Running “embed /boot/grub/e2fs_stage1_5 (hd0,5)”… failed (this is not fatal)
 Running “install /boot/grub/stage1 (hd0,5) /boot/grub/stage2 p /boot/grub/grub.conf “… succeeded
Done.

出現類似succeeded字樣就成功了

————————————————————————–

這篇很簡略的寫出操作的重點

詳細請看

http://linux.vbird.org/linux_basic/0510osloader.php#grub_install

http://bentai.wordpress.com/2006/08/16/%E5%9C%A8windows-xp-sp2%E4%B8%8B%E4%BF%AE%E5%BE%A9mbr/

有趣的語音控制

看到朋友的Facebook感到很有興趣

 想知道電腦是男的還是女的?步驟一:點『開始』,在『所有程式』裡找到『附屬應用程式』,點『記事本』新增一個新記事本文件。步驟二:在裡面輸入 CreateObject(“SAPI.SpVoice”).Speak “I love YOU” 步驟三:另存新檔名為 .VBS 文件如:我愛你.vbs⋯⋯然後,點擊這個文件就會聽到一句I LOVE U。透過聲音就可以辨别你的電腦是男生還是女生

這個真的酷!!!

——————————-

這個其實大家很少使用的微軟語音引擎,XP內建Microsoft Sam
所以大部分是男的只能說英文

Vista或Win7應該有別的引擎,別的廠商也有在做

跟自然輸入法的語音引擎應該不同

在XP下按開始→控制台→語音

就會看到

————————–

在bat底下的代碼

mshta vbscript:CreateObject(“SAPI.SpVoice”).Speak(“I can say english”)(Window.close)

ping 127.0.0.1 /n 2 >nul       rem 這行可以做時間延遲

echo CreateObject(“SAPI.SpVoice”).Speak CreateObject(“Scripting.FileSystemObject”).OpenTextFile(WScript.Arguments(0)).ReadAll>ss.vbs

rem 可以產生一個sss.vbs,把文字檔拖進去,可以閱讀全文

————————–

在vbs底下詳細操作的代碼

set oSa = Createobject(“SAPI.SpVoice”)
oSa.volume=100   ‘音量
oSa.rate=1            ‘講話速率
oSa.speak(“i can say english”) 

————————–

以下是讓C#能夠控制該語音引擎的代碼 

引用:http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/eef2ae7f-6f2c-45be-b25d-abdb74354687

MSDN詳細資料:http://msdn.microsoft.com/en-us/library/ms723602(VS.85).aspx

using SpeechLib;

namespace ConsoleApplication1 {
  class Program {

    static void Main (string [] args) {

      SpVoice voice = new SpVoice ();

      voice.Speak (“A new EXE CAAntiSpyware appeared.”, SpeechVoiceSpeakFlags.SVSFlagsAsync);

      // … add code here if needed…

      voice.WaitUntilDone (30000);

    }

  }
}

[MySQL]更改預設資料庫的編碼

引用:http://www.twvbb.com/vbb/thread/104/9420/

這是MySQL安裝的時候預設的狀況
使用xampp或是linux底下的lampp

 

在phpmyadmin底下的variables可以看到
預設新增的資料庫的編碼會是latin1
但我們通常都會新增utf8的資料庫

請修改MySQL的設定檔my.cnf

(Linux底下)

/etc/my.cnf
或是
/opt/lampp/etc/my.cnf

(XP底下)

 

找到以下標籤並加上紅字部份

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect=’SET NAMES utf8′

[client]
default-character-set=utf8

 

資料庫轉換的步驟請參考引用原文
我看完消化過在補

[C#視窗]Ado.net連接Access資料庫的四種方式

//***Access(ODBC Version)
//[OdbcConnection->OdbcDataAdapter->DataSet->dataGridView1]
string strSQL =“Select * from table”;
try
{
IDbConnection dbConn = new System.Data.Odbc.OdbcConnection(@”Driver={Microsoft Access Driver (*.mdb)};DBQ=|DataDirectory|\database.mdb”);
dbConn.Open();
IDbDataAdapter dbAdapter = new System.Data.Odbc.OdbcDataAdapter(strSQL, (System.Data.Odbc.OdbcConnection)dbConn);
System.Data.DataSet dbSet = new System.Data.DataSet();
dbAdapter.Fill(dbSet);
dataGridView1.DataSource = dbSet.Tables[0];
}
catch (System.Data.Odbc.OdbcException ex)
{
MessageBox.Show(ex.ToString());
}
//***Access(ODBC Version)
//[OdbcConnection->OdbcCommand->DataTable->dataGridView1]
int i;
System.Data.DataTable dt = new DataTable();
System.Data.DataRow dr;
string strSQL =“Select * from table”;
try
{
IDbConnection dbConn = new System.Data.Odbc.OdbcConnection(@”Driver={Microsoft Access Driver (*.mdb)};DBQ=|DataDirectory|\database.mdb”);
dbConn.Open();
IDbCommand dbCommand = new System.Data.Odbc.OdbcCommand(strSQL, (System.Data.Odbc.OdbcConnection)dbConn);
IDataReader dbReader = dbCommand.ExecuteReader();
//
for (i = 0; i < dbReader.FieldCount; i++)
dt.Columns.Add(newDataColumn(dbReader.GetName(i)));
//
while (dbReader.Read())
{
dr = dt.NewRow();
for (i = 0; i < dbReader.FieldCount; i++)
dr[i] = dbReader[i];
dt.Rows.Add(dr);
}
}
catch (System.Data.Odbc.OdbcException ex)
{
MessageBox.Show(ex.ToString());
}
dataGridView1.DataSource = dt;
//***Access(OleDB Version)
//[OleDbConnection->OleDbDataAdapter->DataSet->dataGridView1]
string strSQL=“Select * from table”;
try
{
IDbConnection dbConn = new System.Data.OleDb.OleDbConnection(@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\database.mdb;Persist Security Info=True”);
IDbDataAdapter dbAdapter = new System.Data.OleDb.OleDbDataAdapter(strSQL, (System.Data.OleDb.OleDbConnection)dbConn);
System.Data.DataSet dbSet = new System.Data.DataSet();
dbAdapter.Fill(dbSet);
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dbSet.Tables[0];
}
catch (System.Data.OleDb.OleDbException ex)
{
MessageBox.Show(ex.ToString());
}
//***Access(OleDB Version)
//[OleDbConnection->OleDbCommand->DataTable->dataGridView1]
int i;
System.Data.DataTable dt = new DataTable();
System.Data.DataRow dr;
string strSQL =“Select * from table”;
try
{
IDbConnection dbConn = new System.Data.OleDb.OleDbConnection(@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\database.mdb;Persist Security Info=True”);
dbConn.Open();
IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(strSQL, (System.Data.OleDb.OleDbConnection)dbConn);
IDataReader dbReader = dbCommand.ExecuteReader();
//
for (i = 0; i < dbReader.FieldCount; i++)
dt.Columns.Add(newDataColumn(dbReader.GetName(i)));
//
while (dbReader.Read())
{
dr = dt.NewRow();
for (i = 0; i < dbReader.FieldCount; i++)
dr[i] = dbReader[i];
dt.Rows.Add(dr);
}
}
catch (System.Data.Odbc.OdbcException ex)
{
MessageBox.Show(ex.ToString());
}
dataGridView1.DataSource = dt;

[Fedora 12]關閉FireFox的離線模式(Offline mode)

摘錄自原文

Find “browser.offline-apps.notify” in the “about:config” method and set it to false.

toolkit.networkmanager.disable to “true”

————————————–

在用Linux時,是否會被那離線模式(Offline mode)給弄煩了呢?
無網路連線時會顯示離線模式,而當有網路連線時卻還是會留在離線模式

 

可照以下作法:

在FireFox上的網址列打入

about:config

會出現一個 You might void your warranty 的警告訊息
,按 I’ll be careful I promise! 繼續

在 Filter: 裡搜尋

browser.offline-apps.notify

雙點該項目,值從True -> False

相同的方法搜尋

toolkit.networkmanager.disable

雙點該項目,值從False -> True

完成

[轉貼]IP/Subnet子網路切割表示法

來源:http://vbb.twftp.org/showthread.php?t=5085

在IPv4的協定下,IP位址是由4個8位元組成的數字來表達,如200.1.1.130。一個IP位址分為網路位址(Network
Address)+主機位址(Host
Address),依網路位址所佔的位元數不同而分為A/B/C/D級網路。IP數字的0及255是預設的主機及廣播位址無法使用,所以每個數字可用的
IP位址變化只有254個(256-2),這也就是一般C級網段的Gateway
IP都預設x.x.x.254的緣故。IPv4的位址因為ABCD型網段的配法而無法完全應用到254四次方那樣多的可用IP值,隨著世界上主機數遞
增,IP位址漸漸不夠用了!在IPv6的應用尚未完全普及之時,就得利用切分子網路(Subnet)的方式來有效分配IP位址。

某台網路主機,它的IP及子網路表示法為200.1.1.130/28,從這樣簡短的字句,你該立刻看出什麼呢?

1.子網路的遮罩位址為何?
該數字28是代表遮罩IP位址的網路位址所佔位元數,即:11111111.11111111.11111111.11110000,遮罩位元為1者是讓
IP通過(合法),0者為阻擋,所以從上述的32位元分布,我們得知它的網段型態是屬於C型位址,因此十進位的遮罩位址就是
255.255.255.240(只需要求算右邊那四個1),即 128 + 64 + 32 + 16 = 240

2.可切成幾個子網路?
數字1是讓IP通過,所以只要注意1的位元變化組合(因為後面的0怎麼變化都會被擋住),(1111)= 2^4 = 16,共有16種變化。

3.每個子網段有幾個IP值?
子網路ip數為 256/16 = 16 (有效IP為14,因為頭尾IP要去除)

4.每個子網路的IP起迄位址?
200.1.1.0-15,200.1.1.16-31,200.1.1.32-48,…,200.1.1.240-255
例如,主機IP為200.1.1.130/28的所在子網路起迄IP為: 130/16 = 8, 16 * 8 = 128,故在 200.1.1.128-143。

假如上述你都了解的話,讓我們反過來思考,用子網路IP起迄位址,反推出它的IP/Subnet表達格式?例如,我們要讓某C級網段(192.83.184.*)下的IP合法通過,這組子網路該怎麼用IP/Subnet格式表示呢?

首先,第四個IP值不遮封,因此遮罩IP位址的2進位是: 11111111.11111111.11111111.00000000
(255.255.255.0),其網路位址位元數共24個,因此寫法是:
192.83.184.0/24,依此類推,B級網段就是192.84.0.0/16,全部開放就是:
0.0.0.0/0。所以,從IP位址的二進位表示法的位元分布,就可看出其背後的隱藏資訊,只要您能了解這些概念就可直接看出來,不需再作
IP(192.83.184.0)轉二進位的運算(江湖一點訣)。

 

—————————————————————

還有另外一篇,由於是全文轉貼,所以就不放費空間去貼了

感謝原作者的好文章,讓我去好好加強網路概念

http://caf677.pixnet.net/blog/post/22615302

 

[Ubuntu10.04] 關於Ubuntu的一些雜記

切換root

sudo su –

修改root密碼

sudo passwd root

 使用vi

apt-get vim;alias vi=’vim’

vi ~/.vimrc

引用:http://linux.vbird.org/linux_basic/0310vi.php#vim_set

:set nu
:set nonu
就是設定與取消行號啊!
:syntax on
:syntax off
是否依據程式相關語法顯示不同顏色? 舉例來說,在編輯一個純文字檔時,如果開頭是以 # 開始,那麼該行就會變成藍色。 如果你懂得寫程式,那麼這個 :syntax on 還會主動的幫你除錯呢!但是, 如果你僅是編寫純文字檔案,要避免顏色對你的螢幕產生的干擾,則可以取消這個設定 。
:set bg=dark
:set bg=light
可用以顯示不同的顏色色調,預設是『 light 』。如果你常常發現註解的字體深藍色實在很不容易看, 那麼這裡可以設定為 dark 喔!試看看,會有不同的樣式呢!

 

關於GRUB2

引用:http://wiki.ubuntu-tw.org/index.php?title=GRUB_2_%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97#.E5.A2.9E.E5.8A.A0.E5.8A.9F.E8.83.BD

  • 沒有 /boot/grub/menu.lst。已被 /boot/grub/grub.cfg 取代。
  • 在 grub 提示符號下沒有「/find boot/grub/stage1」。Stage 1.5 被淘汰了。
  • 主要選單檔,/boot/grub/grub.cfg,不應再被手動編輯,即使是由「root」身份。
  • grub.cfg 會在任何有更新、核心被加入/移除或是使用者執行 update-grub 的時候被覆寫。
  • 主要用來改變顯示設定的設定檔是 /etc/default/grub
  •  其他參見說明