屏幕左侧无法正常工作

时间:2013-08-31 18:29:41

标签: ios touch cgrect

我正在尝试创建一个应用程序,其中错误在屏幕上运行并被压扁。我虽然遇到了问题。我有代码,当我触摸屏幕上运行的错误时,它会消失。虽然,这只适用于右侧。这是我摆脱bug的代码。

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

    if (CGRectContainsPoint(bug.boundingBox, touchLocation)) {
        [self removeChild:bug cleanup:YES];


    }

}

然后,这是我在屏幕右侧产生错误的代码

- (void) addBug {

bug = [CCSprite spriteWithFile:@"bug.jpg"];

CGSize size = [[CCDirector sharedDirector] winSize];
int minY = bug.contentSize.height /2;
int maxY = size.height - bug.contentSize.height /2;
int rangeY = maxY - minY;
int actualY = (arc4random() % rangeY) + minY;

bug.position = ccp(size.width + bug.contentSize.width/2, actualY);
[self addChild:bug];

int minSpeed = 2.0;
int maxSpeed = 4.0;
int rangeSpeed = maxSpeed - minSpeed;
int actualDuration = (arc4random() % rangeSpeed) + minSpeed;


actionMove = [CCMoveTo actionWithDuration:actualDuration
                                            position:ccp(-bug.contentSize.width/2, actualY)];
actionMoveDone = [CCCallBlockN actionWithBlock:^(CCNode *node) {
    [node removeFromParentAndCleanup:YES];
}];
[bug runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];

}

-(void)gameLogic:(ccTime)dt {
    [self addBug];
}

在init中,我有

    [self setTouchEnabled:YES];

    [self schedule:@selector(gameLogic:) interval:1.0];

如果重要的话,我也有背景。我还测试了日志,如果触摸了错误但未在屏幕左侧删除,当我点击模拟器中的错误时,没有记录任何内容,但是当我点击它们在屏幕的右侧时,它已成功记录。非常感谢您的帮助。

*编辑,我调整了gameLogic的间隔:当屏幕上只有一个错误时,左侧工作。我应该如何调整我的代码以使其工作,以便一次可以在屏幕上出现多个错误,我仍然可以将它们全部删除?我猜,我正在使用的代码,为最新的bug创建一个边界框并删除所有其他边界框。任何额外的帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:0)

您在每个gameLogic:调用中添加了错误,但您只保留指向最后创建的指针,这会导致ccTouchesBegan:withEvent:中单个指针的冲突检查。将每个新数据添加到数组或适合您其他需要的任何数据结构,并检查其中的所有对象。