Parallax Node 수정하기 [작성 중]

🍋 Parallax Node?

Parallax Node의 자식들은 서로 다른 속도로 움직임이 가능하다. 3 차원 세계의 깊이 감을 주기 위해 2 차원 게임에서 자주 사용되는 기법인데, 멋지게도 Cocos2dx에서 지원한다!

개발자 Den이 배경 요소가 왼쪽 밖으로 나가면 바로 오른쪽으로 보내 배경의 끊김을 없게 하는 “InfiniteParallaxNode” 확장 클래스도 만들거라고 2014년에 말했었지만, 아쉽게도 현재까지 구현이 안되어 있다. 직접 구현해도 될 기능이라 개발 우선순위에서 밀려 잊혀 진 거 같다.

20510aa2552a1743

Parallax Node 적용하기

bool HelloWorld::init()
{
    if ( !Scene::init() )
        return false;

	auto pLayer = LayerColor::create({255, 255, 255, 255});

	if (pLayer != nullptr)
	{
		pLayer->setContentSize(_director->getVisibleSize());
		addChild(pLayer);
	}

	m_pLeech = Sprite::create("leech3.png");

	if (m_pLeech != nullptr)
	{
		auto vOriginPosition = Vec2(pLayer->getContentSize().width * 0.5f, m_pLeech->getContentSize().height * 0.5f + 100.f);
		m_pLeech->setPosition(vOriginPosition);
		pLayer->addChild(m_pLeech);

		auto pActionBounce = Spawn::create(ScaleBy::create(0.05f, 1.1f, 0.9f), MoveBy::create(0.05f, Vec2(0, -3.5f)), nullptr);
		auto pActionDown = Spawn::create(ScaleBy::create(0.1f, 1.2f, 0.8f), MoveBy::create(0.1f, Vec2(0.f, -10)), nullptr);
		auto pActionUp = Spawn::create(ScaleBy::create(0.1f, 0.8f, 1.2f), EaseSineOut::create(MoveBy::create(0.1f, Vec2(0.f, 25))), nullptr);
		auto pActionTop = Spawn::create(ScaleTo::create(0.1f, 1), EaseSineIn::create(MoveBy::create(0.1f, Vec2(0.f, -25.f))), nullptr);
		auto pActionRecover = Spawn::create(ScaleTo::create(0.05f, 1), MoveTo::create(0.05f, vOriginPosition), nullptr);
		auto pActions = Sequence::create(
			pActionUp,
			pActionTop,
			pActionDown,
			DelayTime::create(0.05f),
			pActionRecover,
			DelayTime::create(1.f),
			nullptr);

		m_pLeech->runAction(RepeatForever::create(pActions));
	}

    return true;
}
  1. Sequence로 통통 튀는 Action을 준다.

결과:

20240227_234724

  1. 거머리 부모를 Parallax Node로 바꿔준다.

References

위키백과

Leave a comment