0

我正在制作一个基于 Flash 回合制的 RPG 来练习 OOP(谁没有:P)我在武器、物品和所有爵士乐方面都有很好的设置。虽然我目前正在考虑如何制作我的角色。

目前我有一个扩展类的playerand类。enemybattler

     Battler
      /  \
     /    \
 Player  Enemy

我的player课程有一些函数可以初始化播放器本身,添加图形等等。我的party班级调用player,传递一个像这样的参数: 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 都可以。请帮我!先感谢您。

4

2 回答 2

2

使用实体系统可能值得考虑,其中游戏中的每个项目都被视为可以单独管理的不相关属性(位置、速度、位图/网格)的集合。这往往会使难题变得更容易(可扩展性、同步、存储)。

于 2012-04-12T16:41:28.920 回答
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();

在战斗中使用时,您可能有一个现有所有玩家的数组,以及另一个数组,其中只有当前队伍/战斗中的玩家。这样你的敌人就可以随机瞄准玩家,而且只能来自当前正在战斗的玩家。

于 2012-04-12T15:30:44.217 回答