无法动态添加SKSpriteNode?

时间:2015-01-04 10:56:19

标签: ios sprite-kit

我在SKSpriteNode委托方法上动态添加didBeginContact

这是我的代码

 -(void)adBall
    {
        SKSpriteNode *obj = [[SKSpriteNode alloc]initWithImageNamed:@"ball.png"];
        obj.physicsBody = [SKPhysicsBody bodyWithTexture:obj.texture size:obj.texture.size];
        obj.position = CGPointMake(100, 100);
        obj.name = OBSTACLE_KEY;

        obj.physicsBody.categoryBitMask = BallCategory1;
        obj.physicsBody.contactTestBitMask = GreenLineCategory | RedLineCategory ;;
        obj.physicsBody.collisionBitMask = GreenLineCategory | RedLineCategory ;;

        obj.physicsBody.affectedByGravity = YES;
        obj.physicsBody.dynamic = YES;
        obj.physicsBody.friction = 0.0f;
        obj.physicsBody.linearDamping = 0.0f;
        obj.physicsBody.restitution = 1.0f;
        obj.physicsBody.allowsRotation = NO;
        [obj.physicsBody applyForce:CGVectorMake(200, 300)];
    }

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *firstBody, *secondBody;

    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        firstBody = contact.bodyA;
        secondBody = contact.bodyB;
    }
    else
    {
        firstBody = contact.bodyB;
        secondBody = contact.bodyA;
    }

    if ([firstBody.node.name isEqual: OBSTACLE_KEY] && ( [secondBody.node.name isEqual: BLACKLINE_KEY]))
    {
        [self adBall];
    }
}

但是不能出现在屏幕上它只是在底部显示球并消失。

如果在[self adBall];方法中添加didMoveToView而不是正常工作。

所以Plz告诉我我在哪里错了?

2 个答案:

答案 0 :(得分:1)

你永远不会跑

[self addChild:obj];

在您的adBall方法中。因此,新创建的精灵不会被添加到场景图中,并且自然不会被绘制(它会在方法结束时被丢弃)。

答案 1 :(得分:0)

好的完成了。

正如LearnCocos2D所说我没有添加[self addChild:obj];我添加该行但是它在didMoveToView中没有工作,而不是我在一段时间之后所谓的方法。< / p>

喜欢:

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW,0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
       [self adBall];
    });