gpt4 book ai didi

ios - 创建自定义类型的 SKSpriteNode

转载 作者:行者123 更新时间:2023-12-01 18:18:01 24 4
gpt4 key购买 nike

我正在构建一个游戏,用户在开始时选择一种武器。
我有一个 SKSword 类,但我希望能够设置它的类型。
我想像下面这样实现它:

JBSword *weapon = [[JBSword alloc]initWithSwordType:HeavySword HandelType:Grip];

这样我就可以打电话了:
[weapon specialAttack];

它将执行特定于指定剑的 Action (例如HeavySword)

最佳答案

选项 1

您正在尝试做的是内置到 Objective-C 中。定义一个名为 specialAttack 的方法在您的 Sword类(class):

@interface Sword : SKNode

-(void) specialAttack;

@end

然后写一个空白实现:
@implementation Sword

-(void) specialAttack
{
return;
}

@end

现在,创建一个名为 HeavySword 的子类使用 Sword作为基类:
@interface HeavySword : Sword

-(void) specialAttack;

@end

...

@implementation HeavySword

-(void) specialAttack
{
// HeavySword code here
}

现在,只需创建一个类型为 HeavySword 的对象:
Sword *weapon = [[HeavySword alloc] init];

...

[weapon specialAttack];

我还建议使用您自己的前缀而不是 SK,这意味着一个类是 Sprite Kit 的一部分。

选项 2

使用 typedef enum定义一些常量:
typedef enum {
kHeavySwordType,
kLightSwordType,
kDualSwordType,
...
} SwordType;

typedef enum {
kWoodHandleType,
kGoldHandleType,
kDiamondHandleType,
...
} HandleType;

然后,您可以在界面中声明一些属性和一个 init 方法:
@interface Sword : SKNode

@property (nonatomic) SwordType type;
@property (nonatomic) HandleType handle;

-(id) initWithType:(SwordType) type handle:(HandleType) handle;

-(void) specialAttack;

@end

最后,在您的实现中:
@implementation Sword

-(id) initWithType:(SwordType) type handle:(HandleType) handle
{
if(self = [super init]) {
_type = type; // Use _type within int, and self.type everywhere else
_handle = handle; // Same thing here.
}
return self;
}

-(void) specialAttack
{
// Code goes here
// Use self.type and self.handle to access the sword and handle types.
}

关于ios - 创建自定义类型的 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19758952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com