2015-01-04 5 views
-1

나는 didBeginContact 대리자 메서드에 동적으로 SKSpriteNode을 추가 해요 :SKSpriteNode를 동적으로 추가 할 수 없습니까?

여기 내 코드

-(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으로하면 잘 작동합니다.

그래서 내가 틀린 곳을 말해 주시겠습니까?

답변

1

당신은 결코 당신의 adBall 방법 내부

[self addChild:obj]; 

을 실행하지 않습니다. 따라서 새로 생성 된 스프라이트는 씬 그래프에 추가되지 않고 당연히 그려지지 않을 것입니다 (메소드의 끝에서 버려집니다).

+0

들으. 거기에 줄을 추가하지만 그것은 didMoveToView 대리자 메서드에서 메서드를 호출 할 때 작동합니다. didBeginContact에서 작동하지 않습니다. – LanWanMan

0

Ok 완료.

LearnCocos2D은 내가를 추가하지 않았지만 그 라인을 추가하는 것이지만 didMoveToView에서 작동하지 않는 것보다 다소 시간이 걸렸습니다.

처럼 :

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

은 의미가 없으며 필요하지 않아야합니다. 다른 버그가있을 수 있습니다. 이제 "addChild 해결 방법"을 적용하여 문제가되는 것으로 수정 한 것이지만 실제 문제는 분명히 다른 것입니다. – LearnCocos2D

+0

하지만로드 할 때 메서드를 호출하면 해당 뷰가 작동합니다. – LanWanMan

관련 문제