1

Cocos2D (v2.0) でのゲームに問題があります。2 つの問題が発生します (コード部分でコメントしました)。Bullet.m ファイルは次のとおりです。

-(BOOL)checkCollisions:(CGRect)r
{
BOOL x = NO;

if(CGRectIntersectsRect([theGame myRect:self.mySprite],r)) //FIRST ISSUE - Sending 'id' to parameter of incompatible type 'CGRect' (aka 'struct CGRect'); 
                                                           //SECOND ISSUE - Instance method'-myRect:' not found (return type defaults to 'id') 
{
    x=YES;
    [self reset];
}
return x;
}

そして、このファイルの後半:

-(void)update
{
switch (self.whoFired)
{
    case 1:
        [self.mySprite setPosition:ccp(self.mySprite.position.x,self.mySprite.position.y + self.firingSpeed)];

        for(Enemy * s in theGame.enemies)
        {
            if(ccpDistance(self.mySprite.position, s.mySprite.position)<30)
            {
              if([self checkCollisions:[theGame myRect:s.mySprite]]) //FIRST ISSUE - Sending 'id' to parameter of incompatible type 'CGRect' (aka 'struct CGRect')
                                                                     //SECOND ISSUE - Instance method '-damage' not found (return type defaults to 'id')
                {
                    [s damage];
                }
            }
        }
        break;
...

したがって、2 つのエラーは同じです: 'id' を互換性のない型 'CGRect' (別名 'struct CGRect') のパラメーターに渡します。他の 2 つは Damage と MyRect 関数に関するものです。もちろん、それらは存在します (GameScene.m ファイルと Enemy.m ファイルにあり、すべてが .h ファイルで接続されており、Damae 関数と MyRect 関数でエラーは発生しません):

-(CGRect)myRect:(CCSprite *)sp
{
CGRect rect = CGRectMake(sp.position.x-sp.textureRect.size.width/2, sp.position.y-sp.textureRect.size.height/2, sp.textureRect.size.width, sp.textureRect.size.height);
return rect;
}


-(void)damage
{
self.hp--;
[self.mySprite runAction:[CCSequence actions:
                          [CCTintTo actionWithDuration:0.5 red:255 green:0 blue:0],
                          [CCTintTo actionWithDuration:0.5 red:255 green:255 blue:255],nil]];
if(hp<=0)
{
    [self destroy];
}
}

何が間違っている可能性がありますか?コンパイラが myRect を認識できず、関数に損傷を与えるのはなぜですか?

4

1 に答える 1

1

CCSprite のデフォルトの boundingBox を使用できないのはなぜですか?

if(CGRectIntersectsRect([self.mySprite boundingBox],r))
于 2013-03-09T08:26:48.560 に答える