에디의 우당탕탕 코딩공장

[객체지향프로그래밍(2)]Finals Test Report : HelicopterGame만들기.

by 인턴 에디

📌 횡스크롤로 이동하는 맵을 구현해보자.

우선은 버튼을 눌렀을 시 왼쪽으로 이동하게 끔 만들었다.

 

📌 자동으로 맵을 이동시켜보자.

 

속도 조절(speed=0.5f)

 

속도 조절하지 않음(speed=1.0f)

두 맵의 빠르기가 다름이 느껴지는가?

void update() override
	{
		if (speedFlag - (int)speedFlag == 0)
		{
			movemapLeft();
		}
		
		speedFlag += speed;
	}

원리는 update함수가 호출될때마다 speedFlag변수에 speed많큼 더해서, speedFlag가 정수가 되면 왼쪽으로 맵이 움직이도록 구현해보았다.

 

📌 Player을 만들어보자!

우선, 움직이는 플레이어를 만들고 난뒤, 충돌처리와 애니메이션 작업을 하려고 한다.

플레이어는 상하좌우로 이동이 가능하고, 맵이 왼쪽으로 흘러감에 따라 함께 흘러간다.

하지만 왼쪽 끝에 위치에 도달하면 더이상 같이 이동하지 않는다.

📌 애니메이션을 만들어보자!

우선 실험을 위해 플레이어 안에다가 스크립트를 짰다. 커밋하고, 컴포넌트 기반으로 다시 만들어볼거다!!

✨ 컴포넌트 기반을 다시 스크립트를 작성하였다.

struct AnimationClip {
	string		shape;
	Dimension	dim;
};

class Animator : public Component
{
	vector<AnimationClip> clips;//애니메이션 클립
	int currnetAnimation;//현재 진행중인 애니메이션 클립의 인덱스
protected:
	Renderer* renderer;
public:
	Animator(GameObject* gameObject) : Component(gameObject), currnetAnimation(0)
	{
		renderer = gameObject->getComponent<Renderer>();//랜더러 참조
	}

	void addClip(AnimationClip clip)//애니메이션 클립을 추가한다.
	{
		clips.push_back(clip);
	}

	void Play()
	{
		if (currnetAnimation == clips.capacity() - 1) currnetAnimation = 0;//마지막 클립이면 처음클립으로 돌아간다.
		else currnetAnimation++;


		renderer->setShape(clips[currnetAnimation].shape.c_str());
	}

	
};

유니티 문서를 참고하였고, 외부에서 컴포넌트를 추가 후, 클립을 추가해서 그 갯수만큼, 돌아가며 play되도록 했다.

이 컴포넌트는 게임씬 스크립트에서 동적생성해서 넣어줬다.

player = new GameObject{ "helicopter", "player", sprite.c_str(),
			{5,4}, {0,10},  Position::zeros, map };
		player->addComponent<PlayerMoveScript>();
		animator = player->getOrAddComponent<Animator>();//애니메이터 추가 및 가져오기
		animator
        ->addClip({ "\xCD\xCD\xCB\xCD\xCD\xF0\xF0\xF0  \xF0\xF0\xF0\xF0  \xF0\xF0", {5,4} });
		animator
        ->addClip({ "  \xCB  \xF0\xF0\xF0  \xF0\xF0\xF0\xF0  \xF0\xF0", {5,4} });//클립추가.

 

 

 

블로그의 정보

에디의 우당탕탕 코딩 공장

인턴 에디

활동하기