2014-10-13 1 views
0

내 SK 게임에서 로켓을 발사하는 헬리콥터가 있습니다. heli는 화면에 한번만 로켓을 가질 수 있습니다. 그 이유는 로켓이 발사 될 때마다 새로운 SKEmitterNode를 생성해야하는 이유가 CPU에 과부하가 걸리기 때문입니다. 매번 에미 터를 보관 취소해야합니다.SKEmitterNode가 예상대로 작동하지 않습니다.

따라서 로켓은 단일 인스턴스입니다. 누군가가 로켓을 발사하면 씬의 자식으로 씬에 추가되고 발사되며, 무언가를 치면 부모에게서 제거됩니다. 내 update{} 운전 방식에서

, 여기에 일부 사이비 코드입니다 : 존재하는 경우

if ([rocket parent]) { 
    rocketSmoke.position = rocket.position; 
    rocketSmoke.numParticlesToEmit = 0; 
}else{ 
    rocketSmoke.numParticlesToEmit = 1; 
} 

그래서 기본적으로, 이미 터가 로켓을 다음과 존재하지 않는 경우, 이미 터가 자동으로 꺼집니다. 아니요, 로켓의 자식으로 이미 터를 추가 할 수는 없습니다 로켓이 물체에 닿아 removeFromParent 로케트 뒤의 연기 흔적이 즉시 사라지고 그 효과가 없습니다.

문제 새로운 로켓이 발사되고 numParticlesToEmit이 다시 0으로 설정되어있는 경우,이다, 행위 터 입자가 입자에게 전체 시간을 방출 된 것처럼! 입자 방사체가 다시 켜지기를 원하지만 헬리콥터 뒤에 연기가 즉시 나타납니다. 이 효과는 SK의 에미 터 파일로 재생하고 파티클의 "최대 값"을 1로 설정 한 다음 다시 0으로 설정하여 관찰 할 수 있습니다. 즉, 파티클을 방출 한 것처럼 화면이 순간적으로 채워집니다. 전체 시간. 분명히 그것은 내가 원하는 것이 아닙니다.

I 도하지 전화 resetSimulation, 할 수있는 기존의 모든 입자를 제거한다, 그래서 마지막 발사에서 중도의 연기가 순식간에 두 개의 로켓이 잇따라 발사한다면 매우 부 자연스럽게 보일 것이다, 사라질 것이기 때문에 .

내 이미 터를 작성하는 유일한 방법은 무엇입니까?

답변

0

각기 다른 로켓 에미 터의 새 인스턴스를 만듭니다. 그러면 문제가 해결됩니다.

"CPU에 과도한 세금이 부과됩니다"라는 메시지가 표시되면 두 개의 이미 터를 생성하고 어느 것이 사용되는지를 선택하십시오.

Ex. 이 효과를 완료 할 터 당신에게 시간을 줄 것이다 1.

화재 로켓 1, 사용 터 1
화재 로켓이 사용 터 2
화재 로켓 3, 사용 에미 당신이 때 로켓 안타를 원하는 다음 로켓의 이미 터가 원하는대로 동작 할 수있게합니다.

+0

그러나 각 로켓에 대한 이미 터의 새로운 인스턴스를 생성하는 경우 로켓에 무언가가 도달하면 특정 이미 터에 자체를 파괴하기 전에 몇 초 동안 기다리라는 것을 어떻게 알 수 있습니까? – Todd

+0

SKSpriteNode를 RocketSpriteNode로 서브 클래스 화하고 emitterArrayIndex라는 속성을 추가하십시오. 에미 터를 배열에 배치하십시오. 로켓을 만들 때 로켓 emitterArrayIndex 속성을 각각의 이미 터 배열 인덱스와 같게 지정합니다. 로켓이 뭔가 접촉하면, 배열 인덱스 = rocket.emitterArrayIndex에서 에미 터를 찾음으로써 이미 터에 액세스 할 수 있습니다.(로켓이 무언가를 치는 하나가 됨) – meisenman

+0

로켓이 무언가를 치면 'removeFromParent'라고 부르면 이미 터가 부모로부터 제거됩니다. 따라서 연기 흔적이 사라집니다. 아마도 나는 이것에 대한 새로운 질문이 필요할 것입니다. – Todd