문제

고 싶"에뮬레이트"인기있는 플래시 게임,Chrontron,는 C++에서 필요한 도움을 받기 시작했다.(주의:지 릴리스 단지 연습에 대한 자신)

Basics:
Player has a time machine. On each iteration of using the time machine, a parallel state
is created, co-existing with a previous state. One of the states must complete all the
objectives of the level before ending the stage. In addition, all the stages must be able
to end the stage normally, without causing a state paradox (wherein they should have
been able to finish the stage normally but, due to the interactions of another state,
were not).

그래서,그 종류의 방법을 설명한 게임 작동합니다.당신이해야 한 플레이트를 정말로 이해 무엇이 내 문제입니다.

나는 생각하고 좋은 해결하는 방법이 사용하는 것이 연결 목록을 저장하는 각각 상태 는 것이 아마 어느 해시지도에 기초하여,시간 또는 연결 목록을 반복하는 시간을 기반으로 합니다.난 아직 잘 모르겠.

이제는 내가 약간 거친 스펙,내가 결정하는 도움이 필요하는 데이터 구조에 사용하는 이와 그 이유를 확인합니다.또한,이 무엇인지 알고 싶 그래픽 API/레이어 내가 이렇게 하려면 사용:SDL,OpenGL,또는 다이렉트(현재 선택은 SDL).고 어떻게 갈을 구현하는 방법에 대한 병렬국?와 병행 스레드가?

편집(를 명확히 이상):
OS-윈도우(이 취미 프로젝트 수있다,이 리눅스에서 이상)
그래픽--2D 언어-C++(해야 합 C++--이것이 연습 과정에 대해 다음 학기)

Q 답:SDL:OpenGL:직 X
Q-응답:피 병렬 처리
Q-응답:사용 STL 를 구현하는 시간 단계의 작업입니다.

So far from what people have said, I should:
1. Use STL to store actions.
2. Iterate through actions based on time-step.
3. Forget parallel processing -- period. (But I'd still like some pointers as to how it
could be used and in what cases it should be used, since this is for practice).

추가 질문에,나는 주로 사용하는 C#,PHP,Java 기 전에 그래서 나지 않을 것을 설명하는 나 자신으로 유능한 프로그래머입니다.What C++특정 지식 데이 프로젝트를 위해 쉽게까?(ie.벡터?)

도움이 되었습니까?

해결책

당신이해야 할 것은 먼저 읽고 이해하"수정시간 단계"게임 루프(여기에 좋은 설명: http://www.gaffer.org/game-physics/fix-your-timestep).

그때 당신은 무엇을 유지하는 것입니다 목록의 목록 쌍의 프레임응하고 작업입니다.STL 를 들어:

std::list<std::list<std::pair<unsigned long, Action> > > state;

또 어쩌면 벡터의의 목록은 쌍이다.을 만드는 상태에 대한 모든 행동(플레이어의 상호 작용)저장 프레임 수를과 작업을 수행,대부분은 당신을 얻을 것이 최상의 결과는 경우 행동은 단순히"열쇠 <X> 누르면"또는"열쇠 <X> 발표":

state.back().push_back(std::make_pair(currentFrame, VK_LEFT | KEY_PRESSED));

재생 이전의 상태는,당신을 다시 설정해야 프레임을 카운터는 모든 시간이 플레이어를 활성화 시간이 기계는 다음을 반복하고 국가 목록에 대한 각각의 이전의 상태 및 보면서 모든 현재 프레임입니다.이 있는 경우,작업을 수행한다는 상태입니다.을 최적화할 수 있습 유지의 목록을 반복기를 어디에 있는 각 이전 상태로 목록.여기에 몇 가지 의사 코드 는:

typedef std::list<std::pair<unsigned long, Action> > StateList;
std::list<StateList::iterator> stateIteratorList;
//
foreach(it in stateIteratorList)
{
  if(it->first == currentFrame)
  {
    performAction(it->second);
    ++it;
  }
}

나는 당신이 아이디어를 얻을...

별도의 스레드를 간단하게 복잡하게 상관,크게 이 방법 당신은 같은 결과를 얻을,모든 시간을 보장할 수 없는 별도의 스레드를 사용하여(수 없습니다 정말 어떻게 구현되)또는 비정시간 단계의 게임이다.

에 올 때 그래픽 API,내가 가고 싶은 SDL 로 그것은 아마도 가장 쉬운 일이 있습니다.당신은 항상 사용할 수 있습니다 OpenGL 에서 SDL 나중에 가고 싶은 경우에 3D 입니다.

다른 팁

이 소리는 매우 유사하다 .당신이 정말로 원하지 않는 병렬 처리에 대한 이 병렬 프로그래밍 , 고,무언가를 위해 다음과 같이,성능 해야 되지 않는 문제입니다.

게임 이후 상태 벡터이 매우 빠르게 성장할 것(아마에서 순서의 여러 가지는 해당에 따라 프레임을 평가하고 얼마나 많은 데이터를 저장),당신은 당신을 원하지 않는 링크 목록을 많이 가지고 오버헤드의 관점에서의 공간(수 있습을 소개하는 큰 성능 저하로 인해 캐시 실패하는 경우 그것은 뻗어있는 가난).에 대한 병렬 타임라인을 원하는 벡터 데이터 구조입니다.저장할 수 있습니다 각 병렬 타임라인에 연결된 목록입니다.각 타임라인은 알고있는 어떤 시간에 그것을 시작했다.

게임을 실행하는,당신은 반복을 통해 모든 활동의 일정과 중 하나를 수행하는 프레임의 작업에서 그들 각각의에서는 록.필요한 병렬 처리합니다.

가 있습니다.지 생각한 병렬 처리 방법입니다.공유하고 있는 개체 게임에서(레버를,상자,엘리베이터 등)할 필요가 있는 프로세스 간에 공유 가능성이 매 델타함으로써 효율성의 병렬성을 구할 수 있다.

나 개인적으로 그냥 지키는 작업의 목록,다음 각 후속 반복 시작 인터리브 그들을 함께합니다.예를 들면,목록에서의 형식 <[반복이다.동작]>후 3 시간을 통해 작업 실행 1.1, 2.1, 3.1, 1.2, 2.2, 3.3, etc.

후에 잠시 광을 내기를 통해 설명,나는 당신이 올바른 생각을 가지고있는 것,내가 국가를 보유하는 객체의 상태 데이터를,그리고 이것으로 연결된다 할 필요가 있다고 생각하지 않습 병행 스레드...

는 만큼 그래픽 API,나만 사용 opengl,그리고 말할 수 있는것은 매우 강력하고 좋은 C/C++API,opengl 것도 더 많은 플랫폼으로 사용할 수 있습니다 messa 라이브러리에서 기존 유닉스용 컴퓨터입니다.

매우 흥미로운 게임 아이디어.내가 생각하는 당신은 맞는 parrellel computing 것 benefical 이 디자인,하지만 더 이상 그런 다음 다른 모든 리소스를 프로그램입니다.

문제는 조금 ambigous.나는 당신이 이것을 쓰는 C++에서지만 무엇 OS 은 당신에게 코딩을 위해 그것?당신이 하려는 그것에는 크로스 플랫폼이며 어떤 종류의 그래픽 당신 즉,3D,2D,높은 끝까지,웹 기반으로합니다.

그래서 기본적으로 우리가 필요한 더 많은 정보입니다.

병렬 처리하지 않은 대답합니다.당신은 단순히""레코드 플레이어 동작한 다음 재생들이 다시는"행위"

그래서 당신은 벡터를 만들(단독으로 연결된 목록)의 벡터 보유하는 작업입니다.단순히 저장 프레임 번호는 동작이 수행되었습니다.촬영(또는 델타)및 완료하는 작업에"거짓 로봇"나타내는 동안 플레이어는 특히 인스턴스입니다.당신은 단순히 반복을 통해 미국 및 트리거합니다.

당신의 부작용은 쉽게 끊임을 때 상태 역설이 일어나기 때문에 단순히 다음 작업에 실패합니다.

지 않는 한 당신은 절망적인 사용하는 C++를 당신의 자신의 교육,당신은 확실히 보 XNA 게임&그래픽 framework(사용하여 C#).그것은 완전 무료,그것은 많은 것들을 위해,당신은 곧 당신이 볼 수 있을 판매하는 게임에 Xbox Live.

응답하는 당신의 주요 질문에 아무것도할 수 있는 이미 플래시 것을 사용할 필요가보다 더 하나의 스레드가 있습니다.그냥 목록을 저장의 위치에 배열 및 루프를 통해 다른 오프셋에 대한 각각 로봇입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top