[英]AS3: if-function doesn't listen to a boolean in another class
所以......我正在制作一个国际象棋游戏,试图让它成为一个“公共静态布尔”(转弯)决定哪个玩家可以移动。 这个布尔值在一个类(Board.as)中,它导入所有国际象棋的所有类(例如QueenW.as(白皇后))。
我尝试了多种方法:尝试使函数不再运行,并将片段(它们是按钮)替换为其他对象(不可点击的动画片段)。 决定与后者一起去。 我在一个棋子类中跟踪了布尔值,并在一个ENTER_FRAME函数中跟踪了Board类。 当值发生变化时,两者似乎都能正确追踪它。
问题是:Flash不会删除棋子并用不可点击的对象替换它们,即使它应该发生的类(Board.as)在跟踪时会听取布尔值。 有人知道解决方案吗?
我的一小段代码,与问题有关:
Board类(我的.fla文件的Documentclass)
package
{
import QueenWclass; //imports the class used for example.
public class Board extends MovieClip
{
public static var turn:Boolean = new Boolean; //creates public static bool.
var queenW:QueenWclass = new QueenWclass(); //creates aforementioned chess-piece.
var queenWnoturn:QueenWnoturn = new QueenWnoturn; //creates a non-clickable object.
}
public function Board()
{
turn = true;
this.addEventListener(Event.ENTER_FRAME, frameEnter);
addChild(queenW); //adds pieces to the screen.
}
if (turn == true)
{
}
if (turn == false)
{
removeChild(queenW); //Removes chess-piece.
addChild(queenWnoturn); //Adds a non-clickable object.
}
}
还有我的QueenWclass.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监听,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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.