cocos2d中sprite的边界?

时间:2013-03-21 00:47:29

标签: cocos2d-iphone

我的屏幕上有各种精灵,他们追逐目标。一切正常。

我的问题是,有没有办法设定边界?我不希望他们能够在屏幕上移动160点以上?

我看到的每个例子总是使用box2d,有没有办法严格用cocos2d做?

- (void)addPlayers {
    winSize = [CCDirector sharedDirector].winSize;
    _officer = [[Officer alloc] initWithLayer:self];
    _officer.position = ccp(winSize.width/2, 40);
    _officer.tag = 1;
    [_batchNode addChild:_officer];

    _shotCaller = [[ShotCaller alloc] initWithTeam:2 layer:self];
    //create spawn point
    _shotCaller.position = ccp(100, 100);
    [_batchNode addChild:_shotCaller];

    NSString *gunName = [NSString stringWithFormat:@"gun.png"];
    _gun = [CCSprite spriteWithSpriteFrameName:gunName];
    _gun.anchorPoint = ccp(0.5, 0.25);
    _gun.position = ccp(_shotCaller.contentSize.width/2, _shotCaller.contentSize.height/2 -   20);
    [_shotCaller addChild:_gun];
    [self moveRandom:_shotCaller];

    NSMutableArray *team1GameObjects = [NSMutableArray arrayWithObject:_officer];
    NSMutableArray *team2GameObjects = [NSMutableArray arrayWithObject:_shotCaller];
    _gameObjects = [NSMutableArray arrayWithObjects:team1GameObjects, team2GameObjects, nil];
}

for(CCSprite *myNode in _gameObjects)
{
    if (myNode.position.y == 160 ) {
        NSLog(@"1");
        [self checkCollision];
    }
}

我一直收到这个错误? - [__ NSArrayM位置]:无法识别的选择器发送到实例0x84597b0

我想要做的就是让sprite停在160,以及checkCollision方法的用途。只是将其位置设置为160。

2 个答案:

答案 0 :(得分:1)

当他们达到他们的门槛时,你希望他们做什么?

您可以在预定的更新方法中检查它们。

在初始化的某个地方你可以运行

[self schedule:@selector(update:)];

这将每帧调用更新方法。

- (void)update:(ccTime)dt
{
     for (CCSprite *s in self.arrayOfSpritesToCheck)
     {
           if(s.position.y > 160) {
                 //Do something
           }
     }
}

至于您更新的问题,您正在NSMutableArray上运行职位。您的gameObjects数组是一个数组数组。当你执行for (CCNode *myNode in _gameObjects)时,它不能保证出来的对象将是CCNode,事实上在你的情况下它们是NSMutableArray

答案 1 :(得分:0)

您可以覆盖精灵(游戏对象)类中的setPosition方法,并将垂直位置限制为不超过160.