我目前正在编写一个带有多个矩形(例如30个)的游戏,如果用户点击四个方面中的一个,则需要采取某些操作。麻烦是每张卡都有相同的一面将执行此操作。例如,对于矩形1,将执行此操作的一侧将是左侧,但是矩形3侧面将是顶侧。我的猜测是这里需要像素碰撞检测。你们有什么感想?还有一个关于使用cocos2s的像素碰撞的好例子吗?
答案 0 :(得分:2)
您只需使用以下代码
即可if (CGRectIntersectsRect(Rect1, Rect2))
{
//Your code ...
}
使用上面的 CGRectIntersectsRect ,您可以检测矩形区域内的碰撞像素。
答案 1 :(得分:0)
感谢Dhaval,这里的代码我为任何希望做类似的人写了一个未来的参考,它可以进一步微调,如果我想出一个更准确的方法这样做我将相应地更新这个线程< / p>
-(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");
}
}
答案 2 :(得分:0)
是的好点,解决方案有点乱,但它有效,这就是我所做的:我将CCSprite子类化并创建了一个名为state的新属性,如果相对于该旋转旋转,则保存当前位置。根据触摸的侧面,我将使用该信息来确定矩形的哪一侧被触摸。 -
if((spriteCentre1.x < spriteCentre2.x) && (xAxisDiff < yAxisDiff))
{
[HelloWorldLayer whichSideTouched:sprite1 sideTouched:kStateRightPlus touchingSprite:sprite2];
}
+(int)whichSideTouched:(SpriteCard *)sprite sideTouched:(int)触摸touchSprite:(SpriteCard *)sprite2 {
switch(sprite.state){
case kStateUpPlus:
case kStateUpMinus:
if(touch == kStateDownPlus)
{
NSLog(@“搞砸了”);
[sprite setTop:sprite2];
retValue = kStateUpPlus;
}
否则如果(触摸== kStateRightPlus)
{
NSLog(@“向左触摸”);
[sprite setRight:sprite2];
retValue = kStateLeftPlus;
}
}