[완료] 스타크래프트 마린같은게 어떻게 동시에 움직이나요?

avanwz의 이미지

안녕하세요 예전부터 있었던 궁금증인데,

스타에보면 엄청난 유닛들이 전부다 실시간으로 동시에 제각각의 반응과 움직임을 보이잖아요.

이게 어떻게 가능할까요? 멀티쓰레드에 관하여 배웠지만 스타같이 하나의 종족에 인구수가 200을

육박하는 상황에 유닛하나하나에 전부다 쓰레드를 생성하나요? 그 방법은 관리하기가 너무 벅차서

현실적이지 못할것 같습니다. 과연 어떻게 구현되는 걸까요?

unsouled의 이미지

생각하시는 것 처럼 당연히 쓰레드를 쓰지 않습니다.

보통은 무한 루프를 돌면서 게임에서 쓰이는 시간 단위(ex: frame)로 이벤트 폴링을 하며,
각각의 유닛은 이벤트에 맞게 상태를 변경해가며 계속해서 자신의 스프라이트를 화면에 출력하는 식입니다.

자세한 질문은 전공 분야가 아니라서 패스입니다. :)

shint의 이미지

쓰레드 풀'같은걸 사용하지 않을까 생각하네요.
1. 일정한 시간안에 처리된 연산결과를 어떤 버퍼에 저장하고
2. 해당 시간이 되면. 버퍼내용을 렌더링 하는 방식으로요.

스타크래프트를 보면 리플레이가 되는데. 그걸 생각해보면.
연산된 데이터를 저장하고 그 결과를 렌더링 하는걸로 보여집니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

unsouled의 이미지

설명해 놓으신 것은 쓰레드 풀이 아니라 더블 버퍼링입니다. 화면과 똑같은 버퍼를 둬서

하나의 프레임 동안의 연산된 결과를 모두 가상의 버퍼에 그리고 실제 화면에 한 번에 렌더링하는 방식입니다.

semmal의 이미지

차례대로 이뤄집니다.
200개의 유닛이 있다면 1번부터 200번까지 일단 시간당 움직일 수 있는 거리를 움직입니다.
그리고 모든 유닛이 움직이고 나면 화면에 뿌려줍니다.
화면에 뿌리는 속도는 최소한 30frame/sec입니다.
즉, 모든 유닛이 움직이는게 0.03초 이내에 이뤄져야 한다는 거죠.

------------------------------
How many legs does a dog have?

avanwz의 이미지

상당히 리소스를 많이 먹어서 힘들것 같았는데 그런방식이었군요.

대단하네요 그 짧은 시간안에 엄청난 처리가 이루어지다니.

답변 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.