0

我从 rock.h 中的两个不同节点调用两个​​不同的对象

@interface Rock : CCnode {

int screenWidth;
int screenHeight;
float downWardSpeed;

}

@property (nonatomic, retain) CCSprite *falling_rock;

-(void) makeEnemyGoLower;
-(CGSize)contentSize_ofBugSprite;
-(CGRect)boundingBox_forRock;
end

在摇滚.m

-(CGRect)boundingBox_forRock
{
  return  falling_rock.boundingBox;
}

-(CGSize)contentSize_ofBugSprite
 {
 return falling_rock.contentSize;
}

-(void) runEnemyAnimationSequence:(ccTime) delta {

self.position = ccp(self.position.x, self.position.y - downWardSpeed  );

}

同样对于玩家类也是如此。现在我使用ccnode在主游戏类中调用,但它们在NSLOG中的位置不正确。所以我无法检查碰撞。

请帮忙,我犯了什么错误?

4

2 回答 2

0

如果我理解正确,您需要获取 Rock 对象的falling_rock 属性位置。

而不是这个:

-(void) runEnemyAnimationSequence:(ccTime) delta {

self.position = ccp(self.position.x, self.position.y - downWardSpeed  );

 }

尝试这个:

-(void) runEnemyAnimationSequence:(ccTime) delta {

falling_rock.position = ccp(falling_rock.position.x, falling_rock.position.y - downWardSpeed  );

 }

现在在您的主游戏类(GameController)中,您可以获得正确的位置。做这样的事情:在你的 .h 文件中

Rock *myRock;

并在您的 .m 文件中获取精灵位置

CGPoint rockCurrentPosition = ccp(myRock.falling_rock.position.x, myRock.falling_rock.position.y);
于 2013-08-14T13:51:56.630 回答
0

我不确定语法是否正确,因为我使用 cocos2d-x,但我相信问题是两个边界框都必须在世界空间中。您可以使用 convertToWorldSpace 方法将您的位置从本地空间获取到世界空间。

应该看起来像这样:

-(CGRect)boundingBox_forRock
{
    CGPoint worldPosition = convertToWorldSpace(getPosition());
    return CGRectMake(worldPosition.x, worldPosition.y, getContentSize().width, getContentSize().height);
}
于 2013-08-14T13:35:21.303 回答