簡體   English   中英

AS3:if-function不會在另一個類中偵聽布爾值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM