Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Cocos2d iphone:更改两个精灵重叠部分的颜色_Ios_Cocos2d Iphone - Fatal编程技术网

Ios Cocos2d iphone:更改两个精灵重叠部分的颜色

Ios Cocos2d iphone:更改两个精灵重叠部分的颜色,ios,cocos2d-iphone,Ios,Cocos2d Iphone,我需要用户能够拖放几个图片(精灵)。但是,我不希望它们相互重叠。我计划在“OnTouched”方法中添加一些内容,但不知道如何做 首选方法是仅将两个精灵的重叠部分更改为红色。但是,如果不可能,我们也可以将两个精灵都更改为红色 我试着用雪碧。但是它把整个雪碧变成了红色而不是有色的 顺便说一句,这两个精灵的大小都是规则的。简单的方法是你可以检查两个精灵的碰撞 if( CGRectIntersectsRect( [sprite1 boundingBox], [sprite2 boundingBox]

我需要用户能够拖放几个图片(精灵)。但是,我不希望它们相互重叠。我计划在“OnTouched”方法中添加一些内容,但不知道如何做

首选方法是仅将两个精灵的重叠部分更改为红色。但是,如果不可能,我们也可以将两个精灵都更改为红色

我试着用雪碧。但是它把整个雪碧变成了红色而不是有色的


顺便说一句,这两个精灵的大小都是规则的。

简单的方法是你可以检查两个精灵的碰撞

if( CGRectIntersectsRect( [sprite1 boundingBox], [sprite2 boundingBox] ) ) {
   // Handle overlap
}
在您的案例中,您可以使用以下逻辑:

我也是从你那里得到的

是的,它应该……尽管它看起来有点奇怪,这取决于你的精灵的形状。您还可以尝试测试距离,如果精灵更圆,则测试效果更好:

//这就是精灵离游戏有多近,游戏才会认为他们在碰撞
//(或重叠)。如果希望它们更靠近,请使用小于0.5的值
//为了发生碰撞。
浮动碰撞距离=(sprite1.contentSize.width*0.5)+(sprite2.contentSize.width*0.5);
//这就是精灵的实际距离
浮动actualDistance=ccpDistance(sprite1.position,sprite2.position);
//检查它们是否足够近

if(首先是ActualInstance,谢谢。我曾尝试使用CGRectIntersectsRect,它可以检测碰撞。但在那之后,我尝试使用sprite.color=ccRED,整个图片变为红色,而我最初的注意力只是使它变红(如高亮显示)有什么方法可以做到这一点吗?我不想每次都更改精灵的图片(变为红色),因为我认为它可能不会节省内存。谢谢。
// This is how close the sprites have to be for the game to think that they're colliding
// (or overlapping). Use a smaller value than 0.5 if you want them to be closer together
// in order for there to be a collision.
float distanceForCollision = (sprite1.contentSize.width * 0.5) + (sprite2.contentSize.width * 0.5);

// This is how close the sprites actually are
float actualDistance = ccpDistance( sprite1.position, sprite2.position );

// Check if they're close enough
if( actualDistance <= distanceForCollision ) {
// Handle overlap
}