我的屏幕上有各种精灵,他们追逐目标。一切正常。
我的问题是,有没有办法设定边界?我不希望他们能够在屏幕上移动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。
答案 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.