2

私は「LearnCocos2D」をフォローしており、第4章で次のディレクティブに遭遇しました。

そして、GameLayer initメソッドで、scheduleUpdateの直後に、次に説明するinitSpidersメソッドへの呼び出しを追加します。

-(id) init {
if ((self=[super init])) {
...
       [self scheduleUpdate];
       [self initSpiders];
   }
   return self;
}

ARCエラーメッセージが表示されます:「GameLayer」の表示された@interfaceがセレクター「initSpiders」を宣言していません

次の行にも同じメッセージが表示されます:self resetSpiders

私は何が欠けていますか?その時点まで、すべてが構築され、実行されます。

4

2 に答える 2

0

あなたの間違いは、本の次の部分も読んでいないことのようです。次のセクションを完了すると、このような警告なしでコードをコンパイルできるようになります。

本のそのセクションのより完全な抜粋は次のとおりです。

そして、GameSceneメソッドで、次に説明するメソッドへの呼び出しを直後にinit追加します。initSpidersscheduleUpdate:

-(id) init  { 
    if ((self = [super init])) 
    { 
        … 96  CHAPTER 4:  Your First Game 
        [self scheduleUpdate]; 
        [self initSpiders]; 
    } 
    return self;  
}   

その後、クモのスプライトを作成するリスト 4–8 のメソッドから始めて、かなりの量のコードがGameSceneクラスに 追加されます。initSpiders

リスト 4–8。 簡単にアクセスできるように、スパイダー スプライトを初期化して CCArray に追加

-(void) initSpiders 
{ 
    CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
    // using a temporary spider sprite is the easiest way to get the image's size 
    CCSprite* tempSpider = [CCSprite spriteWithFile:@"spider.png"]; 
    float imageWidth = [tempSpider texture].contentSize.width; 
    // Use as many spiders as can fit next to each other over the whole screen width. 
    int numSpiders = screenSize.width / imageWidth; 
    // Initialize the spiders array using alloc. 
    spiders = [[CCArray alloc] initWithCapacity:numSpiders]; 
    for (int i = 0; i < numSpiders; i++) 
    { 
        CCSprite* spider = [CCSprite spriteWithFile:@"spider.png"]; 
        [self addChild:spider z:0 tag:2]; 
                 
        // Also add the spider to the spiders array. 
        [spiders addObject:spider]; 
    } 
    // call the method to reposition all spiders 
    [self resetSpiders]; 
}
于 2013-01-08T15:31:06.707 に答える
0

initSpidersこの問題は、およびresetSpidersがクラス インターフェイスで宣言されておらず、.mファイル内で使用されている場所の後に定義されているという事実に由来します。

それらが完全に欠落していない場合は、次の 2 つの方法のいずれかでこれを修正できます。

  1. initSpidersandメソッドの定義をresetSpidersメソッドの上に移動するinitと、エラーが消えます。

  2. @interfaceクラスの に両方のメソッドの宣言を追加します。

(両方やればうまくいきます)

コードをチェックして、これらのメソッドの実装が利用可能かどうかを確認してください。

于 2013-01-08T15:16:15.477 に答える