영넌 개발로그
[SFML] 도형 그리기 class로 만들기 (색, 위치, 스피드 다르게 변경) 본문
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;
}
'코딩 > C++' 카테고리의 다른 글
[C++ 기초] Class 생성자 Constructor / 소멸자 Destructor (0) | 2020.12.04 |
---|---|
[C++ 기초] 포인터 Pointer / Smart Pointer / this / const pointer (0) | 2020.12.04 |
[SFML] 도형 그리기, 도형 움직이기 / 이벤트 처리 / 키보드 입력 (0) | 2020.12.03 |
[SFML] Simple Fast Multimedia Library 설정 / 원 그리기 (0) | 2020.12.03 |
Comments