X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 193 (tree) |
|---|---|
| Time | 2018-01-08 16:57:06 |
| Author | |
ミッション終了・リスタートで追加小物の効果音を停止する仕様に変更、DirectSoundにてサウンド解放時に再生が停止しない問題の修正。
| @@ -608,10 +608,6 @@ | ||
| 608 | 608 | int dataid = TOTAL_PARAMETERINFO_SMALLOBJECT+1 -1; |
| 609 | 609 | int cnt = 0; |
| 610 | 610 | |
| 611 | - d3dg->CleanupModel(smallobject_model[dataid]); | |
| 612 | - d3dg->CleanupTexture(smallobject_texture[dataid]); | |
| 613 | - SoundCtrl->CleanupSound(smallobject_sound[dataid]); | |
| 614 | - | |
| 615 | 611 | smallobject_model[dataid] = d3dg->LoadModel(modelpath); |
| 616 | 612 | smallobject_texture[dataid] = d3dg->LoadTexture(texturepath, false, false); |
| 617 | 613 | if( smallobject_model[dataid] == -1 ){ cnt += 1; } |
| @@ -622,6 +618,19 @@ | ||
| 622 | 618 | return cnt; |
| 623 | 619 | } |
| 624 | 620 | |
| 621 | +//! @brief 追加小物のモデル・テクスチャ・サウンドを解放 | |
| 622 | +void ResourceManager::CleanupAddSmallObject() | |
| 623 | +{ | |
| 624 | + if( d3dg == NULL ){ return; } | |
| 625 | + if( SoundCtrl == NULL ){ return; } | |
| 626 | + | |
| 627 | + int dataid = TOTAL_PARAMETERINFO_SMALLOBJECT+1 -1; | |
| 628 | + | |
| 629 | + d3dg->CleanupModel(smallobject_model[dataid]); | |
| 630 | + d3dg->CleanupTexture(smallobject_texture[dataid]); | |
| 631 | + SoundCtrl->CleanupSound(smallobject_sound[dataid]); | |
| 632 | +} | |
| 633 | + | |
| 625 | 634 | //! @brief 弾のモデルとテクスチャを読み込む |
| 626 | 635 | //! @return 成功:0 失敗:1以上 |
| 627 | 636 | int ResourceManager::LoadBulletModelTexture() |
| @@ -114,6 +114,7 @@ | ||
| 114 | 114 | int GetSmallObjectSound(int id); |
| 115 | 115 | void CleanupSmallObjectSound(); |
| 116 | 116 | int LoadAddSmallObject(char *modelpath, char *texturepath, char *soundpath); |
| 117 | + void CleanupAddSmallObject(); | |
| 117 | 118 | int LoadBulletModelTexture(); |
| 118 | 119 | int GetBulletModelTexture(int id, int *model, int *texture); |
| 119 | 120 | void CleanupBulletModelTexture(); |
| @@ -290,7 +290,6 @@ | ||
| 290 | 290 | //サウンドが停止中ならば |
| 291 | 291 | if( (status & DSBSTATUS_PLAYING) == 0x00 ){ |
| 292 | 292 | LPDIRECTSOUND3DBUFFER pDS3DBuffer; |
| 293 | - DWORD status = 0; | |
| 294 | 293 | if( FAILED(pDSBuffer[id][i]->QueryInterface(IID_IDirectSound3DBuffer8, (VOID**)&pDS3DBuffer)) ){ |
| 295 | 294 | //IDirectSound3DBuffer8を取得できない |
| 296 | 295 | return 0; |
| @@ -366,8 +365,18 @@ | ||
| 366 | 365 | if( (id < 0)||(MAX_LOADSOUND -1 < id) ){ return; } |
| 367 | 366 | if( pDSBuffer[id][0] == NULL ){ return; } |
| 368 | 367 | |
| 369 | - //対象の全セカンダリバッファーを解放 | |
| 368 | + DWORD status = 0; | |
| 369 | + | |
| 370 | 370 | for(int i=0; i<MAX_SOUNDLISTS; i++){ |
| 371 | + //再生状況を取得 | |
| 372 | + pDSBuffer[id][i]->GetStatus(&status); | |
| 373 | + | |
| 374 | + //サウンドが再生中ならば停止する | |
| 375 | + if( (status & DSBSTATUS_PLAYING) != 0x00 ){ | |
| 376 | + pDSBuffer[id][i]->Stop(); | |
| 377 | + } | |
| 378 | + | |
| 379 | + //対象のセカンダリバッファーを解放 | |
| 371 | 380 | if( pDSBuffer[id][i] != NULL ){ pDSBuffer[id][i]->Release(); } |
| 372 | 381 | pDSBuffer[id][i] = NULL; |
| 373 | 382 | } |