3

我有一个名为 Projectile 的类(它继承自 Cocos2D CCSprite 类,但我怀疑这与问题有关)。它所包含的只是一个名为“type”的 int,我已将其制成一个属性。

弹丸.h:

@interface Projectile : CCSprite{

int type;

}

@property int type;

@end

弹丸.m:

#import "Projectile.h"

@implementation Projectile

@synthesize type;

@end

现在我要做的就是在我的游戏的主类中设置该属性,如下所示:

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{

Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];

newProjectile.position = spaceShip.position;

newProjectile.type = kLaser;               // defined earlier as #define kLaser 1


[objectsSpriteSheet addChild:newProjectile z:kProjectileZValue];

[projectiles addObject:newProjectile];

return YES;

}

每次我运行它时,它都会在 newProjectile.type = kLaser 行上崩溃:

-[CCSprite setType:]: unrecognized selector sent to instance 0x1ed82f10

出错似乎太简单了,Xcode 清楚地知道该属性,因为它会自动完成它并且不会给我一个错误说它不存在。

我在其他地方也有非常相似的代码,可以完美执行。

如果有人能对此有所了解,我将不胜感激,我相信我可以通过另一种方式解决它,但我想了解为什么如果可能的话这不起作用。

4

3 回答 3

4

嗯,是的,当你说的时候Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];,newProjectile 将是一个 CCSprite 类型的对象,它没有那个属性。

于 2012-12-20T12:18:03.300 回答
2

此行导致问题:

Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];

将其更改为:

Projectile *newProjectile = [Projectile spriteWithSpriteFrameName:@"Bullet.png"];

您正在创建实例CCSprite并将其分配给它的子类。CCSprite该类没有类型之类的属性。

于 2012-12-20T12:20:24.140 回答
1

我不确定,但试试这个:

Projectile *newProjectile = (Projectile *)[CCSprite spriteWithSpriteFrameName:@"Bullet.png"];
于 2012-12-20T12:19:36.720 回答