2014-11-04 2 views
1

안녕 동료 프로그래머, SDL2의 로딩 화면을 달성하기 위해 노력하고 몇 시간을 소비 한 후SDL2 로딩 화면/스레드

, 우리는 그렇게하지 못했습니다. 우리는 다른 엔티티 (토끼, 나무, 바위 등)에 대해 많은 타일셋/스프라이트를로드해야하는 간단한 2D 개방형 생존 게임을 만듭니다 (토끼, 나무, 바위 등)

처음에는 우리는 한 tileset, 나무 및 배경 타일을 포함합니다. 그러나 이제지도가 '샘플'50x50 타일지도에서 1500x1500 타일지도로 확장되었습니다. 결과 : 게임이 정지 된 것 같았지만 대신 타일/이미지가로드되었습니다.

Google 솔루션 : 현재로드중인 항목의 진행 상태를 표시 할 수있는로드 화면을 만듭니다. 우리 게임은 gamestates (또는 다소 좋아하는) 용 상태 패턴을 사용하기 때문에 PlayState와 LoadingState가 있습니다.

일반 std :: thread를 사용하여 필요한 모든 데이터를로드하고 텍스처로 변환하기로 결정했습니다.

  1. 우리의지도
  2. 프로세스에 대한 검색 데이터를 데이터를 포함하는 JSON 파일을 읽고 그것을
  3. 로드 이미지에서 타일 세트를 만들고 텍스처
를 만들 : 스레드가 정확히 무엇을하는지, 이것이다

모두 스레드없이 작동합니다 (위의 모든 내용을로드하는 '고정'제외).하지만 스레드의 경우 성공/실패와 관련하여 60 %/40 %와 같습니다. 수 시간 동안 검색 한 후에 이유를 찾았습니다 : SDL2 cannot call SDL_CreateTexture가 메인 스레드가 아닌 다른 스레드에서옵니다.

로딩 화면을 표시하는 방법, 위의 모든 작업을 수행하는 방법, 다른 작업을 실행하지 않고 이러한 작업을 수행하는 방법에 대해서는 잘 모르기 때문에 우린 단서가 없습니다. 그러므로 우리의 질문 : 위에서 설명한대로 로딩 화면을 얻을 수있는 방법이 있습니까? 사전에

감사합니다!

+0

논쟁은 아니지만 ... 스플래시 화면을 만들려고 몇 시간을 보냈는데 실패했다면 2D 오픈 월드 생존 게임을 만들 계획입니다. 몇 가지 자습서를 다시 읽었습니다. –

+0

https://bugzilla.libsdl.org/show_bug.cgi?id=1995 – 2501

+0

@MarcoA. 나는 약간 과장되었을 지 모르지만 게임 자체가 작동합니다 (게임 실행). 엔티티의 처리를 처리하기 위해 청크 등을 생성했습니다. 멍청한 점은 간단한 스플래시 화면을 만들고로드 된 비율이 그보다 더 어렵다는 것을 보여주는 것입니다. 다른 말로하면 : 우리 게임이 시작되고 실행 중입니다. 로딩 화면이 아닙니다. –

답변

1
  1. IMG_LoadTexture()를 현재 프레임을 표시 할 때까지 파일의 루프로 호출하십시오.

  2. 진행률을 표시하는 간단한 이미지를 렌더링합니다. 이것은 동일한 스레드에서 수행 한

로드 할 수있는 더 많은 텍스처가있는 경우

  • , 고토.

  • +0

    좀 더 자세히 설명해 주시겠습니까? (구체적으로 1 단계)? –

    +0

    @PimVerlangen 텍스처를 어떻게 만듭니 까? – 2501

    +0

    'SDL_Texture * tileSet = IMG_LoadTexture (렌더러, (RESOURCEPATH + 파일명) .c_str());'. 그런 다음 tileSet이 널 포인터인지 확인합니다. 우리가 현재 가지고있는 스레드로, 이것은 실패/임의의 비율로 성공하는 것 같습니다. –