我正在制作一个基于回合制Flash的RPG来练习OOP(谁没有:P)我对武器,物品以及所有Jazz都有很好的设置。虽然我正在考虑如何制作我的角色。
目前,我有一个player
和enemy
类,可以扩展battler
类。
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都可以。请帮我!提前谢谢。
答案 0 :(得分: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();
你可能拥有一个存在的所有玩家阵列,以及另一个阵列,当在战斗中使用时,只有当前派对/战斗中的玩家。这样你的敌人可以随机瞄准玩家,而且只能从目前正在战斗中的玩家那里瞄准。
答案 1 :(得分:2)
可能值得考虑使用实体系统,其中游戏中的每个项目都被视为可以单独管理的无关属性(位置,速度,位图/网格)的集合。这往往会使硬问题变得更容易(可扩展性,同步性,存储性)。