Unique pointer와 Shared Pointer 사용처 차이
- 소유자가 1명으로 명확하다 → unique_ptr (인벤토리 슬롯, 플레이어 장비 등)
- 여러 곳에서 참조해야 한다 → shared_ptr (퀵슬롯 + 인벤토리 동시 참조, 파티원 공유 버프 등)
캐릭터 장비
캐릭터 장비같은 경우는 보통 인벤토리와 equipped를 나눠서 캐릭터에 작성한다.
윈도우 콘솔에 사운드 넣기
#pragma once
#include <windows.h>
#pragma comment(lib, "winmm.lib")
class SoundManager {
public:
static SoundManager& getInstance()
{
static SoundManager instance; // 최초 1회만 생성
return instance;
}
// BGM 재생 (루프)
static void PlayBGM(const wchar_t* filePath);
// 효과음 재생
static void PlaySFX(const wchar_t* filePath);
// 사운드 정지
static void Stop();
private:
// 생성자를 private으로 막음
SoundManager() {};
// 복사/대입도 막음
SoundManager(const SoundManager&) = delete;
SoundManager& operator=(const SoundManager&) = delete;
};
PlaySound 각 매개변수
1. pszSound - 재생할 대상
PlaySound(L"effect.wav", ...) // 파일 경로
PlaySound(NULL, ...) // 재생 중지
2. hmod - 모듈 핸들
// 파일 재생할 때는 그냥 NULL 쓰면 됨
PlaySound(L"effect.wav", NULL, ...)
3. fdwSound - 재생 방식 플래그
SND_FILENAME // 파일 경로로 재생 (거의 필수)
SND_ASYNC // 비동기 (소리 나오면서 코드 계속 진행)
SND_SYNC // 동기 (소리 끝날 때까지 대기)
SND_LOOP // 반복 재생
SND_NODEFAULT // 파일 없어도 기본 비프음 안 냄
Enum Class에 사운드 지정해두고 호출할 때 쓰기
enum class BGM {
Scenario,
Battle
};
void SoundManager::PlayBGM(BGM Bgm) {
switch (Bgm)
{
case(BGM::Scenario) :PlaySound(L"Sound/Medieval Tavern 05.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}
}
플래그 종류
SND_FILENAME // 파일 경로로 재생
SND_ASYNC // 비동기 (소리 나오면서 게임 진행)
SND_SYNC // 동기 (소리 끝날 때까지 멈춤)
SND_LOOP // 반복 재생 (BGM에 사용)
SND_NODEFAULT // 파일 없어도 에러음 안 냄
- SND_LOOP랑 SND_ASYNC 같이 써야 BGM이 반복되면서 게임이 멈추지 않는다!
- WAV 파일만 가능
PlaySound는 첫번째 매개변수가 wchar_t*라서 문자열 앞에 L 붙여서 변환해줘야함
효과음 동시재생 불가능
중간에 멈추고 다시 재생 불가능
동시재생하려면 mciSendString 사용해야함!
더 발전된 방식 (맵/테이블)
std::unordered_map<SFX, std::wstring> soundTable;
soundTable[SFX::Jump] = L"jump.wav";
👉 유지보수 최고
🎵 BGM (배경음)
- 보통 한 번에 하나
- 길게 재생
- 상태 관리 필요 (loop, stop 등)
💥 SFX (효과음)
- 동시에 여러 개 재생됨
- 짧음
- 많이 호출됨
git 저장소 캐시 정리
git fetch # 원격 저장소 최신 정보 가져오기
--prune # 원격에 없어진 브랜치를 로컬 캐시에서 정리
브랜치 삭제하고 나서 기존 내역을 정리하고 싶을 때 사용한다.
'게임 개발 > 프로젝트' 카테고리의 다른 글
| 배경 에셋 관리 일지 (0) | 2026.03.15 |
|---|---|
| 게임 맵 만들어보기 (0) | 2026.02.19 |
| LMS 개발 일지 - 블챌을 시작하며 (2) | 2024.11.03 |