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