处理游戏,其中板块将从上到下落下。一些板块也会在地面上“弹跳”,然后再次开始向上移动。这导致下降板与“上升板”碰撞的情况。
我的问题?我不知道如何发现这次碰撞。
由于所有的牌都来自同一个类,我无法写
if(CGRectIntersectsRect([self boundingBox], [self boudingBox]))
因为这句话永远都是真的。
我使用for循环创建板:
for(i=0; i<9; i++){
Plate *plate = [Plate initPlate];
}
然后在整个游戏中重复使用这些牌照。
关于如何检测两个板块之间碰撞的任何想法或解决方法?任何建议都将不胜感激。
的问候。
答案 0 :(得分:1)
你需要有一个管理(例如使用NSMutableArray)板块的类,而不是在Plate类上检查碰撞,而是在这个新类上进行。
假设你的数组是:
NSMuttableArray *plateSet
你可以这样做:
for (Plate *bouncingPlate in plateSet)
{
if ([bouncingPlate bouncing])
{
for (Plate *fallingPlate in plateSet)
{
if (![fallingPlate bouncing])
{
/* Check for collision here between fallingPlate and bouncingPlate */
}
}
}
}
或者,更优雅:
for (Plate *bouncingPlate in plateSet)
{
if (![bouncingPlate bouncing])
{
continue;
}
for (Plate *fallingPlate in plateSet)
{
if ([fallingPlate bouncing])
{
continue;
}
/* Check for collision here between fallingPlate and bouncingPlate */
}
}
答案 1 :(得分:0)
是的...您需要将它们添加到NSMutableArray
,然后只需使用ccpDistance
来检查碰撞
类似的东西:
for (int i=0;i<8,i++){
for (int j=i+1,j<9,j++){
if(ccpDistance([[plates objectAtIndex:i]position],[[plates objectAtIndex:j]position])<plateRadius*2) {
//collision detected
}}}
当然,如果盘子是圆圈,这是有效的
正方形使用CGRectIntersectsRect
:
for (int i=0;i<8,i++){
for (int j=i+1,j<9,j++){
if([plates objectAtIndex:i].visible && [plates objectAtIndex:j].visible &&(CGRectIntersectsRect([[plates objectAtIndex:i]boundingBox],[[plates objectAtIndex:j]boundingBox])) {
//collision detected
}}}