我正在尝试在Flash中制作原始游戏。我正在使用AS3来构建它。到目前为止,我所编码的一切工作正常。到现在为止,我只有3帧。但是,我准备继续前进,所以我添加了第四帧。但是,当我测试动画时,它会从第2帧跳到第4帧。我在第3帧中放置一条跟踪,看看Flash是否正在运行它,并且跟踪执行跟踪,所以我知道Flash并没有完全忽略第3帧但是,我在第3帧结束时有一个stop();
,我在第4帧上有一个stop();
。所以,我不确定为什么会跳过第3帧。游戏没有任何补间或实际动画,所以它不应该是那种类型的任何东西。唯一的互动是点击点。我把所有4个框架的代码都放在下面(我不确定这是否是不满意的。如果是的话,请告诉我,我会删除它但是我放了它因为它似乎可能很有帮助)。我也上传了一个链接到我的.FLA文件,以防有人想看到整个事情。
第1帧:
import flash.events.MouseEvent;
var dotList = new Array(); var level:int = 10; var invisoDotList = new Array();
var loop:int;
for(loop = 0; loop < level; loop++)
{
var dot:Dot = new Dot();
var invisoDot:InvisoDot = new InvisoDot();
var tester:Boolean = true;
var xval:int = Math.floor(Math.random()*(1+520))+14;
var looper:int = 0;
while(looper < dotList.length)
{
if(Math.abs(xval - dotList[looper].x) > 30)//minimum spacing
{
looper++;
}
else
{
looper = 0;
xval = Math.floor(Math.random()*(1+520))+14;
}
}
dot.x = xval;
dot.y = 187;
invisoDot.x = xval;
invisoDot.y = 187;
invisoDot.alpha = 0;
dotList[loop] = dot;
invisoDotList[loop] = invisoDot;
addChild(invisoDot);
addChild(dot);
}
//trace(dotList); test to ensure that dots are added to the array
button.addEventListener(MouseEvent.CLICK, hideDots);
function hideDots(e:MouseEvent)
{
for(var loop:int = 0; loop < dotList.length; loop++)
{
dotList[loop].alpha = 0;//make dots disappear
}
nextFrame();
}
stop();
第2帧:
import flash.events.MouseEvent;
button.addEventListener(MouseEvent.CLICK, next);
function next(e:MouseEvent)
{
nextFrame();
}
stop();
第3帧:
import flash.events.MouseEvent;
removeChild(button);
var clicks:int = -1;
//trace(dotList.length);
stage.addEventListener(MouseEvent.CLICK, clickCount);
for(var loopvar:int = 0; loopvar < dotList.length; loopvar++)
{
//trace("loop");
dot = dotList[loopvar];
invisoDot = invisoDotList[loopvar];
dot.addEventListener(MouseEvent.CLICK, onClick);
invisoDot.addEventListener(MouseEvent.CLICK, onClick);
//trace("event");
}
//trace(dotList.length);
function onClick(e:MouseEvent)
{
//e.currentTarget.alpha = .5;
for(var hitcheck:int = 0; hitcheck < dotList.length; hitcheck++)
{
if(dotList[hitcheck].x == e.currentTarget.x)
{
dotList[hitcheck].alpha = 1;
}
}
//trace("check");
}
function clickCount(e:MouseEvent)
{
clicks++;
//trace(clicks);
var numChanged:int = 0;
for(var index:int = 0; index < dotList.length; index++)//check whether the user has gotten all the dots
{
if(dotList[index].alpha == 1)
{
numChanged++;
}
}
if(numChanged == level)//if the user has gotten all the dots
{
trace("next screen for sucess");
trace(clicks);
}
else if((clicks - numChanged) >= 2)//this ends the session as soon as 2 mistakes are made
{
trace("next screen for failed number of clicks");
trace(clicks);
}
/*else if((clicks - level) >= 2)//if the user has made too many mistakes. This ends the session after the maximum number of tries have been used
{
trace("next screen too many clicks");
trace(clicks);
}*/
}
trace("end");
stop();
第4帧:
stop();
链接到.FLA文件:https://www.dropbox.com/s/x1vim49tnz227id/Game.fla
如果我在这个问题中使用的任何约定都是错误或不赞成的,请告诉我,我会纠正它们。自从我上次发布StackOverflow以来已经过去了一年多。
答案 0 :(得分:2)
第1帧和第2帧是否存在相同的button
实例?
如果是这样,您将在第2帧(hideDots()
和next()
)上的按钮上结束两次点击事件处理程序。如果您单击按钮,则他们都会调用nextFrame()
,这将跳过第3帧。
可能的解决方案:
在移动到下一帧之前删除第一个事件侦听器:
button.addEventListener(MouseEvent.CLICK, hideDots);
function hideDots(e:MouseEvent)
{
for(var loop:int = 0; loop < dotList.length; loop++)
{
dotList[loop].alpha = 0;//make dots disappear
}
// Remove the event listener here:
button.removeEventListener(MouseEvent.CLICK, hideDots);
nextFrame();
}
或强>
在第1帧和第2帧上有不同的按钮实例。 您可以通过为第1帧和第2帧上的按钮设置关键帧来实现此目的 - 当Flash按下该帧时,Flash将创建该按钮的新实例。