Actionscript 3 As3检查计时器用完时电影剪辑是否可见
几年前发布了一个非常类似的问题,这个有用的答案让我了解了一部分,但作为AS3的新手,我需要更多的帮助才能到达终点线 以下是我想做的:Actionscript 3 As3检查计时器用完时电影剪辑是否可见,actionscript-3,flash,Actionscript 3,Flash,几年前发布了一个非常类似的问题,这个有用的答案让我了解了一部分,但作为AS3的新手,我需要更多的帮助才能到达终点线 以下是我想做的: 我正在整理9个电影剪辑。我需要能够检测到什么时候没有更多的项目需要排序 我想创建一个倒计时计时器,从30秒开始倒计时,并显示在屏幕上的动态文本框中(我是一个完全的新手;执行下面的代码对我来说是一个巨大的挑战,即使在多次关于计时器的教程之后,我也无法让它工作。代码在我的文件中被注释掉;我从下面删除了它) 我想我需要创建一个项目数组,但不确定如何创建并将其合并到计时器
if (time==0 && itemsToSort >0) {
goToAndPlay (2, "Try Again!");
}
if (time==0 && itemsToSort <1){
goToAndPlay (5, "Great job!")
cheer.play();
}
}如果您希望有剩余时间的视觉指示器,则使用
计时器可能无法提供所需的灵活性。此外,您需要注册mouseOver
和mouseOut
事件的按钮,以便应用
stop();
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.media.Sound;
var objectoriginalX:Number;
var objectoriginalY:Number;
var correct:Sound = new Toss();
var incorrect:Sound = new Swoosh();
var background:Sound = new Background();
// For convenience (and lookup later), we add the buttons to an array.
var btnArray = [cstrawberry, csandwich, cnapkin, rbottle, rcup, rfoil, lspork, ljuice, lyogurt];
// Loop through the array, and register each to the events we need.
for each (var button in btnArray) {
button.buttonMode = true;
button.addEventListener("mouseOver", buttonEvents);
button.addEventListener("mouseOut", buttonEvents);
button.addEventListener("mouseDown", buttonEvents);
button.addEventListener("mouseUp", buttonEvents);
}
background.play();
function buttonEvents(e:MouseEvent):void {
// Here we handle all button states
// Simplify references to the current button by creating a local var.
var btn:MovieClip = e.currentTarget as MovieClip;
switch (e.type) {
case "mouseOver":
// Show the dropdown.
btn.filters = new Array(new DropShadowFilter(10, 90, 0, 0.25, 10, 10));
break;
case "mouseOut":
// Hide the dropdown
btn.filters = new Array(new DropShadowFilter(0, 90, 0, 0, 10, 10));
break;
case "mouseDown":
// Drag the button and store the original locs
btn.startDrag(true);
btn.parent.addChild(btn);
objectoriginalX = btn.x;
objectoriginalY = btn.y;
break;
case "mouseUp":
// Drop the drag, and evaluate if it was correct
btn.stopDrag();
if (testIfMatch(btn.name, btn.dropTarget.parent.name)){
btn.removeEventListener("mouseDown", pickupObject);
btn.removeEventListener("mouseUp", dropObject);
btn.buttonMode = false;
btn.visible = false;
correct.play();
} else {
btn.x = objectoriginalX;
btn.y = objectoriginalY;
incorrect.play();
}
break;
}
}
function testIfMatch(_drop:String, _target:String):Boolean {
//check if the leading Letter for both Sprites is the same
if (_drop.substr(0, 1) == _target.substr(0, 1)) {
return true;
} else {
return false ;
}
}
// Let's create something to look at the countdown.
var countdownTime:int = 30;
var countdown:TextField = new TextField();
countdown.text = "Time: " + countdownTime;
addChild(countdown);
stage.addEventListener(Event.ENTER_FRAME, updateCounter);
var lastSecond:Number = flash.utils.getTimer();
function updateCounter(e:Event):void {
var now:Number = flash.utils.getTimer();
// If more than one second has past, reset the lastSecond to now, and update the counter.
if (now - lastSecond > 1000) {
lastSecond += 1000;
countdownTime--;
countdown.text = "Time: " + countdownTime;
if (countdownTime < 1) {
stage.removeEventListener(Event.ENTER_FRAME, updateCounter);
// Count how many are still visible
var visibleButtons:int = 0;
for each (btn in btnArray) {
if (btn.visible) {
visibleButtons++;
}
}
if (visibleButtons > 0) {
goToAndPlay (2, "Try Again!");
} else {
goToAndPlay (5, "Great job!")
cheer.play();
}
}
}
}
stop();
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
导入flash.media.Sound;
var objectoriginalX:数字;
var objectoriginalY:数字;
var correct:Sound=new Toss();
变量不正确:声音=新的Swoosh();
变量背景:声音=新背景();
//为了方便(以及以后的查找),我们将按钮添加到数组中。
var btnArray=[cstrawberry、csandwich、cnapkin、rbottle、rcup、rfoil、lspork、ljuice、lyogurt];
//循环遍历数组,并将每个数组注册到我们需要的事件。
对于每个(btnArray中的var按钮){
button.buttonMode=true;
按钮。addEventListener(“鼠标悬停”,按钮按钮);
按钮。addEventListener(“鼠标出”,按钮按钮);
按钮。addEventListener(“鼠标向下”,按钮按钮);
按钮。addEventListener(“mouseUp”,buttonEvents);
}
background.play();
功能按钮事件(e:MouseeEvent):无效{
//这里我们处理所有按钮状态
//通过创建本地变量简化对当前按钮的引用。
var btn:MovieClip=e.currentTarget作为MovieClip;
开关(e型){
案例“鼠标悬停”:
//显示下拉列表。
btn.filters=新阵列(新的DropShadowFilter(10,90,0,0.25,10,10));
打破
案例“mouseOut”:
//隐藏下拉列表
btn.filters=新阵列(新的DropShadowFilter(0,90,0,0,10,10));
打破
案例“mouseDown”:
//拖动按钮并存储原始LOC
btn.startDrag(正确);
btn.parent.addChild(btn);
objectoriginalX=btn.x;
objectoriginalY=btn.y;
打破
案例“mouseUp”:
//拖放,并评估其是否正确
btn.stopDrag();
if(testIfMatch(btn.name、btn.dropTarget.parent.name)){
btn.removeEventListener(“鼠标向下”,pickupObject);
btn.removeEventListener(“mouseUp”,dropObject);
btn.buttonMode=false;
btn.visible=false;
正确。播放();
}否则{
btn.x=objectoriginalX;
btn.y=对象初始值;
不正确。play();
}
打破
}
}
函数testIfMatch(_drop:String,_target:String):布尔值{
//检查两个精灵的前导字母是否相同
如果(_drop.substr(0,1)==_target.substr(0,1)){
返回true;
}否则{
返回false;
}
}
//让我们创建一些东西来查看倒计时。
var countdownTime:int=30;
var倒计时:TextField=newtextfield();
countdown.text=“时间:”+countdown;
addChild(倒计时);
stage.addEventListener(Event.ENTER\u FRAME,updateCounter);
var lastssecond:Number=flash.utils.getTimer();
函数updateCounter(e:事件):void{
var now:Number=flash.utils.getTimer();
//如果超过一秒,请将最后一秒重置为现在,并更新计数器。
如果(现在-最后一秒>1000){
最后一秒+=1000;
倒计时--;
countdown.text=“时间:”+countdown;
如果(计数停机时间<1){
stage.removeEventListener(Event.ENTER_FRAME,updateCounter);
//计算仍可见的数量
变量visibleButtons:int=0;
对于每个(btnArray中的btn){
如果(btn.可见){
可视按钮++;
}
}
如果(可视按钮>0){
goToAndPlay(2,“再试一次!”);
}否则{
goToAndPlay(5,“干得好!”)
加油。玩();
}
}
}
}
此外,过滤器放置阴影代码也不起作用。我想让它在鼠标上方投下一个阴影,但它不起作用。在我的代码中有一点是不起作用的;不知道为什么。函数悬停(event:MouseEvent):void{this.filters=[new DropShadowFilter()];}对于按钮效果,如果使用内置的“按钮”符号(通过选择对象,按f8并转换为“按钮”),则可以编辑该按钮的时间线(通过双击)。它将有四个帧:正常、鼠标悬停、鼠标下键和单击。您可以更改这些,然后按钮将自动更改为相关帧(例如,鼠标悬停在按钮上方时鼠标悬停),无需代码。仍然不明白您的主要问题是什么。请定义一个,以便人们可以尝试回答您。
stop();
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.media.Sound;
var objectoriginalX:Number;
var objectoriginalY:Number;
var correct:Sound = new Toss();
var incorrect:Sound = new Swoosh();
var background:Sound = new Background();
// For convenience (and lookup later), we add the buttons to an array.
var btnArray = [cstrawberry, csandwich, cnapkin, rbottle, rcup, rfoil, lspork, ljuice, lyogurt];
// Loop through the array, and register each to the events we need.
for each (var button in btnArray) {
button.buttonMode = true;
button.addEventListener("mouseOver", buttonEvents);
button.addEventListener("mouseOut", buttonEvents);
button.addEventListener("mouseDown", buttonEvents);
button.addEventListener("mouseUp", buttonEvents);
}
background.play();
function buttonEvents(e:MouseEvent):void {
// Here we handle all button states
// Simplify references to the current button by creating a local var.
var btn:MovieClip = e.currentTarget as MovieClip;
switch (e.type) {
case "mouseOver":
// Show the dropdown.
btn.filters = new Array(new DropShadowFilter(10, 90, 0, 0.25, 10, 10));
break;
case "mouseOut":
// Hide the dropdown
btn.filters = new Array(new DropShadowFilter(0, 90, 0, 0, 10, 10));
break;
case "mouseDown":
// Drag the button and store the original locs
btn.startDrag(true);
btn.parent.addChild(btn);
objectoriginalX = btn.x;
objectoriginalY = btn.y;
break;
case "mouseUp":
// Drop the drag, and evaluate if it was correct
btn.stopDrag();
if (testIfMatch(btn.name, btn.dropTarget.parent.name)){
btn.removeEventListener("mouseDown", pickupObject);
btn.removeEventListener("mouseUp", dropObject);
btn.buttonMode = false;
btn.visible = false;
correct.play();
} else {
btn.x = objectoriginalX;
btn.y = objectoriginalY;
incorrect.play();
}
break;
}
}
function testIfMatch(_drop:String, _target:String):Boolean {
//check if the leading Letter for both Sprites is the same
if (_drop.substr(0, 1) == _target.substr(0, 1)) {
return true;
} else {
return false ;
}
}
// Let's create something to look at the countdown.
var countdownTime:int = 30;
var countdown:TextField = new TextField();
countdown.text = "Time: " + countdownTime;
addChild(countdown);
stage.addEventListener(Event.ENTER_FRAME, updateCounter);
var lastSecond:Number = flash.utils.getTimer();
function updateCounter(e:Event):void {
var now:Number = flash.utils.getTimer();
// If more than one second has past, reset the lastSecond to now, and update the counter.
if (now - lastSecond > 1000) {
lastSecond += 1000;
countdownTime--;
countdown.text = "Time: " + countdownTime;
if (countdownTime < 1) {
stage.removeEventListener(Event.ENTER_FRAME, updateCounter);
// Count how many are still visible
var visibleButtons:int = 0;
for each (btn in btnArray) {
if (btn.visible) {
visibleButtons++;
}
}
if (visibleButtons > 0) {
goToAndPlay (2, "Try Again!");
} else {
goToAndPlay (5, "Great job!")
cheer.play();
}
}
}
}