2011-12-17 1 views
0

현재 CCSprite를 장면 (움직이는 고스트)에 추가하고 이동하도록하는 작업을하고 있습니다. 임의로 생성 된 지점에서 다른 임의로 생성 된 지점으로 이동하고, 페이드 아웃 한 다음 장면에서 제거 할 수 있습니다. 플레이어가 유령을 두드리면 점수에 1이 추가됩니다.CCSprite가 있는지 확인하고, CCScene에서 추가 및 제거하고 조건이 충족 될 때까지 반복합니다.

모든 것이 아름답게 작동하지만 조건이 충족 될 때까지 (특히 점수가 50에 도달 할 때까지)이 작업을 반복해야합니다. 나는 이것을 할 수있는 최선의 방법을 알 수 없다. 루프를 실행할 때마다 무한 반복되고 게임이 중단됩니다.

이러한 루프를 수행하는 가장 좋은 방법은 무엇입니까? 스프라이트에 대한 배열 생성에 대한 언급을 들었지만 한 번에 장면의 유령 반복이 하나만있을 것입니다. 이것을 달성하는 다른 방법이 있습니까?

이상적으로, 내가 무엇을 달성하고자하는 것은 : 들어

-(void) ghostSpawner { 


CGPoint endPoint = [self randomPointGenerator]; 
[self birthGhost]; 

CCSprite * Ghost = (CCSprite *) [self getChildByTag:2]; 



//...then fade him in 
CCFiniteTimeAction *ghostBegin = [CCSequence actions:[CCDelayTime actionWithDuration:1],[CCTintTo actionWithDuration:0 red:0 green:0 blue:0],[CCTintTo actionWithDuration:.5 red:255 green:255 blue:255], nil]; 

//...move him over a given amount of time, then fade him out and DIE 
CCFiniteTimeAction *ghostEnd = [CCSequence actions:[CCMoveTo actionWithDuration:2  position:endPoint],[CCTintTo actionWithDuration:1 red:0 green:0 blue:0],[CCCallFunc actionWithTarget:self selector:@selector(killGhost)], nil] ; 

[Ghost runAction:[CCRepeatForever actionWithAction:[CCSequence actions:ghostBegin,ghostEnd, nil]]]; 
} 

: 작업을 실행 그들이 끝날 때까지 기다린 다음 점수가 여기에 50

때까지 다시 실행 내 코드입니다 스프라이트 생성 :

-(void) birthGhost { 
CGPoint spawnPoint = [self randomPointGenerator]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ghostidle.plist"]; 

CCSprite * Ghost = [CCSprite spriteWithSpriteFrameName:@"Ghost0001.png"]; 
[Ghost setColor:ccc3(0,0,0)]; 
Ghost.anchorPoint = ccp(.5, .5); 
Ghost.position = spawnPoint; 
Ghost.anchorPoint = ccp(0.5f,0.5f); 
Ghost.scale = .4; 
Ghost.tag = 2; 

[Ghost runAction:ghostIdleAnimation()]; 
[self addChild:Ghost z:0]; 
} 

을 'ghostSpawner'기능은 현장에 내 '초기화하기'에서라고

[self ghostSpawner]; 

이 정도면 충분합니다. 이것이 내 첫 번째 진짜 아이폰 프로젝트 중 하나이기 때문에 어떤 의견이라도 굉장 할 것입니다. 미리 감사드립니다!

답변

3

좋아, 여기에 내가 할 것입니다 방법은 다음과 같습니다 초기화에 자체에

  1. 보내기 ghostSpawner (지금처럼).

  2. ghostSpawner에서 스프라이트를 가져 와서 재설정하고 (불투명도를 0으로 변경하고 위치를 재설정 한 다음) 2 개의 실행 메시지를 보냅니다. 하나는 페이드 인으로, 다른 하나는 종료 위치로 이동합니다. , 자기 자신에게 killGhost 메시지를 보낸다.

  3. killGhost에서 점수가 50 점 미만인지 확인하십시오. 일치하는 경우 ghostSpawner를 다시 자기에게 보내십시오. 그렇지 않으면 ghostSpawner가 50 점에 도달했을 때 수행하십시오.

스프라이트 생성 코드는 init에 있어야합니다. 같은 스프라이트 만 재사용 할 수 있습니다. CCTintTo 대신 CCFadeIn을 사용할 수도 있습니다.

+0

Yup! 이것은 완벽했습니다. while이나 for 루프에 대한 전통적인 do를 만드는 대신, 이것이 내가 생각할 필요가있는 방법이다. 그 중 하나가 만족해야 할 조건을 충족시킬 때까지 앞뒤로 튀어 오르는 함수 호출 루프를 작성해야했습니다. 귀하의 의견을 보내 주셔서 감사합니다. – GreenWire