0

我的屏幕上有各种精灵,它们正在追逐他们的目标。这一切都很好。

我的问题是,有没有办法设置边界?我不希望他们能够在屏幕上移动到 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

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

4

2 回答 2

1

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

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

在你的 init 的某个地方你可以运行

[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'。

于 2013-03-21T00:53:39.707 回答
0

您可以在 sprite(游戏对象)类中覆盖 setPosition 方法,并将垂直位置限制为永远不会超过 160。

于 2013-03-21T19:50:18.533 回答