[objective-c]touch撞检测只发生在屏幕顶部的

标签: ios Objective-C
发布时间: 2016/10/4 3:52:59
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我要去做很简单的游戏,像从上面落下的Sprite和我不得不跟另一个Sprite,如果我不将Sprite出门的屏幕和删除、 那部分是好的我还添加了touch撞检测,主要问题是屏幕不touch撞的touch撞仅发生上部这边底部屏幕的一侧为什么是这种情况发生,请帮助,(我是新︰ S),这里是完整的代码

在我.h'then.m

{
CCSprite *right;
CCSprite *left;


NSMutableArray *_left;    
}




-(void)ringcreate:(ccTime)dt
{

CGSize winsize = [[CCDirector sharedDirector] winSize];

int minX = left.contentSize.width / 2;
int maxX = winsize.width - left.contentSize.width/2;
int rangeX = maxX - minX;
int actualX = (arc4random() % rangeX) + minX;



left = [CCSprite spriteWithFile:@"2.png"];
left.position = ccp(actualX,winsize.height);
[self addChild:left];




id move3 = [CCMoveTo actionWithDuration:5 position:ccp(winsize.width/2,0)];


[left runAction:move3];

}




-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if( (self=[super init]) ) {

    self.touchEnabled = YES;

    right = [CCSprite spriteWithFile:@"1.png"];
    right.position = ccp(0,0);
    [self addChild:right]; 


    [self schedule:@selector(ringcreate:)  interval:2];
    [self schedule:@selector(update:)];

}
return self;
  }


  -(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {
 UITouch *touch =[touches anyObject];
 CGPoint location =[touch locationInView:[touch view]];
 location = [[CCDirector sharedDirector] convertToGL:location];




 id move = [CCMoveTo actionWithDuration:1 position:ccp(location.x,location.y)];

 [right runAction:move];



 }



 -(void) update:(ccTime)dt
 {
   if (CGRectIntersectsRect(right.boundingBox, left.boundingBox)) {

    CCLOG(@"collison hoyse");



    id move1 = [CCScaleTo actionWithDuration:0.4 scale:0.3];
    left.visible = NO;
    [left runAction:move1];



    }
  }

解决方法 1:

我解决了问题,只需要添加数组并更新他们赢得这一方法,

-(void) update:(ccTime)dt
{
NSMutableArray *crabToUpdate = [[NSMutableArray alloc] init];
for (CCSprite *crab in crabarray) {

    NSMutableArray *ring_to_delete = [[NSMutableArray alloc] init];
    for (ring1 in ringarray) {

            if (CGRectIntersectsRect(crab.boundingBox, ring1.boundingBox)) {                  
                [ring_to_delete addObject:ring1];                    
            }       
    }  

        for (CCSprite *ring1 in ring_to_delete) { 
            [ringarray removeObject:ring1];
            [self removeChild:ring1 cleanup:YES];
        }
    if (ring_to_delete.count >0) {
        [crabToUpdate addObject:crab];
    }

        [ring_to_delete release];


 }
}
赞助商