欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

Flash處理外部XML文檔數(shù)據(jù)_Flash教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:FLASH網(wǎng)游通過(guò)XMLSocket與VB后臺(tái)通信
前段時(shí)間用Flash做了個(gè)網(wǎng)游的Demo,通訊用的是Socket。曾承諾寫個(gè)教程,現(xiàn)在有空就把它寫寫吧。先從FLASH說(shuō)起。我要達(dá)到的效果是點(diǎn)擊地面,人物就走到點(diǎn)擊的地

預(yù)備:

首先你得有臺(tái)電腦.其次是要裝上Windows系統(tǒng)和Flash8.

XML基礎(chǔ):

既然是處理XML文檔.就要先來(lái)了解下XML文檔.下面是我所了解的,有些是在Flash中用不到的.
XML擴(kuò)展標(biāo)記語(yǔ)言(Extensible Markup Language)是SGML(Structured Generalized Markup Language)的子集.
XML是由World Wide Web Consortium(W3C)的XML工作組定義的.

下面開始了解XML的結(jié)構(gòu):

XML是由序言和文檔元素組成的.

序言包括:

  1. 聲明(declaration),文檔的第一行,它說(shuō)明這是一個(gè)XML文檔. [可選]
  2. 注釋,增強(qiáng)文檔的可讀性. [可選]
  3. 文檔類型聲明(document type declaration),XML文檔類型定義必須在XML聲明之后,文檔元素之前,中間可以插入XML處理指令,它說(shuō)明文檔的類型和結(jié)構(gòu). [可選]
  4. 處理指令(processing instruction),在XML聲明之后,處理XML信息的指令. [可選]
    注:文檔類型聲明(document type declaration)需要用到xml詞匯表.假如想了解具體信息請(qǐng)?jiān)L問(wèn)http://www.w3c.org.

文檔元素:

元素說(shuō)明了文檔的邏輯結(jié)構(gòu),元素包函起始標(biāo)簽,元素內(nèi)容,元素屬性和結(jié)束標(biāo)簽.一個(gè)xml文檔必須有一個(gè)頂層元素,所有的元素都嵌套在這個(gè)頂層元素中.文檔元素名,屬性名全部都是自定義的.

說(shuō)明:

先看代碼:

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<!--xml注釋-->
<!DOCTYPE ChooseFlash>
<!--<!DOCTYPE 類型 SYSTEM "一個(gè)dtd文件的地址" >沒有地址或地址錯(cuò)誤都會(huì)出錯(cuò),SYSTEM 一個(gè)要害字-->
<?xml-stylesheet type="text/css" href="處理xml文檔信息的css.css"?>
<元素>
<子元素 屬性="子元素">信息</子元素>
</元素>

上面是一個(gè)加了文檔類型聲明,處理指令的簡(jiǎn)單xml文檔.下面一一解釋.

<?xml version="1.0" encoding="gb2312"?>

這句是xml的聲明信息.version是版本號(hào),encoding是字符編碼,假如有中文就需要用gb2312編碼,standalone屬性可以取yes和no,屬性值yes,說(shuō)明文檔沒有外部聲明.屬性值no,說(shuō)明文檔有外部聲明.

<!--xml注釋-->

這句是xml的注釋.

<!DOCTYPE ChooseFlash>

這句是文檔類型聲明,DOCTYPE標(biāo)記是聲明類型用的.ChooseFlash是類型.這里的類型是指xml中的詞匯表.

<?xml-stylesheet type="text/css" href="處理xml文檔信息的css.css"?>

這句是處理指令,xml-stylesheet是一個(gè)處理指令,type是類型,href是地址.這個(gè)處理指令把CSS鏈接到XML文檔.跟html中應(yīng)用css差不多一樣.

<元素>
<子元素 屬性="子元素">信息</子元素>
</元素>

這個(gè)是文檔元素(Flash用節(jié)點(diǎn)表示).<元素>是頂層元素,<子元素>是嵌套在頂層元素中的元素,"屬性"是一個(gè)屬性,"信息"是字符串.
也可以這樣寫: <子元素 屬性="子元素" 信息="信息" />
假如用了文檔類型聲明,頂層元素命名最好跟聲明的類型一至.否則會(huì)出錯(cuò)(要有詞匯表時(shí),像這個(gè)ChooseFlash這不會(huì)出錯(cuò),因?yàn)闆]有這個(gè)詞匯表.)

下面是一個(gè)完整xml文檔:

<?xml version="1.0" encoding="gb2312"?>
<!--firstNode是一個(gè)頂層元素-->
<firstNode>
<!--childNode是一個(gè)嵌套在頂層元素firstNode中的子級(jí)元素,有一個(gè)nodeName的屬性-->
<childNode nodeName="childNode">childNode</childNode>
</firstNode>

好,xml方面就到這里.--假如有錯(cuò),請(qǐng)指教.假如想了解具體信息的請(qǐng)?jiān)L問(wèn):http://www.w3c.org.

下面就是怎么在Flash中調(diào)用XML文檔和處理XML中的數(shù)據(jù).

Flash方面:

在Flash中調(diào)用xml文檔需要用到XML類和XMLNode類中的一些方法和屬性.這里我們就不需要用到那么多.把用到的方法和屬性列出來(lái):

XML類:

  • XML.ignoreWhite;//處理xml文檔中的空白,設(shè)為true時(shí),忽略空白,默認(rèn)值為false.
  • XML.load("xml文檔的地址");//加載指定的xml文檔.
  • XML.onLoad=function(success:Boolean){};//成功加載了xml文檔時(shí)調(diào)用.
  • XML構(gòu)造函數(shù).

XMLNode類:

  • XMLNode.attributes;//用來(lái)指定xml文檔對(duì)象節(jié)點(diǎn)的屬性.
  • XMLNode.childNodes;//返回指定xml文檔對(duì)象的子級(jí)的數(shù)組.
  • XMLNode.firstChild;//引用父級(jí)節(jié)點(diǎn)的子級(jí)列表中的第一個(gè)子級(jí).
  • XMLNode.nodeValue;//返回XML對(duì)象的節(jié)點(diǎn)值.
  • XMLNode.nodeName;//XML 對(duì)象的節(jié)點(diǎn)名稱

開始實(shí)驗(yàn):

首先說(shuō)明:
在xml聲明處加上encoding="gb2312".使用gb2312編碼.;
Flash中假如有中文需要在加載代碼前面加上System.useCodepage = true;
使用系統(tǒng)編碼.防止亂碼.

實(shí)驗(yàn)1:

一個(gè)簡(jiǎn)單的實(shí)驗(yàn).把xml文檔中的節(jié)點(diǎn)在Flash輸出來(lái).
新建一個(gè)xml文檔.在記事本輸入下面的代碼.保存為 xml-001.xml ;

<?xml version="1.0"?>
<!--xml-001.xml-->
<firstNode name="1">
<childNode name="1.1" />
<childNode name="1.2" />
<childNode name="1.3" />
</firstNode>

上面是一個(gè)簡(jiǎn)單的xml文檔.結(jié)構(gòu)是一個(gè)頂層節(jié)點(diǎn)中嵌套三個(gè)子級(jí)節(jié)點(diǎn).現(xiàn)在在Flash中如何讀出來(lái)呢?

來(lái)看操作:

打開Flash,新建一個(gè)Flash文檔,保存到剛才的xml文檔中的目錄中,命名 xml-001.fla ;
在第一幀輸入下面代碼:

//xml-001.fla.
//實(shí)例化一個(gè)xml對(duì)象.
var myxml:XML = new XML();
//分析時(shí)忽略xml文檔中的空格.
myxml.ignoreWhite = true;
//加載xml-001.xml文檔.
myxml.load("xml-001.xml");
//調(diào)用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加載成功,success=true;否則success=false;
if (success) {
trace("加載成功!");
//輸出頂層節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)中屬性name的值.
trace(myxml.firstChild.nodeName ":" myxml.firstChild.attributes.name);
//用一個(gè)數(shù)組來(lái)引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組.
var child_arr:Array = myxml.firstChild.childNodes;
//用嵌套for語(yǔ)句遍歷出xml文檔中的所有數(shù)據(jù).
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var i = 0; i<child_arr.length; i ) {
//輸出頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)中屬性name的值.
trace(child_arr[i].nodeName ":" child_arr[i].attributes.name);
}
} else {
trace("加載失敗!");
}
};

實(shí)驗(yàn)2:

現(xiàn)在做的是把一個(gè)多層嵌套節(jié)點(diǎn)的xml文檔在Flash中輸出來(lái).
新建一個(gè)xml文檔.在記事本中輸入下面的代碼.然后保存為 xml-002.xml

<?xml version="1.0"?>
<!--xml-002.xml-->
<firstNode name="1">
<childNode name="1.1">
<Node name="1.1.1" />
<Node name="1.1.2" />
<Node name="1.1.3" />
</childNode>
<childNode name="1.2">
<Node name="1.2.1" />
<Node name="1.2.2" />
<Node name="1.2.3" />
</childNode>
<childNode name="1.3">
<Node name="1.3.1" />
<Node name="1.3.2" />
<Node name="1.3.3" />
</childNode>
</firstNode>

上面是一個(gè)多層嵌套節(jié)點(diǎn)的xml文檔.結(jié)構(gòu)是一個(gè)頂層節(jié)點(diǎn)中,嵌套3個(gè)子級(jí)節(jié)點(diǎn),3個(gè)子級(jí)節(jié)點(diǎn)分別嵌套3個(gè)子級(jí)節(jié)點(diǎn).現(xiàn)在又應(yīng)該怎樣在Flash中讀出來(lái)呢?其實(shí)原理跟上面一樣.在for中嵌套一個(gè)for就可以了.

打開Flash新建一個(gè)Flash文檔,保存到剛才的xml文檔的目錄中,命名為 xml-02.fla
在第一幀中輸入以下代碼:

//xml-002.fla.
//實(shí)例化一個(gè)xml對(duì)象.
var myxml:XML = new XML();
//分析時(shí)忽略xml文檔中的空格.
myxml.ignoreWhite = true;
//加載xml-002.xml文檔.
myxml.load("xml-002.xml");
//調(diào)用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加載成功,success=true;否則success=false;
if (success) {
trace("加載成功!");
//輸出頂層節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)中屬性name的值.
trace(myxml.firstChild.nodeName ":" myxml.firstChild.attributes.name);
//用一個(gè)數(shù)組來(lái)引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組.
var child_arr:Array = myxml.firstChild.childNodes;
//用嵌套for語(yǔ)句遍歷出xml文檔中的所有數(shù)據(jù).
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var i = 0; i<child_arr.length; i ) {
//輸出頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)中屬性name的值.
trace(child_arr[i].nodeName ":" child_arr[i].attributes.name);
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var j = 0; j<child_arr[i].childNodes.length; j ) {
//輸出頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)的節(jié)點(diǎn)名 和 頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)中屬性name的值.不要暈.看看輸出面板就會(huì)明白它們之間的關(guān)系了哦.
trace(child_arr[i].childNodes[j].nodeName ":" child_arr[i].childNodes[j].attributes.name);
}
}
} else {
trace("加載失敗!");
}
};

實(shí)驗(yàn)3:

利用xml文檔數(shù)據(jù)做用戶登錄.
新建一個(gè)xml文檔.在記事本中輸入下面的代碼.然后保存為 xml-003.xml

<?xml version="1.0" encoding="gb2312"?>
<!--xml-003.xml-->
<UserDataList>
<manager Post="經(jīng)理">
<UserData username="MChooseFlash01" password="MChooseHappiness" />
<UserData username="MChooseFlash02" password="MChooseHappiness" />
</manager>
<Employee Post="職員">
<UserData username="EChooseFlash01" password="EChooseHappiness" />
<UserData username="EChooseFlash02" password="EChooseHappiness" />
</Employee>
</UserDataList>

首先分析下結(jié)構(gòu):

<UserDataList>是頂層節(jié)點(diǎn).
<manager Post="經(jīng)理">是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).Post是manager節(jié)點(diǎn)的屬性.
<Employee Post="職員">是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).Post是Employee節(jié)點(diǎn)的屬性.
<UserData username="MChooseFlash01" password="MChooseHappiness" /> 是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).username和password是UserData節(jié)點(diǎn)的屬性.

這次也需要用到嵌套for.

  • 打開Flash新建一個(gè)Flash文檔,大小為300*100,保存到剛才的xml文檔的目錄中,命名為 xml-03.fla
  • 新建3個(gè)圖層分別命名Actions , cont , bg .
  • bg層在第一幀畫三個(gè)文本框大小的虛線框.
  • cont層在第一幀拉二個(gè)輸入文本框,實(shí)例名分別為username_txt和password_txt,再拉一個(gè)動(dòng)態(tài)文本框,實(shí)例名為status_txt.將這三個(gè)文本框?qū)R須虛線框.再點(diǎn)窗口->公用庫(kù)->按鈕.拉一個(gè)按鈕出來(lái).實(shí)例名為login_btn.

如圖:

Flash處理外部XML文檔數(shù)據(jù)

Actions層在第一幀中輸入以下代碼:

//xml-003.fla.
//使用系統(tǒng)編碼.防止亂碼.
System.useCodepage = true;
//實(shí)例化一個(gè)xml對(duì)象.
var myxml:XML = new XML();
//分析時(shí)忽略xml文檔中的空格.
myxml.ignoreWhite = true;
//加載xml-002.xml文檔.
myxml.load("xml-003.xml");
//調(diào)用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加載成功,success=true;否則success=false;
if (success) {
trace("加載成功!");
login_btn.onRelease = function()
{
//用一個(gè)數(shù)組來(lái)引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組.
var child_arr:Array = myxml.firstChild.childNodes;
//用UserData指定xml文檔節(jié)點(diǎn)的attributes對(duì)象.
var UserData:Object;
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var i = 0; i<child_arr.length; i ) {
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var j = 0; j<child_arr[i].childNodes.length; j ) {
//用UserData指定child_arr[i].childNodes[j].attributes對(duì)象
UserData = child_arr[i].childNodes[j].attributes;
//判定用戶名和密碼.
//這里的UserData.username其實(shí)就是child_arr[i].childNodes[j].attributes.username的簡(jiǎn)寫.UserData.password同理.
//username和password是xml文檔節(jié)點(diǎn)中的屬性.因?yàn)閤ml和Flash區(qū)分大小寫.所以在輸入時(shí)要注重大小寫.
if ((username_txt.text == UserData.username) && (password_txt.text == UserData.password)) {
//Post這個(gè)是頂層節(jié)點(diǎn)下子級(jí)節(jié)點(diǎn)的Post屬性.
status_txt.text = child_arr[i].attributes.Post ":" UserData.username "登錄成功";
//假如用戶名和密碼正確就退出for.這個(gè)重要.假如不用這個(gè),就會(huì)一直重復(fù)判定用戶名和密碼.直到將xml文檔節(jié)點(diǎn)遍歷完.那樣就不是我們想要的.所以一有正確的就退出for;
return;
} else {
status_txt.text = "用戶名或密碼錯(cuò)誤";
}
}
}
};
} else {
trace("加載失敗!");
}
};

實(shí)例4:

利用List組件做個(gè)mp3播放列表.
新建一個(gè)xml文檔.在記事本中輸入下面的代碼.然后保存為 xml-004.xml

<?xml version="1.0" encoding="gb2312"?>
<mp3List>
<mp3 path="jmzcg.mp3">啊桑-寂寞在唱歌</mp3>
<mp3 path="jmjywsls.mp3">寂寞是因?yàn)樗寄钫l(shuí)</mp3>
<mp3 path="szwspdxd.mp3">老狼-睡在我上鋪的兄弟</mp3>
<mp3 path="qf.mp3">誓言-求佛</mp3>
<mp3 path="xyzth.mp3">下一站天后</mp3>
<mp3 path="nswdxfm.mp3">伊能靜-你是我的幸福嗎</mp3>
<mp3 path="aqfx.mp3">愛情復(fù)興(容祖兒)</mp3>
<mp3 path="qrlg.mp3">水木年華-秋日戀歌</mp3>
<mp3 path="qnyh.mp3">張國(guó)榮-倩女幽魂</mp3>
<mp3 path="a.mp3">皇綴馨艫撓⑽母?酒吧里常放)</mp3>
</mp3List>

xml結(jié)構(gòu):
<mp3List>xml文檔中的頂層節(jié)點(diǎn).
<mp3 path="jmzcg.mp3">啊桑-寂寞在唱歌</mp3>頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).path是mp3節(jié)點(diǎn)下的屬性."啊桑-寂寞在唱歌"是mp3的節(jié)點(diǎn)值.

  • 打開Flash新建一個(gè)Flash文檔,大小為200*150,保存到剛才的xml文檔的目錄中,命名為 xml-04.fla
  • 新建2個(gè)圖層分別命名Actions , cont .
  • cont層中拉一個(gè)List組件到第一幀.大小為200*150,實(shí)例名為mp3_list.
  • Actions層第一幀輸入下面代碼:

//xml-004.fla.
//使用系統(tǒng)編碼.防止亂碼.
System.useCodepage = true;
//實(shí)例化一個(gè)xml對(duì)象.
var myxml:XML = new XML();
//分析時(shí)忽略xml文檔中的空格.
myxml.ignoreWhite = true;
//加載xml-004.xml文檔.
myxml.load("xml-004.xml");
//調(diào)用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加載成功,success=true;否則success=false;
if (success) {
trace("加載成功!");
//用一個(gè)數(shù)組來(lái)引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組.
var child_arr:Array = myxml.firstChild.childNodes;
//這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).
for (var i = 0; i<child_arr.length; i ) {
//將歌曲添加到List組件中.
//child_arr[i].firstChild.nodeValue這個(gè)是xml節(jié)點(diǎn)的節(jié)點(diǎn)值.
//child_arr[i].attributes.path這個(gè)是xml節(jié)點(diǎn)下的path屬性.
mp3_list.addItem({label:(i 1) "." child_arr[i].firstChild.nodeValue, data:child_arr[i].attributes.path});
}
} else {
trace("加載失敗!");
}
};
//listEvent函數(shù)是執(zhí)行List組件中change事件
function listEvent():Void
{
//這個(gè)就是歌曲地址.用Sound類的loadSound方法就可以播放歌曲了.例:mysound.loadSound(mp3_list.selectedItem.data);具體請(qǐng)看幫助文檔.
trace(mp3_list.selectedItem.data);
}
//添加幀聽器.
mp3_list.addEventListener("change", listEvent);

ASP

ASP生成XML文檔.常用的是利用ASP將數(shù)據(jù)庫(kù)中的數(shù)據(jù)用XML文檔格式顯示.方便Flash調(diào)用或應(yīng)用在其它方面.
ASP基礎(chǔ)這里就不做說(shuō)明了,不過(guò)會(huì)盡量讓大家都明白(不明白的請(qǐng)?zhí)釂?wèn)).

說(shuō)明:

因?yàn)槭窃L問(wèn)ASP,需要通過(guò)IIS,Flash默認(rèn)是訪問(wèn)本地文件的.不能訪問(wèn)網(wǎng)絡(luò).所以要將訪問(wèn)本地改成訪問(wèn)網(wǎng)絡(luò).
在 文件-->發(fā)布設(shè)置-->Flash 選項(xiàng)卡的最下面的"本地回放安全性"選項(xiàng)中的"只訪問(wèn)本地文件"改成 "只訪問(wèn)網(wǎng)絡(luò)",
下面發(fā)布的Flash,如沒非凡說(shuō)明,都按此設(shè)置.

實(shí)驗(yàn)5:

先做一個(gè)簡(jiǎn)單的實(shí)驗(yàn).用ASP生成XML文檔.
打開記事本,輸入下面的代碼,然后保存為 xml-005.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
'xml-005.asp
'設(shè)置文檔類型
Response.ContentType="text/xml"
'輸出XML文檔,用一個(gè)Response.Write()就可以做到的.這樣寫便于大家理解.
Response.Write("<?xml version='1.0'?>")
Response.Write("<!--xml-005.asp-->")
Response.Write("<firstNode name='1'>")
Response.Write("<childNode name='1.1' />")
Response.Write("<childNode name='1.2' />")
Response.Write("<childNode name='1.3' />")
Response.Write("</firstNode>")
%>

打開IIS新建一個(gè)網(wǎng)站,別名xml,路徑為剛才的asp文件的目錄.
然后在IIS中瀏覽剛才的asp文件,看到的就是一個(gè)xml文檔,不同的就是后綴名,寫法.
那現(xiàn)在怎樣在Flash中調(diào)用呢?
很簡(jiǎn)單.打開之前的 xml-001.fla 文件,
將加載xml的地址改成 xml-005.asp 文件的地址就行了.
例:

myxml.load("http://localhost/xml/xml-005.asp");

但這樣還不行.還要加上個(gè)隨機(jī)數(shù),防止調(diào)用緩存.改成下面這樣.

myxml.load("http://localhost/xml/xml-005.asp?ran=" Math.random(9999));

這個(gè)效果跟之前做的xml-001.fla效果是一樣的.只是xml文檔換成asp生成的了.

實(shí)驗(yàn)6:

這個(gè)實(shí)驗(yàn)跟上面的差不多.但數(shù)據(jù)是從數(shù)據(jù)庫(kù)中調(diào)出來(lái)的.這樣做就能很方便的更新數(shù)據(jù)了.

數(shù)據(jù)庫(kù):

打開Access數(shù)據(jù)庫(kù),新建一個(gè)空白數(shù)據(jù)庫(kù),命名為 Data.mdb,保存到之前asp文件的目錄中.
再點(diǎn) 使用設(shè)計(jì)器創(chuàng)建表,新建二個(gè)表,表名分別為:
--------------------------------------------------
first
child
--------------------------------------------------

first表中:
輸入二個(gè)字段,分別為:
--------------------------------------------------
firstID 自動(dòng)編號(hào)
name 文本
--------------------------------------------------
在 firstID 字段點(diǎn)右鍵-->主鍵,保存,
打開first表.在name字段輸入一條數(shù)據(jù),數(shù)據(jù)為:
--------------------------------------------------
1
--------------------------------------------------
保存.

child表中:
輸入二個(gè)字段,分別為:
--------------------------------------------------
childID 自動(dòng)編號(hào)
name 文本
--------------------------------------------------
在 childID 字段點(diǎn)右鍵-->主鍵,保存.
打開child表.在name字段輸入三條數(shù)據(jù),數(shù)據(jù)分別為:
--------------------------------------------------
1.1
1.2
1.3
--------------------------------------------------
保存.關(guān)閉數(shù)據(jù)庫(kù).

數(shù)據(jù)庫(kù)到這可以了.下面是ASP:
打開記事本,輸入下面的代碼,然后保存為 xml-006.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
'xml-006.asp
dim conn,rs,sqlcom
'設(shè)置文檔類型
Response.ContentType="text/xml"
Response.Write("<?xml version='1.0'?>")
Response.Write("<!--xml-006.asp-->")
'創(chuàng)建連接對(duì)象
Set conn=Server.CreateObject("Adodb.Connection")
'這里用字符串方法連接數(shù)據(jù)庫(kù).
'"Provider=Microsoft.Jet.OLEDB.4.0; 這個(gè)是數(shù)據(jù)庫(kù)驅(qū)動(dòng).
'Data Source="Server.MapPath("Data.mdb") 數(shù)據(jù)庫(kù)文件的相對(duì)路徑.
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("Data.mdb")
'創(chuàng)建記錄集對(duì)象.
Set rs=Server.CreateObject("Adodb.RecordSet")
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.因?yàn)?first 是SQL中的要害字,所以要用中括號(hào)括起來(lái).
sqlcom="select * from [first]"
'執(zhí)行sql語(yǔ)句.
'1,1 只讀.
'1,3 可讀可寫.
rs.Open sqlcom,conn,1,1
'假如記錄集中有數(shù)據(jù).
if not rs.eof then
'輸出XML節(jié)點(diǎn),rs("name")是first表中字段name的數(shù)據(jù).
Response.Write("<firstNode name='"&rs("name")&"'>")
end if
'關(guān)閉記錄集
rs.Close
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.
sqlcom="select * from child"
'執(zhí)行sql語(yǔ)句.
rs.Open sqlcom,conn,1,1
'用for語(yǔ)句將數(shù)據(jù)庫(kù)中的數(shù)據(jù)循環(huán)出來(lái).
for k=1 to rs.RecordCount
'輸出XML節(jié)點(diǎn),rs("name")是child表中字段name的數(shù)據(jù).
Response.Write("<childNode name='"&rs("name")&"' />")
'移到下一條數(shù)據(jù)
rs.MoveNext
Next
'結(jié)束firstNode節(jié)點(diǎn)
Response.Write("</firstNode>")
'關(guān)閉記錄集
rs.Close
'釋放記錄信對(duì)象
Set rs=nothing
'關(guān)閉連接
conn.Close
'釋放連接對(duì)象
Set conn=nothing
%>

然后在IIS中瀏覽xml-006.asp文件,會(huì)跟實(shí)驗(yàn)5的asp輸出xml文檔一樣的.
在Flash中還是跟實(shí)驗(yàn)5一樣調(diào)用.

實(shí)驗(yàn)7:

重新做實(shí)驗(yàn)3,不過(guò)XML文檔數(shù)據(jù)從數(shù)據(jù)庫(kù)中調(diào)用.
用戶登錄不推薦使用XML.推薦在ASP或其它語(yǔ)言中,做隱式判定.
了解:
ASP請(qǐng)點(diǎn):
JSP請(qǐng)點(diǎn):

這個(gè)還是要講的.便于理解下一個(gè)實(shí)驗(yàn).

數(shù)據(jù)庫(kù):

打開Data.mdb數(shù)據(jù)庫(kù).新建二個(gè)表.
表名分別為:
--------------------------------------------------
post
user
--------------------------------------------------

post表中:
輸入二個(gè)字段:分別為:
--------------------------------------------------
postID 自動(dòng)編號(hào)
postName 文本
--------------------------------------------------
在 postID 字段點(diǎn)右鍵-->主鍵,保存.
打開post表,在postName字段輸入二條數(shù)據(jù),數(shù)據(jù)分別為:
--------------------------------------------------
經(jīng)理
職員
--------------------------------------------------
保存.

user表中:
輸入四個(gè)字段,分別為:
--------------------------------------------------
userID 自動(dòng)編號(hào)
username 文本
password 文本
postName 文本
--------------------------------------------------
在 userID 字段點(diǎn)右鍵-->主鍵,保存.
打開user表,分別在username,password,postName字段輸入四條數(shù)據(jù),數(shù)據(jù)分別為:
--------------------------------------------------
username password postName
MChooseFlash01 MChooseHappiness 經(jīng)理
MChooseFlash02 MChooseHappiness 經(jīng)理
EChooseFlash01 EChooseHappiness 職員
EChooseFlash02 EChooseHappiness 職員
--------------------------------------------------
保存.關(guān)閉數(shù)據(jù)庫(kù).

數(shù)據(jù)庫(kù)到這可以了.下面是ASP:

打開記事本,輸入下面的代碼,然后保存為 xml-007.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
'xml-007.asp
dim conn,rs,sqlcom,post_arr
'設(shè)置文檔類型.
Response.ContentType="text/xml"
'輸出XML文檔.
Response.Write("<?xml version='1.0' encoding='gb2312'?>")
Response.Write("<!--xml-007.asp-->")
Response.Write("<UserDataList>")
'創(chuàng)建連接對(duì)象.
Set conn=Server.CreateObject("Adodb.Connection")
'這里用字符串方法連接數(shù)據(jù)庫(kù).
'"Provider=Microsoft.Jet.OLEDB.4.0; 這個(gè)是數(shù)據(jù)庫(kù)驅(qū)動(dòng).
'Data Source="Server.MapPath("Data.mdb") 數(shù)據(jù)庫(kù)文件的相對(duì)路徑.
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("Data.mdb")
'創(chuàng)建記錄集對(duì)象.
Set rs=Server.CreateObject("Adodb.RecordSet")
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.
sqlcom="select * from post"
'執(zhí)行sql語(yǔ)句.
'1,1 只讀.
'1,3 可讀可寫.
rs.Open sqlcom,conn,1,1
'重定義數(shù)組.
'rs.RecordCount 記錄集中總的記錄數(shù).
Redim post_arr(rs.RecordCount)
'用for語(yǔ)句將post表中的數(shù)據(jù)循環(huán)出來(lái).
'Ubound數(shù)組的最大上標(biāo).
for i=1 to Ubound(post_arr)
'將post表中的postName字段中的值存入數(shù)組post_arr.
post_arr(i)=rs("postName")
'移到下一條數(shù)據(jù).
rs.MoveNext
Next
'這里用了嵌套for語(yǔ)句,
'第一個(gè)for j是將post_arr數(shù)組中的數(shù)據(jù)讀出來(lái).也就是post表中的數(shù)據(jù).
'第二個(gè)for k是將user表中的數(shù)據(jù)讀出來(lái).
'用for語(yǔ)句將post_arr數(shù)組中的數(shù)據(jù)循環(huán)出來(lái).
for j=1 to Ubound(post_arr)
'關(guān)閉記錄集.
rs.Close
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.
'根據(jù)post_arr(j)數(shù)組中的值為條件來(lái)重復(fù)執(zhí)行sql語(yǔ)句.
'user是SQL中的要害字.要用中括號(hào)括起來(lái).
sqlcom="select * from [user] where post='"&post_arr(j)&"'"
'執(zhí)行sql語(yǔ)句.
rs.Open sqlcom,conn,1,1
'輸出XML節(jié)點(diǎn).
Response.Write("<Post post='"&post_arr(j)&"'>")
'用for語(yǔ)句將user表中的數(shù)據(jù)循環(huán)出來(lái).
for k=1 to rs.RecordCount
'輸出XML節(jié)點(diǎn).
Response.Write("<UserData username='"&rs("username")&"' password='"&rs("password")&"' />")
'移到下一條數(shù)據(jù).
rs.MoveNext
Next
'結(jié)束Post節(jié)點(diǎn).
Response.Write("</Post>")
Next
'結(jié)束UserDataList節(jié)點(diǎn).
Response.Write("</UserDataList>")
'釋放記錄信對(duì)象.
Set rs=nothing
'關(guān)閉連接.
conn.Close
'釋放連接對(duì)象.
Set conn=nothing
%>

在IIS中瀏覽xml-007.asp文件.跟實(shí)驗(yàn)3中的xml文檔大致一樣.
打開實(shí)驗(yàn)3中的Flash文件,把Flash中的加載xml地址換成:

myxml.load("http://localhost/xml/xml-007.asp?ran=" Math.random(9999));

然后測(cè)試影片.效果跟實(shí)驗(yàn)3一樣.

實(shí)驗(yàn)8:

怎么都講些不實(shí)用的東西啊?別急.下面就開始講實(shí)用的.
這個(gè)實(shí)驗(yàn)比較有實(shí)用價(jià)值.就如藍(lán)色網(wǎng)站的側(cè)邊菜單來(lái)說(shuō).
如圖:

Flash處理外部XML文檔數(shù)據(jù)

放置的內(nèi)容是有限的.這個(gè)實(shí)驗(yàn)就可以用來(lái)擴(kuò)展側(cè)邊菜單.
利用Accordion組件做容納多內(nèi)容的網(wǎng)站側(cè)邊菜單.
效果圖:

Flash處理外部XML文檔數(shù)據(jù)

下面開始:

數(shù)據(jù)庫(kù):

打開Data.mdb數(shù)據(jù)庫(kù).新建二個(gè)表.
表名分別為:
--------------------------------------------------
column
columnData
--------------------------------------------------

column表中:
輸入三個(gè)字段:分別為:
--------------------------------------------------
columnID 自動(dòng)編號(hào)
columnName 文本
columnIndex 數(shù)字
--------------------------------------------------
在 columnID 字段點(diǎn)右鍵-->主鍵,保存.
打開column表,分別在columnName,columnIndex字段輸入五條數(shù)據(jù),數(shù)據(jù)分別為:
--------------------------------------------------
columnName columnIndex
專題欄目-01 0
專題欄目-02 1
專題欄目-03 2
專題欄目-04 3
專題欄目-05 4

--------------------------------------------------
保存.

columnData表中:
輸入四個(gè)字段,分別為:
--------------------------------------------------
cdID 自動(dòng)編號(hào)
cdName 文本
cdURL 文本
columnIndex 數(shù)字
--------------------------------------------------
在 cdID 字段點(diǎn)右鍵-->主鍵,保存.
打開columnData表,分別在cdName,cdURL,columnIndex字段輸入下面的數(shù)據(jù):
--------------------------------------------------
cdName cdURL columnIndex
ChooseFlash-01.1 http://www.happiness01.com 0
ChooseFlash-01.2 http://www.happiness02.com 0
ChooseFlash-01.3 http://www.happiness03.com 0
ChooseFlash-01.4 http://www.happiness04.com 0
ChooseFlash-01.5 http://www.happiness05.com 0

ChooseFlash-02.1 http://www.happiness01.com 1
ChooseFlash-02.2 http://www.happiness02.com 1
ChooseFlash-02.3 http://www.happiness03.com 1
ChooseFlash-02.4 http://www.happiness04.com 1
ChooseFlash-02.5 http://www.happiness05.com 1

ChooseFlash-03.1 http://www.happiness01.com 2
ChooseFlash-03.2 http://www.happiness02.com 2
ChooseFlash-03.3 http://www.happiness03.com 2
ChooseFlash-03.4 http://www.happiness04.com 2
ChooseFlash-03.5 http://www.happiness05.com 2

ChooseFlash-04.1 http://www.happiness01.com 3
ChooseFlash-04.2 http://www.happiness02.com 3
ChooseFlash-04.3 http://www.happiness03.com 3
ChooseFlash-04.4 http://www.happiness04.com 3
ChooseFlash-04.5 http://www.happiness05.com 3

ChooseFlash-05.1 http://www.happiness01.com 4
ChooseFlash-05.2 http://www.happiness02.com 4
ChooseFlash-05.3 http://www.happiness03.com 4
ChooseFlash-05.4 http://www.happiness04.com 4
ChooseFlash-05.5 http://www.happiness05.com 4
ChooseFlash-05.6 http://www.happiness06.com 4
ChooseFlash-05.7 http://www.happiness07.com 4

--------------------------------------------------
保存.關(guān)閉數(shù)據(jù)庫(kù).

數(shù)據(jù)庫(kù)到這可以了.下面是ASP:

打開記事本,輸入下面的代碼,然后保存為 xml-008.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
'xml-008.asp
dim conn,rs,sqlcom,name_arr,index_arr
'設(shè)置文檔類型.
Response.ContentType="text/xml"
'輸出XML文檔.
Response.Write("<?xml version='1.0' encoding='gb2312'?>")
Response.Write("<!--xml-008.asp-->")
Response.Write("<ColumnList>")
'創(chuàng)建連接對(duì)象.
Set conn=Server.CreateObject("Adodb.Connection")
'這里用字符串方法連接數(shù)據(jù)庫(kù).
'"Provider=Microsoft.Jet.OLEDB.4.0; 這個(gè)是數(shù)據(jù)庫(kù)驅(qū)動(dòng).
'Data Source="Server.MapPath("Data.mdb") 數(shù)據(jù)庫(kù)文件的相對(duì)路徑.
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("Data.mdb")
'創(chuàng)建記錄集對(duì)象.
Set rs=Server.CreateObject("Adodb.RecordSet")
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.column是SQL中的要害字.要用中括號(hào)括起來(lái).
sqlcom="select * from [column]"
'執(zhí)行sql語(yǔ)句.
'1,1 只讀.
'1,3 可讀可寫.
rs.Open sqlcom,conn,1,1
'重定義數(shù)組.
'rs.RecordCount 記錄集中總的記錄數(shù).
Redim name_arr(rs.RecordCount)
Redim index_arr(rs.RecordCount)
'用for語(yǔ)句將column表中的數(shù)據(jù)循環(huán)出來(lái).
'Ubound數(shù)組的最大上標(biāo).
for i=1 to Ubound(name_arr)
'將column表中的columnName字段中的值存入數(shù)組name_arr.
name_arr(i)=rs("columnName")
'將column表中的columnIndex字段中的值存入數(shù)組index_arr.
index_arr(i)=rs("columnIndex")
'移到下一條數(shù)據(jù).
rs.MoveNext
Next
'這里用了嵌套for語(yǔ)句,
'第一個(gè)for j是將name_arr和index_arr數(shù)組中的數(shù)據(jù)讀出來(lái).也就是column表中的數(shù)據(jù).
'第二個(gè)for k是將columnData表中的數(shù)據(jù)讀出來(lái).
'用for語(yǔ)句將name_arr和index_arr數(shù)組中的數(shù)據(jù)循環(huán)出來(lái).
for j=1 to Ubound(name_arr)
'關(guān)閉記錄集.
rs.Close
'查詢數(shù)據(jù)庫(kù)的sql語(yǔ)句.
'根據(jù)index_arr(j)數(shù)組中的值為條件來(lái)重復(fù)執(zhí)行sql語(yǔ)句.
sqlcom="select * from columnData where columnIndex="&index_arr(j)&""
'執(zhí)行sql語(yǔ)句.
rs.Open sqlcom,conn,1,1
'輸出XML節(jié)點(diǎn).
Response.Write("<Column name='"&name_arr(j)&"'>")
'用for語(yǔ)句將column表中的數(shù)據(jù)循環(huán)出來(lái).
for k=1 to rs.RecordCount
'輸出XML節(jié)點(diǎn).
Response.Write("<ColumnData name='"&rs("cdName")&"' url='"&rs("cdURL")&"' />")
'移到下一條數(shù)據(jù).
rs.MoveNext
Next
'結(jié)束Column節(jié)點(diǎn).
Response.Write("</Column>")
Next
'結(jié)束ColumnList節(jié)點(diǎn).
Response.Write("</ColumnList>")
'釋放記錄信對(duì)象.
Set rs=nothing
'關(guān)閉連接.
conn.Close
'釋放連接對(duì)象.
Set conn=nothing
%>

在IIS中瀏覽xml-008.asp文件.可以看到xml文檔的結(jié)構(gòu)跟實(shí)驗(yàn)7中的xml文檔結(jié)構(gòu)一樣.

下面就是Flash了

Flash中:
打開Flash,新建一個(gè)Flash文檔,大小200*230,命名 xml-008.fla ;
新建一個(gè)圖層,命名為:Actions
--------------------------------------------------
新建一個(gè)影片剪輯,命名為:btn_over ;此影片剪輯用來(lái)裝飾鼠標(biāo)滑過(guò)時(shí)的效果.
新建二個(gè)圖層.分別命名為:
--------------------------------------------------
Actions
cont
--------------------------------------------------

在圖層cont的第一幀畫一個(gè)200*18,沒有邊框的矩形,填充顏色為#0099FF;透明度為0,x,y值為0,
在第三幀按[F6],選中該幀的矩形,將透明度調(diào)為50;再選中第一幀,打開屬性面板,在補(bǔ)間那選外形.
在圖層Actions的第三幀按[F6],在該幀輸入代碼: stop();
完成如圖:

Flash處理外部XML文檔數(shù)據(jù)

回到主場(chǎng)景,新建一個(gè)按鈕.命名為:btn ;
在'指針經(jīng)過(guò)','按下'幀按[F6].
將庫(kù)中的 btn_over 影片剪輯拉到'指針經(jīng)過(guò)'幀,x,y值為0,
再在'按下'幀畫一個(gè)200*18,沒有邊框的矩形,填充顏色為#FFF3CC; 透明度為50, x,y值為0,

回到主場(chǎng)景,新建一個(gè)影片剪輯.命名為:columnItem,
在高級(jí)選項(xiàng)那 標(biāo)識(shí)符為:columnItem,在勾選上 '為ActionScript導(dǎo)出','第一幀導(dǎo)出'.
新建三個(gè)圖層,分別命名為:
--------------------------------------------------
btn
text
line
--------------------------------------------------
在圖層line的第一幀畫一條100*1的虛線.填充顏色為#660000; 透明度為80 ; x值為0,y值為18;
在圖層text畫一個(gè)動(dòng)態(tài)文本框,大小為200*18; 文本顏色為:#660000; x,y值為0, 實(shí)例名為: cName ;
在圖層btn中,將btn按鈕元件拉到第一幀.x,y值為0,實(shí)例名為: btn ;
完成如圖:

Flash處理外部XML文檔數(shù)據(jù)

回到主場(chǎng)景.
打開組件面板,拉一個(gè)Accordion組件到庫(kù)中;
在Actions圖層的第一幀輸入下面的代碼:

//導(dǎo)入類.
import mx.core.View;
import mx.containers.Accordion;
//===========================================
//使用系統(tǒng)編碼.防止亂碼.
System.useCodepage = true;
//隱藏按鈕的鼠標(biāo)手形.
Button.prototype.useHandCursor = false;
//===========================================
//實(shí)例化一個(gè)xml對(duì)象.
var columnData:XML = new XML();
//分析時(shí)忽略xml文檔中的空格.
columnData.ignoreWhite = true;
//加載http://localhost/xml/xml-008.asp.
columnData.load("http://localhost/xml/xml-008.asp?ran=" Math.random(9999));
//調(diào)用XML.onLoad事件.
columnData.onLoad = function(success:Boolean)
{
//假如加載成功,success=true;否則success=false;
if (success) {
//執(zhí)行dragColumn函數(shù).
dragColumn(columnData.firstChild.childNodes);
}
};
//==========dragColumn函數(shù)用來(lái)繪制專欄數(shù)據(jù)===========
function dragColumn(column_arr:Array):Void
{
//創(chuàng)建Accordion組件的實(shí)例.
//createClassObject(類名稱,"實(shí)例名",深度,{初始對(duì)象});
createClassObject(Accordion, "column", 0, {_x:0, _y:0, _width:200, _height:240});
//執(zhí)行columnStyle函數(shù).
columnStyle();
//獲取數(shù)組的長(zhǎng)度.
var columnLen:Number = column_arr.length;
//專欄的子菜單數(shù)組.
var columnChild:Array;
//引用專題欄目的對(duì)象.
var MainItem:Object;
//循環(huán)創(chuàng)建專題欄目.
for (var i = 0; i<columnLen; i ) {
//創(chuàng)建專題欄目.MainItem引用新創(chuàng)建的對(duì)象.
//createSegment(類名稱,值或?qū)嵗Q,顯示的標(biāo)題);
MainItem = column.createSegment(View, i, column_arr[i].attributes.name);
//獲取專欄的子菜單數(shù)組.
columnChild = column_arr[i].childNodes;
//循環(huán)創(chuàng)建專題欄目的子菜單.
for (var j = 0; j<columnChild.length; j ) {
//使用with語(yǔ)句簡(jiǎn)寫代碼.
//創(chuàng)建專題欄目的子菜單.
//createChild("庫(kù)中的鏈接名","實(shí)例名稱",{初始對(duì)象});
//18.5是columnItem影片剪輯的高度和行距.
with (MainItem.createChild("columnItem", "columnItem", {_x:0, _y:18.5*j})) {
//顯示子菜單.
cName.text = columnChild[j].attributes.name;
//獲取點(diǎn)擊的URL;
btn.cURL = columnChild[j].attributes.url;
//btn.onRelease事件.
btn.onRelease = btnEvent;
}
}
}
}
//========執(zhí)行btn.onRelease事件的函數(shù)=========
function btnEvent():Void
{
//連接點(diǎn)擊的URL.
getURL(this.cURL, "_blank");
}
//=======columnStyle函數(shù)設(shè)置專欄的樣式=========
function columnStyle():Void
{
//文本顏色.
column.setStyle("color", 0x660000);
//字體.
column.setStyle("fontFamily", "隸書");
//主題.
column.setStyle("themeColor", "haloOrange");
//點(diǎn)擊專欄的動(dòng)畫.
column.setStyle("openEasing", mx.transitions.easing.Bounce.easeOut);
}

現(xiàn)在大家就可以測(cè)試影片了.

教程源文件:點(diǎn)擊這里下載源文件

分享:Flash游戲中導(dǎo)彈追蹤的算法
先看下效果吧:代碼如下:/*請(qǐng)教大家一個(gè)關(guān)于勢(shì)函數(shù)用到追蹤和攔截的算法有研究過(guò)的能不能指點(diǎn)一下!PoweredBySundayEmail:happyclub@163.com*/varst

/所屬分類:Flash教程/更新時(shí)間:2008-03-05
相關(guān)Flash教程