터널 효과 cocos2d


12

COCOS2D (iOS)에서 유사한 터널 효과를 만들려고합니다. 누구든지 조언을 제안 할 수 있습니까?

참조 이미지

심판 비디오 1

심판 비디오 2

지금까지 나는 스케일이 감소하고 중심이 같은 지점에 위치하고 여러 작은 스프라이트에 대해 Z가 감소하는 링 모양 스프라이트를 여러 번 사용해 보았습니다.

이를 통해 CCScaleTo로 애니메이션을 적용하고 애니메이션 지속 시간으로 크기를 2.0으로 변경했지만 참조에 표시된 터널 효과에 가깝지 않습니다.

고마워, 샘

답변:


10

이 효과의 저자로부터 구현 설명을 찾았습니다.

2D 평면에서 깊이 환영을 만들기 위해서는 많은 작업이 필요했습니다.

원칙은 매우 쉽습니다. 원은 화면 중간에서 배율 0으로 시작합니다. 그런 다음 터널의 첫 번째 원은 경과 시간에 비례하여 비율 조정을 시작하고 (선형 비율 조정이 작동하지 않음) 얼마 후 두 번째 원의 비율 조정이 시작됩니다 , 3, 4 등이 있습니다.

그런 다음 원의 알파 값을 비례 적으로 낮추고 (맨 뒤의 알파 값은 흐림 효과를주기 위해 알파 값을 앞의 값보다 낮습니다) 모든 원이 따라야하는 경로를 정의하여 X와 Y를 이동합니다 좌표를 조정 한 다음 화면 중앙에 우주선을 배치합니다. 장치를 기울이면 터널이 좌우로 상하로 움직입니다 (그러나 우주선이 대신 움직인다는 인상을줍니다!).

원이 화면 밖으로 나간 후에는 빠르게 사라지고 메모리를 절약하기 위해 초기 위치로 돌아갑니다 (새로운 원을 만들 필요는 없지만 동일한 원을 재사용합니다).

내 영어에 대해 죄송하지만 일반적인 아이디어를 설명하기를 바랍니다. :)


1

Z 값과 스케일이 감소하는 여러 링 스프라이트가 거의 있습니다. 그들 모두를 중앙에 두지 마십시오.

터널이 멀리있는 사건의 지평선을 치는 지점을 추적해야합니다. 당신은 그러나 당신이 원하는 시간이 지남에 따라 그 지점을 이동할 수 있습니다.

당신은 각각의 새로운 스프라이트를 배치 그런 다음, 그 시점에서 장소가, 당신이 좋아, 다음을 시작하는 방법 그것의 불투명도를 설정, 작은 그것을 확장 CCSpawn으로 CCScaleTo하고 CCFadeTo, 예를 들어 :

sprite->runAction(CCSpawn::create(
    CCScaleTo::create(2.0f, 1.5f),
    CCFadeTo::create(5.0f, 255),
    nullptr));

모든 스프라이트를 미리 만들고 효율적으로 유지하기 위해 뒤에있는 스프라이트를 회전시킵니다.


1

아마도 배경 레이어와 입자 효과로 정렬하려고합니다. 파티클 디자이너에서 효과를 테스트하고 나중에 backgroung 레이어에서 재생할 수 있습니다.


0

솔직히 말하면 2D 카메라를 사용하여 이미지를 렌더링한다고 생각하지 않습니다. 게임이 3D 렌더링 시스템을 사용하여 렌더링 된 것 같습니다. 그러나 cocos2d를 사용하려면 3D 변환 행렬을 직접 시뮬레이션해야합니다. 3D 장면에서 모든 객체는 3 개의 스칼라 값 x, y 및 z로 정의됩니다. 사용할 수있는 가장 간단한 방법은 제안한대로 확장하는 것이지만 구현 한 것은 아닙니다! ccScaleTo시간이 지남에 따라 선형 스케일링이 발생하여 3D 느낌을 생성하지 않습니다. 의 값으로 스케일링 객체를 시작할 수 있습니다 1/z. 이것은 당신이 생각할 수있는 가장 간단한 영사 행렬과 동일합니다! 그래도 만족스럽지 않다면 더 현대적이고 복잡한 투영 행렬을 살펴보십시오 .

참고 사항 : cocos2D에서 커스텀 프로젝션 매트릭스를 구현하는 것은 약간 더럽습니다. 효과가 마음에 들지 않으면 엔진을 3D 지원 엔진으로 변경하는 것이 좋습니다.


내가 일을 더 복잡하게 3D 소개하고 싶지 않아하지만,이 효과는 가짜 터널 뷰를 렌더링적인 Cocos2D에서 만든 (나는 언젠가 다시이 게임의 저자와 대화했다)
Saurabh Passolia

0

의사 코드에서 내가 한 방법은 다음과 같습니다.

터널 효과 활성화 :

  1. CCRepeatForever (CCFunc (createCircle)) 만들기
  2. "ViewNode"라는 장면에 노드를 추가하십시오

createCircle ()

  1. 장면 중심에 레이어, 위치를 만듭니다. "ViewNode"에 하위로 추가하십시오.
  2. 작업 실행 : CCSequence (CCEaseExponentialIn (CCScaleTo), CCRemoveSelf)
  3. 사계절, 적, 우주선 등 무엇이든 레이어에 물건을 넣으십시오.

제어 (시차)

  1. 터널 효과가있는 모든 레이어 (예 : ViewNode의 자식)
  2. 터치 위치를 기준으로 앵커 위치를 업데이트합니다.

위치는 소실점이므로 소실점을 이동하지 않고 레이어를 이동할 수 없습니다. 그러나 기준점을 이동하면 레이어가 이동하는 것처럼 보이지만 소실점은 동일하게 유지됩니다. 가까운 레이어 (대규모)에서 ccp (0.2,0.2)를 이동하면 효과가 더 크기 때문에 시차 효과가 발생합니다. 멀리 떨어진 레이어에서 동일하게 이동합니다.

앵커 위치를 변경하면 모든 레이어에서 동일한 움직임이 발생하도록 모든 크기를 동일한 크기의 레이어로 묶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.