毕业论文 论文提纲 论文写作 公文范例 教育论文 教育学论文 师范教育 学术论文     论文指导*
                     
 
   
   
   
   
           
 

当前位置:课件115学培吧(kj115.com)→flash课件制作教程

 
 
标题: 立体小方块拼图游戏的实现思路
 
展示台

文章来源 作者:admin 密 码:admin 整理:湖北金鹰

◇图文教程简介

本栏目收集整理FLASH相关和FLASH课件制作相关的技术教程,代码初步检验无错误。所有教程资源全部免费,属于本站免费的FLASH相关核心教程。

学习过程中有问题可以直接提出,本站尽所能帮你解决问题。

学员问答   技术难题

---------------

湖北金鹰课件吧

简介:省级 和国家级FLASH竞赛课件制作专业网站。

---------------

你可能感兴趣的还有免费的:

FLASH视频教程
    以图案填充对象
    运用渐进色彩
    置入与设定声音
    编辑声音
PS视频教程
    图像与像素
    多种抓屏方法
    多种选择工具的使用
    段落面板

---------------

讲解
1、基本思路
小方格拼图由于他的每一个拼图外形都不会是规则的,可能是L型,可能是T型,所以我们无法把每一个部件作为独立的物体来处理遮挡关系。但是因为他的基本型是小方块,如果我们排序通过小方块来处理,那么一起都会非常简单了。可以用N中方法来处理小方块基本型的排序。
排序解决了那么我们解决拖动问题?我们需要拖动的不是一个小方块而是由许多小方块拼起来的拼图部件。想想我们在Flash cs3中经常用到的Ctrl+G群组功能,我们只要把不同的拼图部件作为一个组,拖动组里面的任何一个方块都将移动这个群组里面的所有小方块,然后在松开鼠标的时候解除群组。按照上面说得小方块来做一次遍历排序不就行了?
2、群组的实现
我们给每一个拼图部件设置一个拼图数组,数组里面的每一个元素记录这一个小方格的编号。同时,每一个小方格也都有一个属性记录了自己在哪一个组里面。这里例子里面用到了5个部件,所以我定义了5个数组来保存。


Flash教程:立体小方块拼图游戏的实现思路


3、拖放群组任意一个成员移动群组的实现
这个其实很简单,一说就能明白了。我们定义了一个空的Sprite始终在场景的最上层,当我们拖动群组中某个成员的时候把这个群组中所有的对象都加入到这个空的Sprite里面。让这个Sprite跟着鼠标拖动就好了。停止拖动的时候,我们在把放到Sprite里面的这些对象取出来(相当于取消群组)再放回到场景里面,再把Sprite重新放在场景最上层。
因为刚刚拖动的是sprite,所以只有Sprite的坐标变化了,释放的时候需要把群组里面每一个对象的坐标调整到新坐标,同时重新把Sprite的坐标置为0,0. 
复制内容到剪贴板
代码:
[b]这是拖放的关键代码:[/b]
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();
}


Flash教程:立体小方块拼图游戏的实现思路


4、深度排序的实现
考虑到这只是个简单的例子,所以我通过这种方式来确定每个小方块的层级应该在上面还是下面。
规则:方块的屏幕y值越大则层级越高,如果Y值相等则X值越大层级越高。
我们先遍历一下场景中所有的方块都记录在同一个数组里面,然后为每个方块增加一个deep属性,最后通过数组的sort方法,根据deep属性排一次顺序。最后从第一个开始把排好序的数组中的每一个方块重新addChild一遍就OK了。
复制内容到剪贴板
代码:
function sortDeep(a,b)
{
if(a.deep>b.deep)
return 1;
else if(a.deep<b.deep)
return -1;
else
return 0;
}
function checkDeep()
{
var childList=new Array();
for(var k=0;k<numChildren-1;k++)
{
var deep=getChildAt(k).y*1000+getChildAt(k).x;
(getChildAt(k) as MovieClip).deep=deep;
childList.push(getChildAt(k));
}
childList.sort(sortDeep);
for(k=0;k<numChildren-1;k++)
{
addChildAt(childList[k],k);
}
}
=================================================================================
以下是完整的代码了
=================================================================================
复制内容到剪贴板
代码:
var group1:Array=[1,2,3,4]
var group2:Array=[5]
var group3:Array=[6,7,8,9]
var group4:Array=[10,11,12]
var group5:Array=[13,14,15,16];
var clickGroupIndex:int;   //记录点击的是那个群组
var sprite=new Sprite(); //用来移动群组方块的容器
addChild(sprite);
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<b.deep)
return -1;
else
return 0;
}
function checkDeep()
{
var childList=new Array();
for(var k=0;k<numChildren-1;k++)
{
var deep=getChildAt(k).y*1000+getChildAt(k).x;
(getChildAt(k) as MovieClip).deep=deep;
childList.push(getChildAt(k));
}
childList.sort(sortDeep);
for(k=0;k<numChildren-1;k++)
{
addChildAt(childList[k],k);
}
}
function group(index:int)
{
var groupIndex=this["block"+index].group
for(var i=0;i<this["group"+groupIndex].length;i++)
{
sprite.addChild(this["block"+this["group"+groupIndex][i]]);
}
}
function ungroup(index:int)
{
var groupIndex=this["block"+index].group
for(var i=0;i<this["group"+groupIndex].length;i++)
{
addChild(this["block"+this["group"+groupIndex][i]]);
this["block"+this["group"+groupIndex][i]].x+=sprite.x;
this["block"+this["group"+groupIndex][i]].y+=sprite.y;
}
sprite.x=0;
sprite.y=0;
this.setChildIndex(sprite,numChildren-1);
}

 

 

 
课件115学培吧(湖北金鹰)欢迎您!永久免费服务网址:http://www.kj115.com
   
 

学员众多的FLASH课件学习基地,成万免费FLASH课件制作教程在线学习,还有免费内容课件教程、视频教程、课件技巧、课件探讨、课件欣赏、课件展示、实用教程、课件界面、课件脚本、课件游戏、课件下载、课件封面、课文内容图片、课文人物图片库、课件素材、图片素材、声音素材、动物素材、背景图片、背景资料、背景边框、课件顶栏图片素材、Dreamweaver教程、Dreamweaver网页课件教程、软件下载。承接学习和培训,承接课件订制,课件修改等所有课件相关服务。
本站主要业务:┃flash课件制作视频教程培训┃承接全国竞赛flash课件┃论文代写代发┃代办课件国家级获奖证书┃
联系:QQ:444860709 手机:13339817386


 
 

业务办理
鄂ICP备08005724号