3

所以......我正在开发一个国际象棋游戏,并试图让它“公共静态布尔值”(转)决定哪个玩家可以采取行动。这个布尔值在一个类 (Board.as) 中,该类导入所有棋子的所有类(例如,QueenW.as(代表白皇后))。

我尝试了多种方法:尝试使函数不再运行,并将片段(它们是按钮)替换为其他对象(不可点击的影片剪辑)。决定选择后者。我已经在 ENTER_FRAME 函数中跟踪了棋子类和棋盘类中的布尔值。当值发生变化时,两者似乎都能正确跟踪它。

问题是: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)。我只是想为自己完成它......提前谢谢!

4

2 回答 2

1

好吧,您没有任何东西在监听布尔值的变化。检查布尔值的代码位于构造函数中,而实际更改在 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 
}
于 2012-11-02T12:28:23.470 回答
1

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

这段代码:

 if (turn == true)
 {

 }

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

只会运行一次,“Board”创建时,“turn”状态改变时不会运行。

于 2012-11-02T12:11:33.613 回答