不同类别的两个物体的碰撞检测

Posted

技术标签:

【中文标题】不同类别的两个物体的碰撞检测【英文标题】:collision detection of two objects in different class 【发布时间】:2013-07-22 07:09:54 【问题描述】:

我从两个不同的节点调用两个​​不同的对象 在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 中的位置不正确。所以我无法检查碰撞。

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

【问题讨论】:

您能否展示一下您是如何使用 CCNode 在主游戏中添加 Rock 和 player 的? rock = [摇滚节点]; [self addChild:rock z:55];这边 好的,对于碰撞检测,您必须使用各自的类对象制作两个 CGRect,并且您必须检查这两个 CGRects 之间的 CGRectIntersectRect。如果,它给出的结果比有碰撞检测,如果它给出false 比没有碰撞检测。 是的,我这样做了,但他们没有正确碰撞。所以我记录了他们的 CGrect 位置,发现位置显示错误。 【参考方案1】:

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

应该是这样的:

-(CGRect)boundingBox_forRock

    CGPoint worldPosition = convertToWorldSpace(getPosition());
    return CGRectMake(worldPosition.x, worldPosition.y, getContentSize().width, getContentSize().height);

【讨论】:

【参考方案2】:

如果我理解正确,你需要获取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);

【讨论】:

以上是关于不同类别的两个物体的碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章

四叉树优化碰撞检测

unity 怎么判断碰撞的物体

unity3d碰撞器检测碰撞跟触发器检测碰撞哪个好些

深入理解Unity的碰撞检测机制

检测两个物体之间的碰撞发生多次转化

未检测到 spritekit 物理碰撞