영넌 개발로그

[SFML] 도형 그리기 class로 만들기 (색, 위치, 스피드 다르게 변경) 본문

코딩/C++

[SFML] 도형 그리기 class로 만들기 (색, 위치, 스피드 다르게 변경)

영넌 2020. 12. 3. 05:14

NPC란? Non-Player Character

 

1. 사각형을 움직여보자

화면 상에서 오른쪽으로 갔다가 왼쪽으로 갔다가 하는 코드

		Vector2f pos = myRect.getPosition();
		if (pos.x > 600.0f) {
			offset_x = -1.0f;
		}
		else if (pos.x < 30.0f) {
			offset_x = 1.0f;
		}
		myRect.move(offset_x, 0.0f);

 

2. 사각형 움직이는 속도를 조절해보자

초당 30번 while문이 실행된다.

window.setFramerateLimit(30);

 

3. 여러 개의 사각형을 관리해보자

vector<RectangleShape> npcs(3);

int inc = 0;
for (auto& _e : npcs) {
	_e.setSize(Vector2f(30.0f, 10.0f));
	_e.setFillColor(Color::Cyan);
	_e.setPosition(30.0f+inc, 30.0f+inc);
	inc += 20;
}
    
    
    
    
    
    
    
for (auto& _e : npcs) {
	window.draw(_e);
}

 

 

4. npc를 별도로 만들고 싶어 >> class로 만들자

스피드, 위치, 색을 다르게 설정할 수 있게 해보자

class NPC
{
private:
	float x, y;
	float speed;
	Color c;
	RectangleShape rectShape;
	float offset_x;
public:
	NPC(float _x, float _y, float _speed, Color _c);
	void update();
	void draw(RenderWindow& _window);
};

NPC::NPC(float _x, float _y, float _speed, Color _c) : x(_x), y(_y), speed(_speed), c(_c){
	rectShape = RectangleShape(Vector2f(30.0f, 10.0f));
	rectShape.setFillColor(_c);
	rectShape.setPosition(_x, _y);
}


void NPC::draw(RenderWindow& _window) {
	_window.draw(rectShape);
}

void NPC::update() {
	Vector2f pos = rectShape.getPosition();
	if (pos.x > 600.0f) {
		offset_x = -speed;
	}
	else if (pos.x < 30.0f) {
		offset_x = speed;
	}
	rectShape.move(offset_x, 0.0f);
}

사용>

	vector<NPC> npcs2;
	int cnt = 0;
	Color colors[3]{ Color::Red, Color::Cyan, Color::Magenta };
	for (int i = 0; i < 3; i++) {
		NPC npc(30.0f + cnt, 30.0f + cnt, (i + 1) * 2, colors[i]);
		npcs2.push_back(npc);
		cnt += 20;
	}

Comments