方法" enumerateChildNodesWithName"有时无法找到SpriteNode

时间:2014-07-16 08:20:00

标签: ios objective-c sprite-kit

我正在使用Objective-C的Sprite Kit制作横向滚动视频游戏 当角色从底部跳跃时,我想让它滑过酒吧。
当它从上面跳起时,我想让它上杆。

但是,它有时不起作用。

方法" enumerateChildNodesWithName"有时无法找到SpriteNode。

-(void)update:(CFTimeInterval)currentTime
{
    /* Called before each frame is rendered */

    // LongBar
    [self enumerateChildNodesWithName:LONG_BAR usingBlock:^(SKNode *node, BOOL *stop)
    {
        SKNode *gameCharacter = [ self childNodeWithName:GAME_CHARACTER];

        // The character is over the bar
        if(  node.position.y < gameCharacter.position.y )
        {
            node.physicsBody.categoryBitMask    = CONTACT_BAR;
            node.physicsBody.contactTestBitMask = CONTACT_CHARACTER;
        }
        // The character is under the bar
        else
        {
            node.physicsBody.categoryBitMask    = 0;
            node.physicsBody.contactTestBitMask = 0;
        }
    }];

    // ShortBar
    [self enumerateChildNodesWithName:SHORT_BAR usingBlock:^(SKNode *node, BOOL *stop)
    {
        // same as longbar
            :
            :
    }];
}

其他信息:
·长短杆各有两个。
SpriteName不同。
·短杆通常不起作用。
·长/短杆也在固定循环中创建,
所以屏幕上也存在相同的内容。
·当它被修改为仅产生长/短条时,它运作良好。

↓2014/07/17添加↓

@property SKSpriteNode *longBar;
@property SKSpriteNode *shortBar;
    :
    :
#define LONG_BAR    @"long_bar"
#define SHORT_BAR   @"short_bar"
    :
    :
- (void) addShortBar
{
    size_t y;
    float x = 0.6f;

    y = ( arc4random() % ( (int)self.size.height / 2 ) )+ ( self.size.height / 3 );


    self.shortBar.name = SHORT_BAR;

    self.shortBar           = [ SKSpriteNode spriteNodeWithImageNamed:BAR_SHORT];
    self.shortBar.size      = CGSizeMake(60 * x , 28 * x);

    self.shortBar.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.shortBar.size];

    self.shortBar.position = CGPointMake(self.size.width, y);
    self.shortBar.physicsBody.affectedByGravity    = NO;
    self.shortBar.physicsBody.dynamic              = NO;
    self.shortBar.physicsBody.categoryBitMask      = CONTACT_BAR;
    self.shortBar.physicsBody.contactTestBitMask   = (CONTACT_CHARACTER | CONTACT_POINT);

    self.shortBar.physicsBody.restitution          = 0;

    [self.shortBar runAction:[SKAction moveTo:CGPointMake(BAR_IS_OUT, self.shortBar.position.y) duration:_timeBarPasses]];
    [self addChild:self.shortBar];

    [self addRareItem:y];       // method that add item

}

0 个答案:

没有答案