[κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ 루프 νŒ¨ν„΄(Game Loop Pattern)

2022. 4. 16. 19:06Β·πŸ“ Computer Science/✏ Design Pattern

κ²Œμž„ λ£¨ν”„ νŒ¨ν„΄(Game Loop Pattern)

 

λ¨Όμ € μš”μ•½ν•˜μžλ©΄ κ²Œμž„ 루프 νŒ¨ν„΄μ΄λž€ κ²Œμž„ 진행을 μœ μ € μž…λ ₯, ν”„λ‘œμ„Έμ„œ 속도와 λ””μ»€ν”Œλ§ ν•˜λŠ” 것이닀.

더 μ‰½κ²Œ λ§ν•˜μžλ©΄ μž…λ ₯이 없어도 ν”„λ‘œμ„Έμ„œκ°€ 잘 λŒμ•„κ°„λ‹€λŠ” 말이닀.

이 νŒ¨ν„΄μ€ νŠΉμˆ˜ν•˜μ—¬ κ²Œμž„ λΆ„μ•Ό μ™Έμ—μ„œλŠ” μ°Ύμ•„λ³΄κΈ°λŠ” νž˜λ“€μ§€λ§Œ μ‹€μ œλ‘œ 많이 쓰이고 μžˆλ‹€. (μœ λ‹ˆν‹° λ“± κ²Œμž„ μ—”μ§„)

 

μ˜ˆμ „ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μ½”λ“œλ₯Ό λͺ¨λ‘ 짜고 λ‚˜μ„œμ•Ό ν”„λ‘œκ·Έλž¨μ„ 돌릴 수 μžˆμ—ˆλ‹€. 즉, 쀑간에 ν™•μΈν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯ν–ˆλ‹€. 이런 ν”„λ‘œκ·Έλž¨μ„ 배치 λͺ¨λ“œ ν”„λ‘œκ·Έλž¨μ΄λΌκ³  ν•˜λŠ”λ°, λͺ¨λ“  μž‘μ—…μ΄ λλ‚˜κ³  λ‚˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ λ©ˆμΆ˜λ‹€. μ—¬κΈ°μ„œ λ‚˜μ˜€λŠ” λ¬Έμ œμ μ€ λ””λ²„κΉ…ν•˜λŠ” 데도 였래 κ±Έλ € 생산성이 λ–¨μ–΄μ§€κ²Œ λœλ‹€λŠ” 점이닀.

 

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λŒ€ν™”ν˜• ν”„λ‘œκ·Έλž¨μ΄ λ‚˜μ™”λ‹€. ν”Œλ ˆμ΄μ–΄μ˜ μž…λ ₯을 κΈ°λ‹€λ Έλ‹€κ°€ μ‘λ‹΅ν•˜λ©΄ λ‹€μ‹œ μ§„ν–‰λ˜λŠ” 방식이닀. μ΄λŸ¬ν•œ 방식은 μ—¬μ „νžˆ μ—¬λŸ¬ λΆ„μ•Όμ—μ„œ 쓰이고 μžˆλ‹€. λ‹¨μ μœΌλ‘œ μ›Œλ“œ ν”„λ‘œμ„Έμ„œλ§Œ 봐도 μ‚¬μš©μž μž…λ ₯을 λ¬΄ν•œ λŒ€κΈ°ν•œλ‹€.

 

while (true) 
{
    Event* event = waitForEvent();
    dispatchEvent(event);
}

 

λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄μ™€λŠ” 달리 κ²Œμž„μ€ μœ μ € μž…λ ₯이 없어도 계속 λŒμ•„κ°€μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¬μŠ€ν„°κ°€ λ‚˜μ˜€λŠ” ν•„λ“œμ— κ°€λ§Œνžˆ μžˆμ–΄λ„ λͺ¬μŠ€ν„°λŠ” ν”Œλ ˆμ΄μ–΄λ₯Ό 계속 λ•Œλ €μ„œ μ–Έμ  κ°€ μ‚¬λ§ν•˜κ²Œ λ§Œλ“ λ‹€. κ²Œμž„ λ£¨ν”„μ˜ 핡심은 λ£¨ν”„μ—μ„œ μ‚¬μš©μž μž…λ ₯을 μ²˜λ¦¬ν•˜μ§€λ§Œ 마λƒ₯ 기닀리고 μžˆμ§€ μ•ŠλŠ”λ‹€λŠ” 점이닀. 즉, 항상 λŒμ•„κ°€λ©° Input을 μˆ˜μ‹œλ‘œ λ°›μœΌλ©΄μ„œλ„ Updateλ₯Ό μˆ˜μ‹œλ‘œ λ°›μœΌλ©΄μ„œ ν”„λ ˆμž„λ§ˆλ‹€ λ Œλ”λ§μ„ ν•œλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ κ²Œμž„ μ›”λ“œμ—μ„œ μ‹œκ°„κ³Ό ν˜„μ‹€ μ‹œκ°„μ€ λΆ„λͺ… λ‹€λ₯Έλ° μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν• κΉŒ?

루프가 μž…λ ₯을 기닀리지 μ•ŠλŠ”λ‹€λ©΄ 루프가 λ„λŠ”λ° μ–Όλ§ˆλ‚˜ κ±Έλ¦¬λŠ”μ§€κ°€ μ€‘μš”ν•˜λ‹€. λ§Œμ•½ 루프가 κΈΈλ‹€λ©΄ μ‚¬μš©μž μž…λ ₯이 듀어와도 λ°›μ§€ μ•Šμ€ κ²ƒμ²˜λŸΌ μ²˜λ¦¬λ˜λŠ” κ²½μš°κ°€ 생길 것이닀. 이 μ‹œκ°„μ„ FPS라고 ν•˜λ©° μΌμ΄ˆλ‹Ή ν”„λ ˆμž„μœΌλ‘œ κ³„μ‚°ν•œλ‹€. FPSκ°€ λ†’μ„μˆ˜λ‘ λΆ€λ“œλŸ½κ³  λΉ λ₯Έ 화면을 보여쀀닀.

 

μ—¬κΈ°μ„œ ν”„λ ˆμž„ 레이트의 값을 κ²°μ •ν•˜λŠ” 것도 μ€‘μš”ν•˜λ‹€.

  • ν•œ ν”„λ ˆμž„ μ•ˆμ—μ„œ μ–Όλ§ˆλ‚˜ λ§Žμ€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”κ°€? 물리 계산이 λ³΅μž‘ν•˜κ³  μ˜€λΈŒμ νŠΈκ°€ λ§Žμ„μˆ˜λ‘ CPU, GPUκ°€ μž‘μ—…ν•  것듀이 λ§Žμ•„μ§„λ‹€.
  • μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” ν”Œλž«νΌμ˜ μ†λ„λŠ”? ν•˜λ“œμ›¨μ–΄ 속도가 λΉ λ₯΄λ‹€λ©΄ 같은 μ‹œκ°„μ— 더 λ§Žμ€ μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€.

이외에도 ν”„λ ˆμž„ 레이트λ₯Ό κ²°μ •ν•˜λŠ” μš”μΈμ€ λ„ˆλ¬΄ λ§Žλ‹€. κ·Έλž˜μ„œ ν”„λ ˆμž„μ„ κ³ μ •μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. μ™œλƒν•˜λ©΄ λͺ¨λ“  ν•˜λ“œμ›¨μ–΄κ°€ λ˜‘κ°™μ€ 속도λ₯Ό 보μž₯ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ κ²Œμž„ λ£¨ν”„μ—μ„œλŠ” μΌμ •ν•œ μ†λ„μ—μ„œ 싀행될 수 μžˆλ„λ‘ 보μž₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

κ³ μ • ν”„λ ˆμž„μ„ μ„€μ •ν•˜λ”λΌλ„ κ²Œμž„μ΄ 잘 μž‘λ™λ˜λ„λ‘ ν•˜λ €λ©΄, ν”„λ ˆμž„μ— 따라 μ‹€μ œ μ‹œκ°„μ„ 따라가도둝 ν•΄μ•Ό ν•œλ‹€. 즉, ν”„λ ˆμž„ μ΄ν›„λ‘œ μ‹€μ œ μ‹œκ°„μ΄ μ–Όλ§ˆλ‚˜ μ§€λ‚¬λŠ”μ§€μ— 따라 μ‹œκ°„ 간격을 μ‘°μ ˆν•΄μ•Ό ν•œλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ 방식은 μ™„λ²½ν•˜μ§€ μ•Šλ‹€. 보톡 κ²Œμž„μ—μ„œλŠ” 뢀동 μ†Œμˆ˜μ (float)을 μ“°κΈ° λ•Œλ¬Έμ— 반올림 μ˜€μ°¨κ°€ 생기기 λ§ˆλ ¨μ΄λ‹€. 컴퓨터 속도에 따라 반올림 μ˜€μ°¨κ°€ 컀지면 였브젝트의 μœ„μΉ˜κ°€ μ»΄ν“¨ν„°λ§ˆλ‹€ λ‹€λ₯΄κ²Œ 보일 것이닀. 이외에도 화면에 λΉ„μΆ”λŠ” λ Œλ”λ§ λΉˆλ„ 동기화, λ©€ν‹° μŠ€λ ˆλ”© λ“± μ—„μ²­λ‚œ μ΅œμ ν™”λ₯Ό κ±°λ“­ν•΄μ„œ κ²Œμž„ 루프λ₯Ό μ™„μ„±ν•΄μ•Ό ν•œλ‹€.

 

κ·Έλž˜μ„œ λŒ€λΆ€λΆ„μ€ 직접 κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  이미 κ΅¬ν˜„λœ 엔진을 μ“΄λ‹€...

 

https://luv-n-interest.tistory.com/1104?category=996592 

 

Game Loop Pattern, κ²Œμž„ 루프 νŒ¨ν„΄ ** [λ””μžμΈνŒ¨ν„΄]

μš”μ•½ν•˜μžλ©΄ κ²Œμž„ μ‹œκ°„ 진행을 μœ μ € μž…λ ₯, ν”„λ‘œμ„Έμ„œ 속도와 λ””μ»€ν”Œλ§ν•˜λŠ” 것이닀. 더 μ‰½κ²Œ λ§ν•˜μžλ©΄ μž…λ ₯이 없어도 ν”„λ‘œμ„Έμ„œκ°€ 잘 λŒμ•„κ°„λ‹€λŠ” 말이닀. **μ €μžλŠ” 이 νŒ¨ν„΄μ΄ κ°€μž₯ μ€‘μš”ν•˜κ³  많이 μ“°

luv-n-interest.tistory.com

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Computer Science/✏ Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄
  • [κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] 더티 ν”Œλž˜κ·Έ νŒ¨ν„΄(Dirty Flag Pattern)
  • μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)
  • MVC νŒ¨ν„΄
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[κ²Œμž„ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄] κ²Œμž„ 루프 νŒ¨ν„΄(Game Loop Pattern)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”