日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

flash立體小方塊拼圖游戲的實現(xiàn)思路

系統(tǒng) 2176 0

YangPuXiao的這個帖子里提了一個關(guān)于立體小方格拼圖的游戲:
http://bbs.actionscript3.cn/thread-17085-1-1.html
,這里給出一個基本實現(xiàn)的思路,以及程序流程和演示。
先來看一下實現(xiàn)后的效果,因為是臨時做得所以代碼不規(guī)范也沒有做吸附算法,所有的東西也都是寫在時間軸上面的。
還是按照我的慣例通過圖文講解主要環(huán)節(jié)的考慮,形象大使的還是我們的“葡萄MM“。
講解
1、基本思路
小方格拼圖由于他的每一個拼圖外形都不會是規(guī)則的,可能是L型,可能是T型,所以我們無法把每一個部件作為獨立的物體來處理遮擋關(guān)系。但是因為他的基本型是小方塊,如果我們排序通過小方塊來處理,那么一起都會非常簡單了。可以用N中方法來處理小方塊基本型的排序。
排序解決了那么我們解決拖動問題?我們需要拖動的不是一個小方塊而是由許多小方塊拼起來的拼圖部件。想想我們在Flash cs3中經(jīng)常用到的Ctrl+G群組功能,我們只要把不同的拼圖部件作為一個組,拖動組里面的任何一個方塊都將移動這個群組里面的所有小方塊,然后在松開鼠標的時候解除群組。按照上面說得小方塊來做一次遍歷排序不就行了?
2、群組的實現(xiàn)
我們給每一個拼圖部件設置一個拼圖數(shù)組,數(shù)組里面的每一個元素記錄這一個小方格的編號。同時,每一個小方格也都有一個屬性記錄了自己在哪一個組里面。這里例子里面用到了5個部件,所以我定義了5個數(shù)組來保存。

3、拖放群組任意一個成員移動群組的實現(xiàn)
這個其實很簡單,一說就能明白了。我們定義了一個空的Sprite始終在場景的最上層,當我們拖動群組中某個成員的時候把這個群組中所有的對象都加入到這個空的Sprite里面。讓這個Sprite跟著鼠標拖動就好了。停止拖動的時候,我們在把放到Sprite里面的這些對象取出來(相當于取消群組)再放回到場景里面,再把Sprite重新放在場景最上層。
因為剛剛拖動的是sprite,所以只有Sprite的坐標變化了,釋放的時候需要把群組里面每一個對象的坐標調(diào)整到新坐標,同時重新把Sprite的坐標置為0,0.?
復制內(nèi)容到剪貼板
代碼:
這是拖放的關(guān)鍵代碼:
function group(index:int)
{
//見下面的完整代碼
}
function ungroup(index:int)
{
//見下面的完整代碼
}
this.addEventListener(MouseEvent.MOUSE_DOWN,onmouseDown);
this.addEventListener(MouseEvent.MOUSE_UP,onmouseUp);
function onmouseDown(evt:MouseEvent)
{
clickGroupIndex=evt.target.name.substr(5);
group(int(clickGroupIndex));
sprite.startDrag();
alpha=0.5;
}
function onmouseUp(evt:MouseEvent)
{
????? ungroup(int(clickGroupIndex));
sprite.stopDrag();
}

4、深度排序的實現(xiàn)
考慮到這只是個簡單的例子,所以我通過這種方式來確定每個小方塊的層級應該在上面還是下面。
規(guī)則:方塊的屏幕y值越大則層級越高,如果Y值相等則X值越大層級越高。
我們先遍歷一下場景中所有的方塊都記錄在同一個數(shù)組里面,然后為每個方塊增加一個deep屬性,最后通過數(shù)組的sort方法,根據(jù)deep屬性排一次順序。最后從第一個開始把排好序的數(shù)組中的每一個方塊重新addChild一遍就OK了。
復制內(nèi)容到剪貼板
代碼:
function sortDeep(a,b)
{
if(a.deep>b.deep)
return 1;
else if(a.deep
block1.group=1;
block2.group=1;
block3.group=1;
block4.group=1;
block5.group=2;
block6.group=3;
block7.group=3;
block8.group=3;
block9.group=3;
block10.group=4;
block11.group=4;
block12.group=4;
block13.group=5;
block14.group=5;
block15.group=5;
block16.group=5;
this.addEventListener(MouseEvent.MOUSE_DOWN,onmouseDown);
this.addEventListener(MouseEvent.MOUSE_UP,onmouseUp);
checkDeep();
function onmouseDown(evt:MouseEvent)
{
clickGroupIndex=evt.target.name.substr(5);
group(int(clickGroupIndex));
sprite.startDrag();
alpha=0.5;
}
function onmouseUp(evt:MouseEvent)
{
ungroup(int(clickGroupIndex));
sprite.stopDrag();
alpha=1;
checkDeep();
}
function sortDeep(a,b)
{
if(a.deep>b.deep)
return 1;
else if(a.deep
本文轉(zhuǎn)自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/4678.html

flash立體小方塊拼圖游戲的實現(xiàn)思路


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 岐山县| 弥勒县| 开封县| 三明市| 老河口市| 溧阳市| 武邑县| 高雄市| 罗源县| 新疆| 安国市| 濮阳县| 巨鹿县| 施秉县| 衡南县| 西乌珠穆沁旗| 北流市| 阳谷县| 平和县| 和田市| 东山县| 石狮市| 广丰县| 武胜县| 偏关县| 桐乡市| 乐安县| 永吉县| 泰和县| 敦化市| 同德县| 阿合奇县| 阜新| 绍兴县| 澳门| 日喀则市| 开封市| 东乡县| 西城区| 全南县| 新绛县|