如何使用数组的hitTest的目的
本教程介绍如何使用数组的hitTest的目的。大多数教程显示如何复制的影片剪辑也为游戏(或其他目的),但仔细看了看,是非常低效的。本教程着眼于创建一个数组,其中包含的重复片段的“名”,那么当我们做一个循环来检查命中,环仅搜索中存在的剪辑。更多将在稍后解释。flash动画制作包括文件:hitTestArray.fla - 本教程的源代码。
理论
一般情况下,人们会创建自己的ActionScript来复制电影,然后的hitTest从0到最近的剪辑,这是非常低效的,因为如果你的游戏已经上说,一个小时后,每个帧都可以被检查成千上万的片段(即使他们是不存在!),因此,我们需要一个系统来看待目前“活跃”的剪辑。我们将要做的是创建一个数组,然后每一个影片剪辑复制是一个'name',这个名字被放入阵列中的。然后,当我们做的hitTest的循环,我们将加强通过在阵列中的所有名称。当影片剪辑被删除,它的名称会从数组中删除。
有两种方法来实现这种系统。我可以写一个教程,一个FILO栈中闪光(PUSH / POP),但是这不会是有效的,因为事情可能会在游戏环境中取出的顺序已被纳入环境。
履行
在本教程中,我将作出一个非常基本的游戏,球掉下来的“屋顶”,你必须阻止他们用桨,我已经排除任何得分/游戏结束的标志,以保持尽可能的纯。
该parentBall
首先主时间轴上画一个圆,选中它,并创建一个影片剪辑(F8)。现在选择的圆圈,并在“实例工具栏设置其名称为”ballParent“。然后右键单击圆上的选择:动作。现在我们需要的是第一位的ActionScript以下。
onClipEvent事件(负载){
如果(_name ==“ballParent”){
_visible = 0;
_root.array =新的Array();
_root.arraySize = 0;
蜱= 0;
i = 0;
} {
_x = _width / 2 +随机(550-_width / 2);
速度= 2 +随机(4);
移动= 1;
}
}
这样做是以下几点:如果球的名字是'ballParent“(这是),我们将创建一个新的阵列部电影叫”数组“的根。这将是阵列保持重复的球的名称。我们还创建了一个变量名为“ARRAYSIZE的根的电影。这将被用于检查阵列的大小。最后,我们创建两个变量,稍后会用到。如果球的名字是不是ballParent,我们定义了一些变量,稍后我将描述。接下来,添加下面的代码:
onClipEvent事件(enterFrame事件){
如果(_name ==“ballParent”){
蜱+ +;
如果(蜱> 25){
this.duplicateMovieClip(“球”+我,我+10);
_parent“球”+我。=;
_root.array [_root.arraysize] = I;
_root.arraysize + +;
i + +;
蜱= 0;
}
} {
(移动== 1){
_y + =速度;
(_y> 410){
移动= 0;
}
} {
(i = 0;我_root.arraysize,我+ +){
(_root.array [I] ==名称){
/ /跟踪(_root.array);
(J = I,J <_root.arraysize-1,J + +){
_root.array [J] = _root.array [+1];
}
和删除_root.array [_root.arraysize];
_root.arraysize -
我_root.arraysize;
}
}
removeMovieClip(“”);
}
}
}
这是该系统的“心脏”。首先,我将解释的代码为ballParent。每帧蜱增加了一个,,如果蜱是大于25,然后重复ballParent。这将为我们提供我们的duplicatedBalls。每当一个球是重复的,我们给它的数组名。如果球是“ball0”,那么它的阵列的名称将是“0”(我使用的整数,以保持较低的内存使用情况,但是我们可以把它的名字使用_name表达它的实际名称)。然后,我们添加的数组的数组名。我将描述发生了什么。
_root.array [_root.arraysize] = I;
_root.arraysize + +;
例如,如果数组的大小'0',那么我们需要给我们的重复球的第一个元素的数组名。如果数组的大小'5',那么,第六个元素必须被命名。由于数组的第一个元素是0其实,我们就可以说:ARRAYNAME [ARRAYSIZE] = NAME然后,我们增加了磁盘阵列的大小,并增加我。
(责任编辑:卓想动画http://www.zxgzs.com)