2015-01-30 9 views
0

이 코드를 사용하여 5 개의 벽돌 행 위에 스폰합니다. 첫 번째 줄은 완벽하고, 위치가 적절하며 적절하게 움직입니다. 그러나 performSelector 액션으로 생성되는 행은 제대로 배치되지 않습니다. 스폰되는 행의 위치는 화면에서 중간에 떨어져 5 개의 벽돌을 산란하는 대신 두 번째로 25를 생성하고 세 번째로 125 개의 벽돌을 생성합니다. 이 프로젝트에서 모든 문제와 조치를 취하기 전에 모든 작업과 방법을 사용했습니다.스프라이트가 올바르게 생성되지 않습니다.

이 코드는 initWithSize 이외의 장면에서 가지고있는 유일한 코드이며 아무런 문제가 발생하지 않습니다.

-(void) addBricks:(CGSize)size { 
for (int i = 0; i < 5; i++) { 
    //create brick sprite from image 
    SKSpriteNode *brick = [SKSpriteNode spriteNodeWithImageNamed:@"brick"]; 
    //resize bricks 
    brick.size = CGSizeMake(60, 30); 
    //psoition bricks 
    int xPos = size.height/7.5 * (i+.5); 
    int yPos = 450; 
    brick.position = CGPointMake(xPos, yPos); 

    //add move action 
    SKAction *wait = [SKAction waitForDuration:3]; 
    SKAction *move = [SKAction moveByX:0 y:-36.9 duration:1]; 
    SKAction *sequence = [SKAction sequence:@[wait, move]]; 
    SKAction *repeatMove = [SKAction repeatActionForever:sequence]; 

    //add action to spawn bricks 
    SKAction *spawn = [SKAction performSelector:@selector(addBricks:) onTarget:(self)]; 
    SKAction *delay = [SKAction waitForDuration:6]; 
    SKAction *delayThenSpawn = [SKAction sequence:@[delay, spawn]]; 

    [self runAction:delayThenSpawn]; 
    [brick runAction:repeatMove]; 
    [self addChild:brick]; 

} 
} 

모든 도움을 주시면 감사하겠습니다.

+0

당신은 매개 변수를 전달 할 수 없기 때문에 매개 변수를 사용 선택기로 performSelector 수 없습니다. 액션이 selector를 호출하면 size 매개 변수는 정의되지 않습니다. 운이 좋으면 0,0이지만 그렇지 않다면 쓰레기가 들어 있습니다. 다행히도 매개 변수를 사용하지 않는 것 같습니다. 그러나 일치하지 않는 서명으로 Selector를 수행하는 것은 합법적이지 않습니다. – LearnCocos2D

+0

크기 매개 변수와 y 위치는 전달하지만 x 위치는 전달하지 않습니다. 아마도 정수가 아니기 때문일 수 있습니다. addBricks 메소드 밖에 x 위치를 정의하면 도움이 될까요? @ LearnCocos2D –

답변

0

너는 네가 기대하는 것을 보지 못한다는 것은 의미가있다. 당신은 재귀 적으로이 메소드를 호출하고 있습니다.

addbricks가 호출 될 때마다 다섯 개의 벽돌이 생성됩니다. 그러나 addbricks는 그 자체를 부르고있다.. 그래서 5 개의 벽돌 x 5 개의 벽돌 x 5 개의 벽돌.

당신은 이것을 다시 생각해야합니다. 왜 애드 브릭 안에 더 많은 벽돌을 산란시키고 있니?

나는 당신이 벽돌을 계속 영원히 산란 할 수 있도록하는 이유를 추측하고 있습니다. 재귀없이이 작업을 수행 할 수 있습니다. 당신의 addBricks 방법의

외부, 그냥 할

[self runAction:[SKAction repeatActionForever:delayThenSpawn]]