「LearningCocos2D」という本で説明されているSpaceVikingプロジェクトを構築しています。問題が発生し始めたとき、Box2Dの第10章にたどり着きました。次に、cocos2Dをバージョン1からバージョン2.0にアップグレードしようとしました。非推奨を修正するために必要な変更を加えた後、コードは機能しなくなります。具体的には、ゲームオブジェクトまたは敵オブジェクトが作成されると、それらのinitメソッドが呼び出されなくなることがわかりました。たとえば、次の行が実行された場合:
RadarDish *radarDish = [[RadarDish alloc] initWithSpriteFrameName:@"radar_1.png"];
RadarDishinitメソッドは呼び出されません。次に、バージョン1とバージョン2の両方でinitWithSpriteFrameNameの実行を調べたところ、CCSprite.mが変更され、initメソッドが呼び出されなくなったことがわかりました。バージョン2のソースコードでは、initWithSpriteFrameNameメソッドはinitWithSpriteFrameを呼び出し、これはinitWithTextureを呼び出します。
-(id) initWithTexture:(CCTexture2D*)texture rect:(CGRect)rect rotated:(BOOL)rotated
{
if( (self = [super init]) ) {
したがって、RadarDishinitメソッドは呼び出されません。代わりに、CCNodeinitメソッドが呼び出されます。ただし、バージョン1では、initWithSpriteFrameNameは、次のコードを持つinitWithTextureを呼び出すinitWithSpriteFrameを呼び出します。
// IMPORTANT: [self init] and not [super init];
if( (self = [self init]) ){
[self setTexture:texture];
[self setTextureRect:rect];
}
これにより、RadarDishinitメソッドを呼び出すことができます。
これを解決するにはどうすればよいですか?cocos2d v2.0へのアップグレードをサポートするために本を変更する必要はないようですので、何か他のものが欠けているに違いないと思います。しかし、私が間違っている場合、このコードを変更してRadarDishinitメソッドを呼び出す方法は何でしょうか。