짧은 설명
- 벡터를 bool형으로 백터 선언 (이게 좋아 보임)
- 벡터를 int 형으로 백터 선언
- 변경된 애만 따로 모아서 바꾸는게 좋을거같다.
- 키 고정 및 해당 키가 눌림, 눌리고 있음, 땜 상태를 확인할 수 있게 작성하는것도 좋다.
작업 순서
- 프레임 워크
- 인풋 매니저
- 리소스 매니저씬 매니저
- 씬
- 게임 오브젝트 : 상속받아서 늘리는 형태로 작성
게임 오브젝트
- 리소스 세팅, 초기화, 드로우 반복
- 게임 오브젝트에 그리기에 필요한 기능을 넣진 않을 것이다.
- 하지만, 그리지는 않더라도 위치, 회전, 크기는 넣어놓을 것이다.
- 초기화 함수, 드로우 함수 → 가상 함수
virtual void Init() = 0; //생성할때 초기화
virtual void Release() = 0; //삭제할 때 함수
virtual void Reset() = 0; //사용할때 초기화
virtual void Update(float dt) = 0;
virtual void Draw(sf::RenderWindow& window) = 0;
- 게임오브젝트 컨테이너 생성
- 순회하면서 드로우 함수를 호출하면 그리지게끔 작성
- 단독으로 사용하지 않고 씬에 컨테이너를 만들어 넣을 것이다.
게임 오브젝트 상속
- 스프라이트 게임 오브젝트이다.
- 이미지로 그리기만 하는 클래스는 이 클래스를 사용하는 것이다.
- 드로우 함수 : 렌더 윈도우 받아서 사용한다.
- 텍스쳐 할당 : Init, reset에서 할당한다.
- 오리진 : 오리진 프리셋 9개를 생성해서 상황에 맞춰 사용할 것이다.
- 전역함수처럼 사용할 수 있도록 해야한다. - 클래스 생성 및 스테틱 함수
- 초기화 - 리셋 - 업데이트 - 드로우 - 릴리즈 순서다.
SpriteGameObject spriteGo("graphics/player.png");
spriteGo.Init(); //생성할때 초기화
spriteGo.Reset(); //사용할때 초기화
while (window.isOpen())
{
~
// Update
InputMgr::Update(0.f);
spriteGo.Update(0.f);
//Draw
~
spriteGo.Draw(window);
}
spriteGo.Release(); //게임오브젝트 삭제
return 0;
}
디파인즈
- 오리진 프리셋처럼 디파인하는것을 모아놓는 헤더파일
유틸즈
씬 매니저
- 씬들을 관리
- 컨테이너 - 씬 추가
- 씬 개별적으로 추가 제거
- 메인에서는 씬 메니저를 생성
씬
- 게임 오브젝트들을 관리하는 클래스
- 타이틀 씬
- 게임 씬
- 특정 씬을 전환하고 싶은 경우? : 씬 ID를 열거형으로 만들어 사용한다.
- 씬을 시작할 때 Enter 함수를 호출해서 사용하고, 씬이 끝날때 Exit 함수를 호출해서 사용한다.
- 씬은 한번에 하나만 열려야한다. → Enter 호출
- 게임 오브젝트 리스트 : 씬에 넣을 게임 오브젝트를 add 하고 remove를 한다.
- 직접 게임 오브젝트 리스트에 추가하고 삭제시킬것이다.
- 나중에는 이렇게 하면 안되서 바꿔야한다.
- 순회하다가 추가 및 제거를 하면 딜레이가 발생하기 때문이다.
- 한프레임에 한번 진행하고 다음 프레임이 올때까지 대기했다가 다시 해야한다.
getLocalBound 함수
- 스프라이트가 그려질 영역 정보를 받게 된다.
- rect 형으로 받아진다.
- 너비, 높이 값을 받을 수 있다.
반복적인 include 처리
- 프로젝트 - 설정 - C/C++ - 미리 컴파일된 헤더 : 사용
- stdafx hpp cpp 생성 - cpp에 stdafx.h include 하기 - stdafx.cpp 속성 - C/C++ - 미리 컴파일된 헤더 : 만들기
- cpp의 파일이 먼저 컴파일 되고 헤더가 추가되는 것이다.
- hpp에 자주쓰는 헤더들 추가
- iostream
- vctor
- list
- unordered_map
- algorithm
- SFML 헤더
- 미리 컴파일 된 헤더를 사용하면 ? : 캐싱된 헤더를 우선적으로 컴파일되기 때문에 반복적인 헤더 추가를 안해도 된다.
- 이 작업을 해주면 앞으로 모든 클래스에 stdafx 헤더파일이 include 되어있는다.
- 자주 변경 안되는 헤더를 넣는것이 좋다.
폴더에 파일 정리
- 폴더 생성 후 파일을 넣으면 헤더의 경로가 깨지게 된다.
- 프로젝트 속성 - C/C++ - 일반 - 추가 포함 디렉터리 - SFML include 폴더에 .\ 추가 - .\Framework 추가 - $(ProjectDir) 추가
- 이유 : .\가 현재 폴더를 가리키게 되어 현재 폴더를 사용하라는 의미이기 때문이다.
순수 가상 함수 자동 구현
- 상속받은 클래스에 ctrl + ‘.’ : 순수 가상함수가 자동으로 cpp(구현 파일)에 생성된다.
'공부 > SFML' 카테고리의 다른 글
| Draw 우선순위 적용, GameObject 지연 추가 및 삭제, 축 저장 및 해당 축 입력 확인, 축 입력 기능, 축 값 점진적 증가, 마우스 입력, 람다식 sorting 활용, 함수객체 sorting 활용 (5) |
2025.07.03 |
| 씬 매니저, 프레임워크 클래스, 백그라운드 오브젝트, 실수 난수 출력, 트리 (3) |
2025.06.30 |
| vector, iterator, list, LinkedList 자료구조, SFML Framework 준비, InputManager, 싱글턴 디자인 패턴, Resource Manager, map, 비주얼 스튜디오 자체 에러 문제 해결 (3) |
2025.06.26 |
| 이벤트 루프, 문자 UI, 문자열 연결, 타임 바, 사운드, 가속도 (2) |
2025.06.13 |
| 열거형 enum, 상수 const, 키보드 입력 - 이벤트, pressed 처리 (1) |
2025.06.12 |