2012-04-12 81 views
0

我正在做一個基於Flash的回合制RPG練習OOP(誰不:P)我與武器,物品,和所有的爵士隊一個不錯的設置。雖然我現在正在考慮如何製作我的角色。數據庫的多用戶角色扮演

目前我有一個playerenemy類擴展battler類。

 Battler 
    /\ 
    / \ 
Player Enemy 

player類有一些函數初始化播放器本身,添加圖形和所有。我party類呼籲player,傳遞paramater像這樣:player.setup(1),其中1爲playerID。

澄清這是我的球員僞代碼:

{ setup(player_id) 
    player = **??????player_id??????????** 
    name = player.name 
    character_name = player.character_name 
    character_index = player.character_index 
    weapon_id = player.returnWeapon 
/*--------- 
    armor1_id = player.returnArmor //increase for other body parts 
----------*/ 
    level = player.level 
} 

我的問題,或更多的問題是我如何將存儲的玩家數據。我需要有很多球員,因爲這是一場派對中有很多球員的比賽。

我將如何實際使用類似player.returnArmor?因爲當我這樣做時,它只是調用一個函數,並且它不會知道那個玩家是誰(我想我可以使用參數,如player.returnArmor(player),但我認爲有更好的方法來做到這一點。 ,但只是讓你不使用匯編語言作爲一個例子),C++,ActionScript 3中,Ruby和/或Java是罰款。請幫幫我!先謝謝你。

回答

2

在AS3中,你可以有靜態和實例功能。如果您撥打player.returnarmor(),您正在調用一個靜態函數。你想擁有一個實例函數,並將其稱爲你想要的裝甲值的玩家實例。

如果你有幾個(< 4)字符,你可以爲每個字符命名變量,但是多於3或4,你應該只有一個數組或其他容器。

var mainProtagonist:player; 
var spunkySidekick:player; 
var whiteMage:player; 
var players:Array = new Array(); 
players.push(mainProtagonist); 
players.push(spunkySidekick); 
players.push(whiteMage); 

然後獲得玩家的盔甲......我們會說你想要的容易發怒搭檔的盔甲:

players[1].returnarmor(); 
// or 
spunkySidekick.returnarmor(); 

你可能有存在所有球員的陣列,以及另一陣列,當在戰鬥中使用時,只與當前隊伍/戰鬥中的隊員一起使用。這樣,你的敵人就可以隨機瞄準玩家,並且只能從當前戰鬥中的玩家那裏瞄準。

2

這可能是值得使用實體的系統,其中,遊戲中的每個項被視爲可被分別管理無關的屬性(位置,速度,位圖/目)的集合考慮。這往往會使問題變得更加容易(可伸縮性,同步性,存儲)。

+0

耶實體是很酷,但根據您的要求的交易速度,你可能要考慮像表存儲,MongoDB的或RavenDB一個NoSQL的解決方案。很酷的事情是你可能也想看看MVC4新的API工具。他們使用易於使用的API支持您的播放器模型變得非常簡單。 – d4rklit3 2012-04-12 19:11:30

相關問題