我有一个名为Projectile的类(它继承自Cocos2D CCSprite类,但我怀疑这与问题有关)。它包含的所有内容都是一个名为'type'的int,我将其作为属性。
Projectile.h:
@interface Projectile : CCSprite{
int type;
}
@property int type;
@end
Projectile.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清楚地知道该属性,因为它自动填充它并且不会给我一个错误,说它不存在。
我在其他地方也有非常相似的代码可以完美执行。
如果有人可以对此有所了解,我会非常感激,我相信我可以用另一种方式解决问题,但我想了解为什么如果可能的话这不起作用。
答案 0 :(得分:4)
是的,当你说Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];
时,newProjectile将是CCSprite类型的对象,它没有该属性。
答案 1 :(得分:2)
此行导致问题:
Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];
将其更改为:
Projectile *newProjectile = [Projectile spriteWithSpriteFrameName:@"Bullet.png"];
您正在创建CCSprite
的实例并将其分配给它的子类。 CCSprite
类没有类似的属性。
答案 2 :(得分:1)
我不确定,只是试试这个:
Projectile *newProjectile = (Projectile *)[CCSprite spriteWithSpriteFrameName:@"Bullet.png"];