★画像の転送★


転送元、転送先についての説明が終わりましたので、実際に画像を転送してみましょう。


転送元画像の確認


プロジェクトフォルダを開き、Resourceフォルダ→Textureフォルダを開いてください。

ここに「omelette_small.png」というPNG形式の画像ファイルが格納されています。

※もちろん自分でもファイルを追加する事が出来ます。


画像ファイル名の定数化


次にVisual Studioでプロジェクトを開き、「GameBase.h」を開きましょう。

//-----------------------------------------------------------------------------
//ゲーム中で使用するテクスチャ、BGM、SE、フォントのパス付ファイル名を書きます。
//-----------------------------------------------------------------------------
namespace KeyString
{
    const std::string TEXTURE_OMELETTE = "Resource\\Texture\\omelette_small.png";
}

すでに記述されていますが、プロジェクトフォルダからの相対パス指定でファイル名をstringに格納しています。

ここで定数化した「TEXTURE_OMELETTE」と言う名前がプログラム中で使われる名前です。

名前空間「KeyString」に所属していますが、各cppファイルでは「using」指定していますので、このままの名前で使えます。

自分で画像ファイルを追加した場合、こちらに新しい定数を追加する必要があります。


画像ファイルをシステムに追加する


画像ファイルはゲームシステムに追加しなければ使えません。

「SceneGame.h」を開いてください。

Start関数に次のコードを追加します。

//=============================================================================
// シーンの実行時に1度だけ呼び出される開始処理関数
//=============================================================================
void SceneGame::Start()
{
    m_pEngine->AddTexture(TEXTURE_OMELETTE);
}

エンジンクラスのAddTexture関数を呼び出し、画像ファイルをシステムに追加しました。


転送元、転送先座標の設定


続いて、転送元と転送先の座標を設定します。

設定に必要なRECT構造体は、Sceneクラスで用意されていますので宣言する必要はありません。

描画に関するコードは「Draw関数」に記述します。

//=============================================================================
// シーンの実行時に繰り返し呼び出される描画処理関数
//=============================================================================
void SceneGame::Draw()
{
    SetRect(&m_sour, 0, 0, 320, 240);
    SetRect(&m_dest, 0, 0, 320, 240);
}

転送元座標は、↓の転送元画像の写真部分です。

画像サイズは「512×512ピクセル」

転送先座標は、↓のクライアント領域の左上部分になります。

クライアント領域は「640×480ピクセル」

画像の転送


RECT構造体に座標を設定するだけでは、画面には何も表示されません。

画像を転送するためには、エンジンクラスのBlt関数を使います。

//=============================================================================
// シーンの実行時に繰り返し呼び出される描画処理関数
//=============================================================================
void SceneGame::Draw()
{
    SetRect(&m_sour, 0, 0, 320, 240);
    SetRect(&m_dest, 0, 0, 320, 240);
    m_pEngine->Blt(&m_dest, TEXTURE_OMELETTE, &m_sour);
}

これで一旦完成ですので、実際に実行してみましょう。

<実行結果 クライアント領域のみ>

ちゃんと表示されましたか?

表示されない場合は再度プログラムなどをチェックしてください。


画像の解放


今回は1つしかシーンがありませんので、実際には不要なのですが画像の解放についても書いておきます。

1つのシーンで使い終わった画像は、別のシーンで使わない限り解放した方がメモリにも優しいです。

画像を解放する場合は「Exit関数」に書きます。

//=============================================================================
// シーンの終了時に呼び出される終了処理関数
//=============================================================================
void SceneGame::Exit()
{
    m_pEngine->ReleaseTexture(TEXTURE_OMELETTE);
}

これでメモリから解放されます。


次回は色々練習してみましょう。


次へ

戻る

目次へ