中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 多媒體制作 > Flash 區(qū)塊游戲開(kāi)發(fā)
Flash MX 2004 pro 幫助 CHM 版 回到列表 如何防止SWF文件被反編譯
 Flash 區(qū)塊游戲開(kāi)發(fā)

作者:qhwa 時(shí)間: 2004-05-22 文檔類型:原創(chuàng) 來(lái)自:藍(lán)色理想

第 1 頁(yè) 歡迎
第 2 頁(yè) 為什么用方塊?
第 3 頁(yè) 地圖
第 4 頁(yè) 關(guān)于地圖的東西
第 5 頁(yè) 創(chuàng)建方塊
第 6 頁(yè) 再談?wù)剠^(qū)塊原型的定義
第 7 頁(yè) 英雄/主角
第 8 頁(yè) 鍵盤(pán)控制的移動(dòng)
第 9 頁(yè) 碰撞檢測(cè)
第 10 頁(yè) 芝麻開(kāi)門(mén)-地圖切換
第 11 頁(yè) 跳躍
第 12 頁(yè) 騰云駕霧
第 13 頁(yè) 梯子
第 14 頁(yè) 愚蠢的敵人
第 15 頁(yè) 更多關(guān)于敵人的東西
第 16 頁(yè) 射擊
第 17 頁(yè) 拾取物品
第 18 頁(yè) 浮動(dòng)區(qū)塊
第 19 頁(yè) 卷屏
第 20 頁(yè) 未完待續(xù) | coming soon

本頁(yè)由Kalloer翻譯,在此深表謝意

卷屏

在我們開(kāi)始這部分之前,有件事得先解釋清楚。Flash很慢。Flash非常慢。卷屏意味著以每秒20-30次的速度移動(dòng)屏幕上數(shù)以百計(jì)的方塊。而太多移動(dòng)的方塊意味著Flash不能及時(shí)地完成重繪,于是速度下降。你的游戲?qū)⒙孟駰l睡著的蝸牛在爬。
“什么?”你可能會(huì)問(wèn),“難道不用卷屏嗎?怎么會(huì)慢得像睡著的蝸牛在爬呢?”
你可以用移動(dòng)的方塊,但是你得小心,別讓卷屏的區(qū)域太大,而且移動(dòng)的方塊別太多。多大算“太大”,多少又算“太多”,這就得你自己體會(huì)了。記住,F(xiàn)lash游戲大多數(shù)時(shí)候是在瀏覽器上玩的,游戲者可能同時(shí)打開(kāi)了多個(gè)窗口,后臺(tái)可能有多個(gè)程序在同時(shí)運(yùn)行,而且不是所有游戲者都有那么好的電腦配置?梢杂玫团渲玫碾娔X來(lái)測(cè)試你的游戲,如果覺(jué)得速度慢,就把它改小點(diǎn)。
來(lái)看看我們接下來(lái)要做的:

原理

左邊的圖中是非卷屏游戲。主角向右移動(dòng),而其它的東西原地不動(dòng)。現(xiàn)在看右邊的圖,這是個(gè)卷屏游戲。主角仍然是要向右移動(dòng),但是我們實(shí)際上并沒(méi)有移動(dòng)主角,為了讓他看起來(lái)是在向仍然右移動(dòng),我們將其它東西向左移了。

所以,原理很簡(jiǎn)單:
當(dāng)需要變換主角的位置時(shí),向反方向移動(dòng)其它部分就行了。但是,由于我們習(xí)慣于將主角與其它背景區(qū)塊一起放入MC中,主角會(huì)跟他們一起往反方向移動(dòng)。為了固定主角的位置,我們?nèi)匀粚⑺形矬w向反方向移,同時(shí),將主角向正確的方向移動(dòng)相同的距離。

來(lái)看個(gè)卷屏游戲的例子。假設(shè)主角要向右移10px。我們先將所有方塊(包括主角)向左移10px,并將主角向右移10px。最后看起來(lái)主角并沒(méi)有動(dòng),而其它方塊向左移了。

卷屏的最簡(jiǎn)單的方法是將所有方塊都放到屏幕上,但是只顯示其中一小部分,然后整個(gè)一起移動(dòng)。這可能會(huì)讓你的游戲速度非常慢,因?yàn)闆](méi)顯示出來(lái)的那上千個(gè)方塊也在移動(dòng)。另一個(gè)辦法是將移出可見(jiàn)區(qū)域的方塊刪除,并在另一頭添加新的方塊。這會(huì)好一點(diǎn)兒,但是Flash花費(fèi)在刪除/復(fù)制MC上的時(shí)間又太多了。
最后一個(gè)辦法是:只把可見(jiàn)部分的方塊放到舞臺(tái)上,當(dāng)它們移出可見(jiàn)區(qū)域時(shí),我們將相同的方塊移動(dòng)到另一端,重命名,并再次使用相同的MC。這被稱作“gotoAndStop”卷屏引擎:

如圖所示,當(dāng)方塊從右邊消失,我們將它移動(dòng)到左邊。同時(shí)我們要重命名MC,因?yàn)樗械腗C都是以“t_3_4”(表示它位于y=3,x=4)這樣的名字命名的。而在新位置的方塊可能要顯示不同的幀(圖片)。這就是為什么我們要將它發(fā)送到含有正確圖片的幀,也是這種方法叫做“gotoAndStop”的原因。

準(zhǔn)備卷屏

在大多數(shù)卷屏游戲中,主角的位置是始終在屏幕中央的。

你可以看見(jiàn),主角左邊的方塊數(shù)和右邊的方塊數(shù)是相等的。這就是說(shuō),總的列數(shù)是3、5、7、9、11……而絕不會(huì)是2、4、6、8。行數(shù)也是一樣。
來(lái)聲明一個(gè)游戲?qū)ο螅?BR>game = {tileW:30, tileH:30, currentMap:1, visx:7, visy:5, centerx:120, centery:90};
屬性 visx 代表可見(jiàn)的列數(shù),visy 代表可見(jiàn)的行數(shù)。我們還需要屬性centerx/centery來(lái)標(biāo)記影片的中心點(diǎn)。

當(dāng)我們移動(dòng)方塊時(shí),可能需要顯示一些在地圖數(shù)組中沒(méi)有聲明的方塊。例如,當(dāng)主角高高興興地走到地圖數(shù)組中已聲明的最左邊的方塊上以后,就需要顯示更左邊的方塊。對(duì)于這類方塊,我們會(huì)建立新的不含圖片的方塊類型(這樣對(duì)Flash來(lái)說(shuō)負(fù)擔(dān)比較小)。在方塊MC的第20幀創(chuàng)建關(guān)鍵幀。以下是聲明這類方塊的代碼:
game.Tile4 = function () { };
game.Tile4.prototype.walkable = false;
game.Tile4.prototype.frame = 20;

你可能還想部分地遮住一些方塊,這就需要新建含有名為“frame”的關(guān)聯(lián)的新MC,該MC的中間挖空,只顯示經(jīng)過(guò)挖空處的方塊。

建立卷屏的世界

讓我們從 buildMap 函數(shù)開(kāi)始。
function buildMap (map) {
_root.attachMovie("empty", "tiles", 1);
game.halfvisx=int(game.visx/2);
game.halfvisy=int(game.visy/2);

我們將為game對(duì)象計(jì)算兩個(gè)新的屬性。halfvisx和halfvisy被分別用來(lái)存放主角與可見(jiàn)區(qū)域邊緣之間的列數(shù)和行數(shù)。當(dāng)總列數(shù)visx=5時(shí),halfvisx=2,就是說(shuō)主角右邊有2列、左邊有2列,中間就是主角所在的那一列。

game.clip = _root.tiles;
game.clip._x = game.centerx-(char.xtile*game.tileW)-game.tileW/2;
game.clip._y = game.centery-(char.ytile*game.tileH)-game.tileH/2;

我們得根據(jù)以下兩個(gè)變量的值來(lái)決定包含主角和所有方塊的MC的位置:游戲的中心點(diǎn)和主角的位置。游戲的中心點(diǎn)在game對(duì)象中由centerx/centery聲明;主角的位置在char對(duì)象中由xtile/ytile聲明。當(dāng)主角被放在x坐標(biāo)的(char.xtile*game.tileW)+game.tileW/2處時(shí),方塊MC必須被放在相反的坐標(biāo)上,所以我們要用centerx減去這個(gè)值。

for (var y = char.ytile-game.halfvisy; y<=char.ytile+game.halfvisy+1; ++y) {
    for (var x = char.xtile-game.halfvisx;
    x<=char.xtile+game.halfvisx+1; ++x) {
        var name = "t_"+y+"_"+x;
        if(y>=0 and x>=0 and y<=map.length-1 and x<=map[0].length-1){
            game[name] = new game["Tile"+map[y][x]]();
        }else{
            game[name] = new game.Tile4();
        }
        game.clip.attachMovie("tile", name, 1+y*100+x*2);
        game.clip[name]._x = (x*game.tileW);
        game.clip[name]._y = (y*game.tileH);
        game.clip[name].gotoAndStop(game[name].frame);
   }
}

這個(gè)循環(huán)創(chuàng)建了所有的可見(jiàn)方塊對(duì)象,并且復(fù)制該方塊對(duì)象相應(yīng)的MC到舞臺(tái)上。如你所見(jiàn),這個(gè)循環(huán)并不是從0開(kāi)始,而是從ytile-halfvisy開(kāi)始。同理它也不是在map數(shù)組的末尾結(jié)束的,而是在ytile+halfvisy+1結(jié)束。然后,if條件句檢查將被創(chuàng)建的方塊是否已經(jīng)在map數(shù)組中。如果不在,我們就使用tile4模版中的空白方塊。
為了使卷屏的過(guò)程平滑,我們得在舞臺(tái)右邊和底部分別增加一行和一列方塊。這些方塊可以保證,哪怕我們把半個(gè)方塊移到舞臺(tái)的另一邊,也不會(huì)出現(xiàn)任何空白區(qū)域。
_root.attachMovie("frame", "frame", 100);
最后一行復(fù)制幀來(lái)覆蓋影片中你不想顯示的區(qū)域。

char.clip = game.clip.char;
char.x = (char.xtile*game.tileW)+game.tileW/2;
char.y = (char.ytile*game.tileW)+game.tileW/2;
char.width = char.clip._width/2;
char.height = char.clip._height/2;
char.clip._x = char.x;
char.clip._y = char.y;
char.clip.gotoAndStop(char.frame);
char.xstep=char.x;
char.ystep=char.y;

char的創(chuàng)建方法與前面一樣。僅有的不同是增加了兩個(gè)新的屬性:xstep和ystep。我們將在后面用它們來(lái)檢查當(dāng)前是否是移動(dòng)方塊行或列到另一端的合適時(shí)間。

卷屏!卷屏!

既然卷屏的世界已經(jīng)建好了,下面就該讓它真正“卷”動(dòng)起來(lái)了。在為主角計(jì)算出ob.xtile/ob.ytile的值以后,在moveChar函數(shù)的末尾加上如下代碼來(lái)進(jìn)行卷屏:
game.clip._x = game.centerx-ob.x;
game.clip._y = game.centery-ob.y;
if(ob.xstep<ob.x-game.tileW){
    var xtile = Math.floor(ob.xstep/game.tileW) + 1;
    var xnew=xtile+game.halfvisx+1;
    var xold=xtile-game.halfvisx-1;
    for (var i = ob.ytile-game.halfvisy-1; i<=ob.ytile+game.halfvisy+1; ++i) {
       changeTile (xold, i, xnew, i, _root["myMap"+game.currentMap]);
    }
    ob.xstep=ob.xstep+game.tileW;
} else if(ob.xstep>ob.x){
    var xtile = Math.floor(ob.xstep/game.tileW);
    var xnew=xtile+game.halfvisx+1;
    var xold=xtile-game.halfvisx-1;
    for (var i = ob.ytile-game.halfvisy-1; i<=ob.ytile+game.halfvisy+1; ++i) {
        changeTile (xold, i, xnew, i, _root["myMap"+game.currentMap]);
    }
    ob.xstep=ob.xstep-game.tileW;
}
if(ob.ystep<ob.y-game.tileH){
    var ytile = Math.floor(ob.ystep/game.tileH)+1;
    var ynew=ytile+game.halfvisy+1;
    var yold=ytile-game.halfvisy-1;
    for (var i = ob.xtile-game.halfvisx-1; i<=ob.xtile+game.halfvisx+1; ++i) {
        changeTile (i, yold, i, ynew, _root["myMap"+game.currentMap]);
    }
    ob.ystep=ob.ystep+game.tileH;
} else if(ob.ystep>ob.y){
    var ytile = Math.floor(ob.ystep/game.tileH);
    var yold=ytile+game.halfvisy+1;
    var ynew=ytile-game.halfvisy-1;
    for (var i = ob.xtile-game.halfvisx-1; i<=ob.xtile+game.halfvisx+1; ++i) {
        changeTile (i, yold, i, ynew, _root["myMap"+game.currentMap]);
    }
    ob.ystep=ob.ystep-game.tileH;
}
return (true);

首先,我們根據(jù)中心點(diǎn)的位置和主角的坐標(biāo)值將包含主角和所有方塊的game.clip放到相應(yīng)的位置。然后我們寫(xiě)了4段相似的代碼,每一段定義一個(gè)方向。當(dāng)主角的移動(dòng)距離大于方塊的大小時(shí),循環(huán)會(huì)調(diào)用含有相應(yīng)變量的changeTile函數(shù)。循環(huán)結(jié)束,方塊被移動(dòng)/重命名/修改以后,就該更新屬性ystep/xstep的值了。

現(xiàn)在,讓我們來(lái)編寫(xiě)changeTile函數(shù):

function changeTile (xold, yold, xnew, ynew, map) {
 var nameold = "t_"+yold+"_"+xold;
 var namenew = "t_"+ynew+"_"+xnew;
 if(ynew>=0 and xnew>=0 and ynew<=map.length-1 and xnew<=map[0].length-1){
  game[namenew] = new game["Tile"+map[ynew][xnew]]();
  game.clip[nameold]._name = namenew;
  game.clip[namenew].gotoAndStop(game[namenew].frame);
  game.clip[namenew]._x = (xnew*game.tileW);
  game.clip[namenew]._y = (ynew*game.tileH);
 }else{
  game[namenew] = new game.Tile4();
  game.clip[nameold]._name = namenew;
  game.clip[namenew].gotoAndStop(game[namenew].frame);
 }
}

這樣,我們會(huì)分別得到方塊的2個(gè)舊的和2個(gè)新的坐標(biāo)值。為了檢查方塊是否還在map數(shù)組之內(nèi),我們還增加了map參數(shù)。 “nameold”是這些方塊的舊名字,而“namenew”是它們的新名字。在我們用新名字創(chuàng)建了新的tile對(duì)象以后,語(yǔ)句:
game.clip[nameold]._name = namenew;
將方塊MC重命名。新的MC是空的,所以我們不必將它放到新的_x/_y,讓它留在原處就行了。

下載源文件

出處:藍(lán)色理想
責(zé)任編輯:qhwa

上一頁(yè) 浮動(dòng)區(qū)塊 下一頁(yè) 未完待續(xù) | coming soon

◎進(jìn)入論壇Flash專欄版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
Flash 酷站獵手
中文ID3亂碼問(wèn)題MX解決方案
用AS2解決中文ID3的亂碼
Flash常用效果-移動(dòng)模糊效果
Flash MX 2005 制作環(huán)境預(yù)覽
作者文章 更多作者文章
中文ID3亂碼問(wèn)題MX解決方案
Flash 區(qū)塊游戲開(kāi)發(fā)
Flash 中如何顯示清晰的字體
JavaScript 和 Flash 的通信
在 ListBox 組件中應(yīng)用 HTML
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門(mén)搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開(kāi)啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開(kāi)發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:19/20頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共20個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫(huà),設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說(shuō)明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書(shū)推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫(xiě)給大家看的色彩書(shū)1》
《跟我去香港》
眾妙之門(mén)—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開(kāi)發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開(kāi)發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2