我目前正在写一个带有多个矩形(比如说30)的游戏,如果用户点击四边中的某一边需要采取某个动作。麻烦的是每张卡片都会有相同的一面执行此操作。例如,对于矩形1,将执行此操作的一侧将是左侧,而矩形3的一侧将是顶侧。我的猜测是在这里需要一个像素碰撞检测。你们有什么感想?还有一个关于使用cocos2s进行像素碰撞的好例子吗?cocos2d像素碰撞检测
回答
您可以简单地使用下面的代码
if (CGRectIntersectsRect(Rect1, Rect2))
{
//Your code ...
}
使用上述CGRectIntersectsRect你可以一个矩形区域内检测到冲突的像素。
感谢您的Dhaval,这里是我写的代码,我希望做类似的任何人的未来参考,它可以进一步微调,如果我找出一个更准确的方式做到这一点,我会相应地更新此线程
-(void)touchWhichSide:(CCSprite *)sprite1 collidingSprite:(CCSprite *)sprite2
{
BOOL retValue = NO;
CGPoint spriteCentre1 = sprite1.position;
CGPoint spriteCentre2 = sprite2.position;
NSLog(@"X %f",spriteCentre2.x - spriteCentre1.x);
NSLog(@"Y %f",spriteCentre1.y - spriteCentre2.y);
float xAxisDiff = spriteCentre1.x - spriteCentre2.x;
float yAxisDiff = spriteCentre1.y - spriteCentre2.y;
NSLog(@"x axis %f",xAxisDiff);
NSLog(@"y axis %f",yAxisDiff);
if((spriteCentre1.x < spriteCentre2.x) && (xAxisDiff < yAxisDiff))
{
NSLog(@"right touch");
}
else if((spriteCentre2.x < spriteCentre1.x) && (xAxisDiff > yAxisDiff))
{
NSLog(@"left touch");
}
else if((spriteCentre2.y < spriteCentre1.y) && (yAxisDiff > xAxisDiff))
{
NSLog(@"Bottom touch");
}
else if((spriteCentre1.y < spriteCentre2.y) && (yAxisDiff < xAxisDiff))
{
NSLog(@"Top touch");
}
}
啊是的......但如果精灵旋转了呢! – 2012-03-26 15:15:54
是的好点,解决方案有点混乱,但它的工作,这就是我所做的:我分类CCSprite并创建一个新的属性称为状态保存当前位置,如果旋转相对于该旋转。根据触摸哪一面,我将使用该信息来确定矩形的哪一面被触摸。 – godzilla 2012-03-26 20:43:54
是好点了,该解决方案是一个有点混乱,但它的工作,这是我做的:我的子类CCSprite和创建节约当前位置好像相对于该转动而转动名为状态的新属性。根据触摸哪一面,我将使用该信息来确定矩形的哪一面被触摸。 -
if((spriteCentre1.x < spriteCentre2.x) && (xAxisDiff < yAxisDiff))
{
[HelloWorldLayer whichSideTouched:sprite1 sideTouched:kStateRightPlus touchingSprite:sprite2];
}
+(int)的whichSideTouched:(SpriteCard *)精灵sideTouched:(int)的触摸touchingSprite:(SpriteCard *)sprite2 {
开关(sprite.state){ 情况kStateUpPlus: kStateUpMinus: if(touched == kStateDownPlus) { NSLog(@“touch up”); [sprite setTop:sprite2]; retValue = kStateUpPlus; (触摸== kStateRightPlus) { } NSLog(@“touch left”); [sprite setRight:sprite2]; retValue = kStateLeftPlus;
} }
- 1. Cocos2D碰撞检测
- 2. 像素碰撞检测?
- 3. Box2d Cocos2d ContactListener检测碰撞
- 4. cocos2d sprite碰撞检测
- 5. 碰撞检测Objective-C(cocos2d)
- 6. cocos2d中的碰撞检测
- 7. Cocos2d/Box2d CCRibbon碰撞检测
- 8. Opengl:像素重叠(碰撞检测)
- 9. 简单的碰撞检测在cocos2d box2d..nothing发生在碰撞
- 10. cocos2d精灵碰撞检测包围盒
- 11. cocos2d旋转精灵碰撞检测
- 12. Cocos2d游戏中的碰撞检测?
- 13. Cocos2d - 旋转Sprite的碰撞检测
- 14. 多图像碰撞检测
- 15. 碰撞检测
- 16. 像素逐像素碰撞检测弹球
- 17. 碰撞检测不检测
- 18. 碰撞检测和碰撞响应
- 19. Javascript 2D图像像素碰撞检查
- 20. GameQuery碰撞检测
- 21. 检测墙碰撞
- 22. 检测碰撞JavaScript
- 23. Java碰撞检测
- 24. XNA碰撞检测
- 25. 碰撞检测Javascript
- 26. 碰撞检测Swift
- 27. sprite碰撞cocos2d。每帧碰撞
- 28. 碰撞检测中体素的世界
- 29. SpriteKit碰撞检测与透明图像
- 30. 旋转图像上的碰撞检测
我有,那部分工作正常,但现在我需要确定矩形的哪一侧是相交的,即左,右底部等,什么是最好的方法来实现这一目标? – godzilla 2012-03-25 13:11:52
取两个矩形的中心点,并查看它们是相对于彼此的位置(即x1大于x2?如果是,则rect1在rect2的右边)。 – LearnCocos2D 2012-03-25 19:16:55