0

我正在尝试为 iPhone 创建一个新的 RPG,但是当我想到一种构建我的技能系统的方法时,我遇到了一个小问题。基本上,每一类角色都会有一套确定的技能,就像在经典角色扮演游戏中一样。但是,我真的不知道如何对它们进行编码。

有些技能会造成伤害,有些会治疗,有些会应用状态变化,等等。所以我想创建一个基本技能类,并使用“activate()”函数覆盖,然后为每种类型的技能创建一个该类的子类。像这样 :

@implementation BasicSkill
- (id) initFromName:(NSString*)_name
{
   int value = ...;
   int chanceOfEffect = ...;
   NSString *statusToChange = ...;
}

-(void) activate
{
//Do nothing
}
@end

@implementation DamageSkill : BasicSkill

-(void) activate
{
    int damageToDeal = value;
    //etc
}
@end

@implementation HealSkill : BasicSkill

-(void) activate
{
    int damageToHeal = value;
    //etc
}
@end

每个技能所需的每个变量都将存储在一个数据库中(我已经有了它的工作函数),但我担心它可能会为每种技能创建太多的子类,因为我不知道有多少类型将有...

我的另一个想法是只创建一个类,但每个技能都有自己的功能,存储在 SEL 中,并且 activate() 会调用它。(对不起,我真的不知道如何解释)

@implementation BasicSkill
- (id) initFromName:(NSString*)_name
{
   SEL action = NSSelectorFromString(@"Fireball");
   int value = ...;
   int chanceOfEffect = ...;
   NSString *statusToChange = ...;
}

-(void) activate
{
    [self performSelector:action];
}

-(void) fireball
{
    int damageToDeal = value;
    //etc...
}
@end

我不知道这两种模式是否都是好的做法,或者是否有其他方法可以做到这一点,但如果您知道另一种解决方案,我会很乐意阅读!

PS 每个玩家的统计数据(HP、Atk、Def ...)都存储在字典中,所以我可以毫无问题地操纵它们,但是我想从字符串中获取。

4

1 回答 1

3

我不是 RPG 游戏的专家(除了玩其中一些)。不过,我觉得你有点想多了。对于治疗和伤害技能,你甚至不必关心技能的效果是治疗伤害还是造成伤害。伤害会影响生命值。所以你可以说技能 X 做 +100 HP,技能 Y 做 -100 HP。

你可以对各种属性(例如速度,敏捷,魔法点)做这样的事情。

并且技能的效果可以同时作用于技能激活者和技能目标,可以是同一类但不同的实例(编程类,而不是角色类)。

所以,要回答你的问题,你可以用经典的方式,你从基本技能类中继承所有技能。如果他们做类似的事情,您可以将技能细分为您想要的任意多个级别。(和治疗等级 1 一样,治疗等级 2 是治疗等级的子类。)

或者,如果你有这么多技能,你可以将这些技能分散到一张能力表中。例如,我会创建这样的表:

Skill_ID, Skill_Name, HP_Target, MP_Target, Speed_Target, HP_Self, MP_Self, Speed_Self
       1,      Punch,   -50    ,    0     ,    -10      ,  0     ,   0    ,    0
       2,       Kick,  -100    ,    0     ,    -10      ,  0     ,   0    ,   -10  
       3,       Magic, -120    ,    0     ,      0      ,  0     ,  -25   ,    0
       4,       Heal,  +500    ,    0     ,      0      ,  0     ,  -25   ,   -10  

然后,您可以从该表中读取受技能影响的参数值,并将它们应用于目标和自身。这样,您可能只有少数几个技能类别。如果你有该技能的其他修饰符或副作用(如充电时间),你也可以将它们放在桌面上。

同样,我不是该领域的专家,但我希望它有所帮助。

于 2013-06-22T19:11:53.303 回答