Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3:如果函数不';不要听另一个类中的布尔值_Actionscript 3_Class_If Statement_Boolean - Fatal编程技术网

Actionscript 3 AS3:如果函数不';不要听另一个类中的布尔值

Actionscript 3 AS3:如果函数不';不要听另一个类中的布尔值,actionscript-3,class,if-statement,boolean,Actionscript 3,Class,If Statement,Boolean,所以。。。我正在做一个国际象棋游戏,并试图让它成为一个“公共静态布尔”(turn)指令哪个玩家可以移动。该布尔值位于一个类(Board.as)中,该类导入所有棋子的所有类(例如QueenW.as(用于白皇后)) 我尝试了多种方法:尝试使函数不再运行,并将片段(按钮)替换为其他对象(不可单击的movieclips)。决定跟后者一起去。我在一个ENTER_框架函数中跟踪了chess piece类和Board类中的布尔值。当值发生变化时,两者似乎都能正确地跟踪它 问题是:Flash不会移除棋子并用不可

所以。。。我正在做一个国际象棋游戏,并试图让它成为一个“公共静态布尔”(turn)指令哪个玩家可以移动。该布尔值位于一个类(Board.as)中,该类导入所有棋子的所有类(例如QueenW.as(用于白皇后))

我尝试了多种方法:尝试使函数不再运行,并将片段(按钮)替换为其他对象(不可单击的movieclips)。决定跟后者一起去。我在一个ENTER_框架函数中跟踪了chess piece类和Board类中的布尔值。当值发生变化时,两者似乎都能正确地跟踪它

问题是:Flash不会移除棋子并用不可单击的对象替换它们,即使它应该发生的类(Board.as)在跟踪时确实会侦听布尔值。有人知道解决办法吗

我的一小段代码与问题有关:

Board类(这是my.fla文件的Documentclass)

还有我的QueenClass.as类:

package
{
 public class QueenWclass extends MovieClip
 {
  var queenW:QueenW = new QueenW();
 }

 public function QueenWclass()
 {
  addChild(queenW);

  this.addEventListener(MouseEvent.CLICK, CLICKqueenW);
 }

 function CLICKqueenW(event.MouseEvent):void
 {
  Board.turn = false;
 }
}

我希望我写的这个例子是正确的,并且可以理解。我的项目没有真正的时间限制,因为我一个小时前就已经交了(但由于努力和我在这个相当复杂的游戏中走了多远,我仍然得到了6/10)。我只想自己完成它。。。提前谢谢

可能代码没有被正确复制,或者有一个小问题

此代码:

 if (turn == true)
 {

 }

 if (turn == false)
 {
    removeChild(queenW); //Removes chess-piece.
    addChild(queenWnoturn); //Adds a non-clickable object.
 }

将只运行一次,当创建“Board”时,当“turn”的状态更改时,它将不会运行。

好吧,您没有任何东西在侦听布尔值的更改。检查布尔值的代码位于构造函数中,而实际更改是在MouseEvent.CLICK事件侦听器中完成的。您必须实现一个通过Event.ENTER_FRAME listening、SetInterval()或TimerEvent.TIMER(带有计时器)重复调用的函数,或者实现一个公共可用属性作为一个函数,该函数将检查是哪个回合并执行相应的操作。后者稍微好一点,因为它只有在某些事情发生变化时才起作用

private static var _turn:Boolean=false;
public static function get turn():Boolean { return _turn; } // getter part
public static function set turn(value:Boolean):void // setter part
{
    if (_turn==value) return; // no need to change turn
    _turn=value;
    if (_turn) YouGetATurn(); else EnemyGetsATurn();
    // this part is what will get called when you change Board.turn 
}

我没有复制代码,我编写了一个示例代码,这样很多无用的、不相关的行就不会占用空间。那么,我应该把它放在ENTER_FRAME函数中吗?如果是这样,那会不会因为Flash不断尝试“removeChild(queenW);”而失败?我建议您将其放入一个函数中,然后在turn更改时调用该函数。
private static var _turn:Boolean=false;
public static function get turn():Boolean { return _turn; } // getter part
public static function set turn(value:Boolean):void // setter part
{
    if (_turn==value) return; // no need to change turn
    _turn=value;
    if (_turn) YouGetATurn(); else EnemyGetsATurn();
    // this part is what will get called when you change Board.turn 
}