Objective c 通过发送“创建工厂类”;“类型”;
我正在做一个cocos2d游戏。它有几个类是从CCSprite派生出来的-敌人、投射物等。对于每个子类,它们需要进一步区分,例如enemy1、enemy2等。我可以创建一个类,然后创建它的子类,可以通过类似于[enemy1敌人]的方式创建,其中+(id)敌人创建一个敌人对象,然后定制它并返回它,但我要做的是告诉敌方类创建一个实例,然后给它我想要的属性(图像、生命点、可见等等),然后返回它。我想象这样一种方法Objective c 通过发送“创建工厂类”;“类型”;,objective-c,ios,class,cocos2d-iphone,Objective C,Ios,Class,Cocos2d Iphone,我正在做一个cocos2d游戏。它有几个类是从CCSprite派生出来的-敌人、投射物等。对于每个子类,它们需要进一步区分,例如enemy1、enemy2等。我可以创建一个类,然后创建它的子类,可以通过类似于[enemy1敌人]的方式创建,其中+(id)敌人创建一个敌人对象,然后定制它并返回它,但我要做的是告诉敌方类创建一个实例,然后给它我想要的属性(图像、生命点、可见等等),然后返回它。我想象这样一种方法 + (id)enemyWithType:(int)aType { Enemy *
+ (id)enemyWithType:(int)aType
{
Enemy *enemy = nil;
switch (aType) {
case 1:
// set up the first enemy type
[enemy initWithFile:@"enemy1.png"];
[enemy setVisible:YES];
[enemy setHitPoints:10];
break;
case 2:
// set up the second type
[enemy initWithFile:@"enemy2.png"];
[enemy setVisible:NO];
[enemy setHitPoints:5];
break;
default:
break;
}
我会通过打电话来调用它
[Enemy enemyWithType:1];
或者类似的。这样做对吗?我需要这个来适应所有的课程。实际上,我的播放器会有一个类似于projectletype
的属性,因此当我发射射弹时,我会向射弹类请求该类型的射弹
这样做对吗
基本上,是的。这是工厂方法模式。您还可以使用来自敌人的派生类,如僵尸类、龙类或类似的类。它使代码变得干净
init
实例?它似乎起作用了。既然我没有分配它,我拥有它吗?我应该添加一个自动释放吗?
我强烈建议你先读一读。我已经读过了——并不是说我完全理解其中的所有内容。苹果提供了很多好的例子来说明什么时候你拥有什么,什么时候你不拥有什么,但我看不到这一点。什么是敌人*敌人=零代码>实际做什么?它是alloc吗?
我猜这会生成一个自动释放的
对象,但我不确定。我继续并开始了一个新问题来处理这个问题。。。谢谢谢谢,@Kazuki-不过我并不完全理解这里的内存管理。敌方*敌方=无代码>为我分配内存,以便我以后可以init
实例?它似乎起作用了。既然我没有分配它,我拥有它吗?我应该添加一个自动释放吗?
我强烈建议你先读一读。我已经读过了——并不是说我完全理解其中的所有内容。苹果提供了很多好的例子来说明什么时候你拥有什么,什么时候你不拥有什么,但我看不到这一点。什么是敌人*敌人=零代码>实际做什么?它是alloc吗?
我猜这会生成一个自动释放的
对象,但我不确定。我继续并开始了一个新问题来处理这个问题。。。谢谢