2014-07-13 3 views
1

스프라이트가 화면 밖으로 이동하면 스프라이트를 다시 생성하려고 시도하지만 운이 없습니다.스프라이트 키트에서 스프라이트가 다시 생성되지 않습니다.

 #import "MyScene.h" 

    @implementation MyScene 

    -(id)initWithSize:(CGSize)size {  
     if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 

    self.backgroundColor = [SKColor colorWithRed:0.05 green:0.15 blue:0.2 alpha:1.0]; 

    SKSpriteNode *pole = [SKSpriteNode spriteNodeWithImageNamed:(@"pole")]; 
    bamboo.position = CGPointMake (30, 0); 
    bamboo.size = CGSizeMake(15, 1136); 



    [self addChild: pole]; 

    SKSpriteNode *pole2 = [SKSpriteNode spriteNodeWithImageNamed:(@"pole")]; 
    pole2.position = CGPointMake (290, 0); 
    pole2.size = CGSizeMake(15, 1136); 

    [self addChild: pole2]; 


    SKSpriteNode *spike = [SKSpriteNode spriteNodeWithImageNamed:(@"spike")]; 
    spike.position = CGPointMake (45, 600); 
    spike.size = CGSizeMake(15, 75); 

    SKAction *moveDown = [SKAction moveByX:(0) y:(-10) duration:(.05)]; 

    [spike runAction:[SKAction repeatActionForever:moveDown]]; 

    [self addChild: spike]; 


    } 
    return self; 
} 


-(void)update:(CFTimeInterval)currentTime { 
/* Called before each frame is rendered */ 
if (_spike.position.y < 250) { 


    _spike.position = CGPointMake(45, 600); 
} 

} 

@end 

무엇이 문제 일 수 있습니까? Xcode는 나에게 오류를주지 않는다. "스파이크 (spike)"노드는 단순히 화면을 벗어나서 스스로 리셋하지 않는다. 조건부 값을 변경했지만 동일한 문제가 발생합니다. 조건부가 무시되는 것과 같습니다.

+0

조건부로 스파이크 위치를 확인하는 것은 모든 프레임이 아니라 스파이크를 만들 때이 코드 블록에서만 발생합니다. 맞습니까? – prototypical

+0

@protypypical 그건 의미가 있습니다. 모든 프레임을 업데이트하려면 조건부를 어디에 배치해야합니까? currentTime update 메소드에 아무 소용이 없다. – cocoamoco

+0

예, 업데이트 방법을 지정하면 제대로 작동합니다. 아마도 잘못 구현했을 것입니다. 현재 응답을 확인하십시오. 또한 학습의 초기 단계에서 디버거에 대해 배우는 것이 좋습니다. 그러면 시간이 많이 절약 될 것입니다. – prototypical

답변

1

업데이트 방법에서 Sprite의 위치를 ​​확인하는 것이 좋습니다.

-(id)initWithSize:(CGSize)size {  
    if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 

    _spike = [SKSpriteNode spriteNodeWithImageNamed:(@"spike")]; 
    _spike.position = CGPointMake (45, 600); 
    _spike.size = CGSizeMake(15, 75); 

    SKAction *moveDown = [SKAction moveByX:(0) y:(-10) duration:(.05)]; 

    [_spike runAction:[SKAction repeatActionForever:moveDown]]; 

    [self addChild:_spike]; 

    } 
    return self; 
} 

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

    if (_spike.position.y < 250) { 

     _spike.position = CGPointMake(45, 600); 
    } 

} 
+0

내가 생각하기에이 작품은 그렇게 생각하지 않는다. 왜 그런가? – cocoamoco

+0

ohh,이 코드가 나를 위해 작동한다는 것을 제외하고 "if (self = [super initWithSize : size])"내부에 코드를 작성했는지, xcode에서 어떤 종류의 오류가 발생했는지 알 수 있습니까? –

+0

죄송합니다. 더 분명해야 했어. 그것은 나에게 오류를주지는 않지만, 스프라이트 노드는 단순히 화면을 벗어나 스스로 제거하고 다시 나타나지 않습니다. – cocoamoco

관련 문제