我相當新的AS3,所以請原諒我,如果我的問題看起來很愚蠢。如何在類中設置其值時更新類中的變量?
讓我澄清一下我特別想要的:玩家繼續執行任務,當他在途中捕捉到一些物體時,他可以獲得積分,例如物體A給出一個點,物體B給出兩個點,物體C給予獎勵積分等......如果玩家在途中遇到一些障礙,他就無法完成任務,他必須重放比賽直到他到達目的地(關卡結束)。
所以我想要的是如何在玩家遇到障礙物之前存儲玩家獲得的積分,並且每次玩家必須重放遊戲直到達到遊戲級別結束時積累的積分所以玩家獲得的總積分將是所有積分的總和,包括他在實際達到遊戲結束前獲得的積分。
My Class Player是屬於框架WCK的類Box的子類。有沒有辦法讓我正確地實施依賴注入以將變量傳遞給另一個類來存儲它們?
非常感謝您的幫助!
ADDED:下面是我基於Amy的例子實施的一些調整,以適應我的遊戲設置。它仍然不起作用,因爲當我嘗試在Class Player中檢索它時,變量_totalEarnedPoints的值未通過EventDispatcher更新Class PlayerClient中的變量_earnedPoints以累積所有點。我不確定我做錯了什麼或錯過了其他什麼?任何人都可以請指出並告訴我如何從Class PlayerClient取回變量_totalEarnedPoints?
級的球員:
package
{
public class Player extends Box
{
private var contacts:ContactList;
private var myLoader:SWFLoader;
private var mcTemp:MovieClip;
private var bonusPoints:int = 0;
private var onePoint:int = 0;
private var twoPoints:int = 0;
private var objectACount:int = 0;
private var objectBCount:int = 0;
private var objectCCount:int = 0;
private var replayCount:int = 0;
protected var _earnedPoints:int;
private var myPlayerClient:PlayerClient = new PlayerClient();
}
public function Player()
{
super();
}
public override function create():void
{
super.create();
listenWhileVisible(this, ContactEvent.BEGIN_CONTACT, handleContact);
contacts = new ContactList();
contacts.listenTo(this);
}
public function handleContact(e:ContactEvent):void
{
//Detect collison with other static objects
var myObjectA:objectA = e.other.m_userData as objectA;
var myObjectB:objectB = e.other.m_userData as objectB;
var myObjectC:objectC = e.other.m_userData as objectC;
var myObstacle:obstacle = e.other.m_userData as obstacle;
if(myObjectC)
{
objectCCount++;
myObjectC.remove();
if (objectCCount > 0)
{
bonusPoints = bonusPoints + 5;
}
}
else if(myObjectA)
{
objectACount++;
myObjectA.remove();
if (objectACount > 0)
{
onePoint = onePoint + 1;
}
}
else if(myObjectB)
{
objectBCount++;
myObjectB.remove();
if (objectBCount > 0)
{
twoPoints = twoPoints + 2;
}
}
else if(myObstacle)
{
var myEarnedPoints:int = myPlayerClient.totalEarnedPoints;
_earnedPoints = bonusPoints + onePoint + twoPoints + myEarnedPoints;
dispatchEvent(new Event("EarnedPointChanged"));
myLoader = new SWFLoader("myMovie.swf",{container:swfHolder,alpha:0,onComplete:completeHandler});
//adds the loader content to the display list before raw content is loaded.
addChild(myLoader.content);
stop();
myLoader.load();
function completeHandler(e:LoaderEvent):void
{
replayCount++;
if (replayCount <= 1)
{
TweenMax.to(e.target.content, 1, {alpha:1});
mcTemp = myLoader.rawContent;
mcTemp.gotoAndPlay(1);
}
else if (replayCount >= 1)
{
mcTemp = myLoader.rawContent.stop();
myLoader.unload();
mcTemp = null;
}
}
myObstacle.remove();
}
}
public function get earnedPoints():int
{
return _earnedPoints;
}
}
CLASS PlayerClient
package
{
public dynamic class PlayerClient extends MovieClip
{
private var _totalEarnedPoints:int;
protected var _player:Player;
public function get player():Player
{
return _player;
}
public function set player(value:Player):void
{
if (value != _player)
{
if (_player)
{
//[prevent memory leaks][2]
_player.removeEventListener("EarnedPointChanged", updatePlayerScore);
//don't need this if we don't have a player
removeEventListener(Event.REMOVED_FROM_STAGE, cleanUp);
}
_player = value;
if (_player)
{
//listen for changes
_player.addEventListener("EarnedPointChanged", updatePlayerScore);
//we added a listener to the new player, need to make sure is removed
addEventListener(Event.REMOVED_FROM_STAGE, cleanUp);
}
}
}
protected function cleanUp(e:Event):void
{
_player.removeEventListener("EarnedPointChanged", updatePlayerScore);
}
protected function updatePlayerScore(e:Event):void
{
_totalEarnedPoints = _player.earnedPoints;
}
public function get totalEarnedPoints():int
{
return _totalEarnedPoints;
}
}
}
我知道我的代碼出了問題,因爲我是新的AS3,所以請耐心等待......我對您的代碼有疑問,我不知道是否可以在我的案例中應用:由於我基於[WCK](http://www.sideroller.com/wck/)的框架構建了我的遊戲,類Player是類Box的子類,它是如何在框架WCK中構建的。我真的不知道如何使類Player成爲EventDispatcher的子類,就像您在代碼中執行的一樣,以分派事件。我可以導入flash.Event。*而不是實現你的代碼?非常感激! – Teresa
我修改了上面的問題,以便您可以清楚地看到我想要的內容。我確實想像你那樣實施依賴注入來以一種乾淨的方式正確地工作。所以我非常感謝你幫助我解決問題。 – Teresa
如果您走過依賴關係樹,則Box最終是MovieClip的一個子類,它是一個EventDispatcher。 –