AS3 - 多个图像转 On/Off 不适用于第二个 MovieClip
AS3 - Multiple Images Turn On/Off Not Working with Second MovieClip
好吧,这让我发疯了。我的 AS3 知识不是世界上最好的,但我正在努力弄清楚我在这方面哪里出了问题。
基本上,我想做的是在某些时候制作 visible/invisble 两个不同的 MovieClip。
奇怪的是,有人在回应。而另一个不是。除了 jpeg 内容和名称之外,它们都是相同的。有没有我缺少的设置?两者都匹配了 MovieClip 名称和实例名称......但是当我使用下面的代码时,HOP1 变成 off/on,但 HOP2 拒绝!我只是错过了一些愚蠢的明显偏好吗?
我会提到,我必须修改代码以使用两个不同的 MovieClip,但现在我只想关闭两个文件!
package {
import flash.display.MovieClip;
import flash.events.TimerEvent;
import flash.ui.Mouse;
import flash.utils.Timer;
import com.boo.CustomDate;
import com.boo.ScreensaverSimple;
public class Generic extends MovieClip {
// This is where you can set the Hour of Power time start and end time (in 24 hour format e.g. 1330 for 1:30pm)
// If there is no hour of power, simply set both numbers to 0
private var HourOfPowerStartTime:Number = 0;
private var HourOfPowerEndTime:Number = 0;
private var ss:ScreensaverSimple;
public var time_check_timer:Timer;
private var delay_add_timer:Timer;
public function Generic() {
Mouse.hide();
ss = new ScreensaverSimple;
ss.setScreensaver(screens);
HOP2.visible = false;
time_check_timer = new Timer(1000);
time_check_timer.addEventListener(TimerEvent.TIMER, checkTime);
delay_add_timer = new Timer(1,1);
delay_add_timer.addEventListener(TimerEvent.TIMER, addAllChildren);
delay_add_timer.start();
}
public function addAllChildren(evt:TimerEvent=null):void {
delay_add_timer.removeEventListener(TimerEvent.TIMER, addAllChildren);
delay_add_timer.stop();
delay_add_timer = null;
time_check_timer.start();
checkTime();
}
public function checkTime(evt:TimerEvent=null):void {
checkHOP2();
}
private function checkHOP1():void {
if(HourOfPowerStartTime == 0 && HourOfPowerEndTime == 0)
{
if(HOP2.visible == true)
{
HOP2.visible = false;
}
return;
}
var CurrentTime:Number = CustomDate.return24HourNumber();
if(CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime)
{
if(HOP2.visible == false)
{
HOP2.visible = true;
}
}
else
{
if(HOP2.visible == true)
{
HOP2.visible = false;
}
}
}
}
}
if(HOP2.visible == true)
{
HOP2.visible = false;
}
首先,if
条件在这里完全多余。如果您考虑一下,这些行的工作方式与单独使用这一行完全相同:
HOP2.visible = false;
此外 (HOP2.visible == true)
与 (HOP2.visible)
完全相同,您还可以将条件检查的值直接分配给变量。通常你可以减少你的功能:
private function checkHOP1():void {
HOP2.visible = (HourOfPowerStartTime || HourOfPowerEndTime);
if (!HOP2.visible) return;
var CurrentTime:Number = CustomDate.return24HourNumber();
HOP2.visible = (CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime);
}
然后我看到你打电话给 checkHOP2()
:
public function checkTime(evt:TimerEvent=null):void {
checkHOP2();
}
但我没有看到您提供的代码中定义的 checkHOP2()
函数。
同样,我没有看到您调用 checkHOP1()
函数的表单。而且我也不明白为什么要在名为 checkHOP1()
的函数中更改 HOP2
实例。它应该是某种混淆吗?
好吧,这让我发疯了。我的 AS3 知识不是世界上最好的,但我正在努力弄清楚我在这方面哪里出了问题。
基本上,我想做的是在某些时候制作 visible/invisble 两个不同的 MovieClip。
奇怪的是,有人在回应。而另一个不是。除了 jpeg 内容和名称之外,它们都是相同的。有没有我缺少的设置?两者都匹配了 MovieClip 名称和实例名称......但是当我使用下面的代码时,HOP1 变成 off/on,但 HOP2 拒绝!我只是错过了一些愚蠢的明显偏好吗?
我会提到,我必须修改代码以使用两个不同的 MovieClip,但现在我只想关闭两个文件!
package {
import flash.display.MovieClip;
import flash.events.TimerEvent;
import flash.ui.Mouse;
import flash.utils.Timer;
import com.boo.CustomDate;
import com.boo.ScreensaverSimple;
public class Generic extends MovieClip {
// This is where you can set the Hour of Power time start and end time (in 24 hour format e.g. 1330 for 1:30pm)
// If there is no hour of power, simply set both numbers to 0
private var HourOfPowerStartTime:Number = 0;
private var HourOfPowerEndTime:Number = 0;
private var ss:ScreensaverSimple;
public var time_check_timer:Timer;
private var delay_add_timer:Timer;
public function Generic() {
Mouse.hide();
ss = new ScreensaverSimple;
ss.setScreensaver(screens);
HOP2.visible = false;
time_check_timer = new Timer(1000);
time_check_timer.addEventListener(TimerEvent.TIMER, checkTime);
delay_add_timer = new Timer(1,1);
delay_add_timer.addEventListener(TimerEvent.TIMER, addAllChildren);
delay_add_timer.start();
}
public function addAllChildren(evt:TimerEvent=null):void {
delay_add_timer.removeEventListener(TimerEvent.TIMER, addAllChildren);
delay_add_timer.stop();
delay_add_timer = null;
time_check_timer.start();
checkTime();
}
public function checkTime(evt:TimerEvent=null):void {
checkHOP2();
}
private function checkHOP1():void {
if(HourOfPowerStartTime == 0 && HourOfPowerEndTime == 0)
{
if(HOP2.visible == true)
{
HOP2.visible = false;
}
return;
}
var CurrentTime:Number = CustomDate.return24HourNumber();
if(CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime)
{
if(HOP2.visible == false)
{
HOP2.visible = true;
}
}
else
{
if(HOP2.visible == true)
{
HOP2.visible = false;
}
}
}
}
}
if(HOP2.visible == true)
{
HOP2.visible = false;
}
首先,if
条件在这里完全多余。如果您考虑一下,这些行的工作方式与单独使用这一行完全相同:
HOP2.visible = false;
此外 (HOP2.visible == true)
与 (HOP2.visible)
完全相同,您还可以将条件检查的值直接分配给变量。通常你可以减少你的功能:
private function checkHOP1():void {
HOP2.visible = (HourOfPowerStartTime || HourOfPowerEndTime);
if (!HOP2.visible) return;
var CurrentTime:Number = CustomDate.return24HourNumber();
HOP2.visible = (CurrentTime >= HourOfPowerStartTime && CurrentTime <= HourOfPowerEndTime);
}
然后我看到你打电话给 checkHOP2()
:
public function checkTime(evt:TimerEvent=null):void {
checkHOP2();
}
但我没有看到您提供的代码中定义的 checkHOP2()
函数。
同样,我没有看到您调用 checkHOP1()
函数的表单。而且我也不明白为什么要在名为 checkHOP1()
的函数中更改 HOP2
实例。它应该是某种混淆吗?