3

私は Projectile というクラスを持っています (これは Cocos2D CCSprite クラスから継承されていますが、それが問題に関連しているとは思えません)。含まれているのは、「type」と呼ばれる int だけで、これをプロパティにしました。

Projectile.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サブクラスに割り当てています。クラスには typeのCCSpriteようなプロパティはありません。

于 2012-12-20T12:20:24.140 に答える
1

よくわかりませんが、これを試してください:

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