1

我正在尝试制作一个错误在屏幕上运行并被压扁的应用程序。我有一个问题。我有代码,所以当我触摸屏幕上运行的错误时,它会消失。不过,这只适用于右侧。这是我摆脱错误的代码。

-(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];
}

在初始化中,我有

    [self setTouchEnabled:YES];

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

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

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

4

1 回答 1

0

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

于 2013-09-01T10:28:26.617 回答