#iphone #objective-c #sprite-kit
#iPhone #objective-c #sprite-kit
Вопрос:
Я создаю игру, используя SpriteKit. И ниже приведена точка, в которой я застрял.
Я размещаю SKSpriteNode в сцене и обновляю его местоположение, уменьшая его позицию X в
- (void)update:(NSTimeInterval)currentTime
метод.
Но когда узел достигает X: 594, он застревает там. и не перемещаются послесловия. Я не могу понять, почему это происходит.
Вот SKSpriteNode, который я использую, с отдельным классом как «BirdNode»
@property (strong,nonatomic) SKAction * flap;
@property (strong,nonatomic) SKAction * flapForever;
- (id)initWithImages:(NSArray *)images
{
if(self = [super init]) {
NSMutableArray *textures = @[].mutableCopy;
for (NSString *imageName in images) {
SKTexture* birdTexture = [SKTexture textureWithImageNamed:imageName];
birdTexture.filteringMode = SKTextureFilteringNearest;
[textures addObject:birdTexture];
}
DebugLog(@"Textures = %@",textures);
self = [BirdNode spriteNodeWithTexture:[textures objectAtIndex:0]];
self.flap = [SKAction animateWithTextures:textures timePerFrame:0.02];
self.flapForever = [SKAction repeatActionForever:self.flap];
[self setTexture:[textures objectAtIndex:0]];
[self setPhysicsBody:[SKPhysicsBody bodyWithRectangleOfSize:self.size]];
[self.physicsBody setCategoryBitMask:obstacleBitMask];
[self.physicsBody setContactTestBitMask:playerBitMask];
[self.physicsBody setDynamic:YES];
[self runAction:self.flapForever withKey:@"flapForever"];
return self;
}
(NSArray *)birdImages:(int)number {
NSMutableArray *birds = @[].mutableCopy;
for (int i = 0; i < 25; i ) {
NSString *birdImage = @"";
birdImage = [birdImage stringByAppendingFormat:@"flying_bird%d",number];
birdImage = [birdImage stringByAppendingString:(i 1)<10?@"0":@""];
birdImage = [birdImage stringByAppendingFormat:@"%d",i 1];
[birds addObject:birdImage];
}
return birds;
}
Добавляем вышеупомянутый SpriteNode в сцену.
BirdNode *bird = [[BirdNode alloc] initWithImages:[BirdNode birdImages:1]];
bird.anchorPoint = CGPointZero;
bird.physicsBody.categoryBitMask = obstacleBitMask;
bird.physicsBody.contactTestBitMask = playerBitMask;
bird.physicsBody.dynamic = YES;
bird.name = @"Bird";
bird.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bird.size];
bird.position = CGPointMake(1000, 240);
[self addChild:bird];
[Nodes addObject:bird];
И это метод, при котором я обновляю положение узла.
- (void)update:(NSTimeInterval)currentTime
{
[self updateNodes:currentTime];
}
- (void) updateNodes:(NSTimeInterval)currentTime
{
//Here nbNodes = [Nodes count];
for(int i = 0; i < nbNodes; i ) {
BirdNode *bird = Nodes[i];
bird.position = CGPointMake(bird.frame.origin.x - 3, bird.frame.origin.y);
}
}
Но птица застряла, когда она достигла позиции X 594 из 1000.
Где взлом, который я делаю неправильно.?
как решить эту проблему.
Пожалуйста, помогите мне.
Комментарии:
1. Вы пробовали регистрировать положение узлов в методе обновления?
2. Есть ли другое физическое тело в сцене около x: 594? Например, препятствие?
3. Спасибо @akashg Да, я пробовал регистрировать положение узла. И в той же позиции нет физического тела. и с помощью NSLog я узнал, что BirdNode не перемещается с X-позиции 594. Если я удалю действия flap и flapForever, то все будет работать нормально. и отлично обновляет его местоположение. Поэтому не могу понять, как обновить его местоположение с помощью flapping.
4. Вместо
bird.position = CGPointMake(bird.frame.origin.x - 3, bird.frame.origin.y);
вы могли бы попробоватьbird.position = CGPointMake(bird.position.x - 3, bird.position.y);
5. Спасибо @akashg, я также пробовал использовать bird.position.x вместо bird.frame.origin.x . Но по-прежнему безуспешно!!!