SpriteNode не перемещается в сцене

#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 . Но по-прежнему безуспешно!!!