ゲームで使いたい画像ファイルは「Assets」フォルダの中に入れておく。
フォルダの中にさらにフォルダを作っても良い。
使えるファイル形式はいろいろあるが
・JPEG(圧縮率を変えられるので大きな画像には向いているが、べた塗り部分が汚くなる)
・PNG(ファイルサイズは大きくなるが半透明も使える)
大体この2択。
タイトル画像などの大きな1枚絵はJPEG、それ以外はPNGくらいの考えで良い。
画像は何らかのゲームオブジェクトとして登場するので、すでに作成済みのゲームオブジェクトクラス内に処理を書く。
例えば、Playerクラスで画像を表示する場合で説明する。
画像は全て番号で管理するので、その番号を入れる変数を用意する。(名前は何でもOK)
<Player.h> (太字部分を追加)
#pragma once#include "Engine/GameObject.h"class Player : public IGameObject{private: int hPict_; //画像番号public:クラスのメンバ変数を作ったら、必ずコンストラクタで初期化する。
画像の番号は0以上(0も含む)の値になるので-1にしておく。
<Player.cpp> (太字部分を追加)
Player::Player(IGameObject * parent) :IGameObject(parent, "Player"), hPict_(-1){}次に画像ファイルをロードする。
#include "Engine/Image.h" : : :void Player::Initialize(){ //画像データのロード hPict_ = Image::Load("ファイル名"); assert(hPict_ >= 0);}Image::Loadが画像をロードする関数で、引数にファイル名(Assets以降のフォルダ名含む)を指定する。
そのためには、Image.hのインクルードが必要になる。
これでhPict_に画像の番号が入るが、ファイル名を間違っているなどしてロードできなかった場合は-1が入る。
ロードすれば描画できる。
void Player::Draw(){ Image::SetTransform(hPict_, transform_); Image::Draw(hPict_);}これで、絵が画面に表示されるはず。(もちろんゲームオブジェクトがゲームに登場しているのが前提)
Image::SetTransformは表示する位置やサイズを設定するもので、第1引数は画像の番号、第2引数は特に気にせずtransform_と書く。
Image::Drawが実際に画面に絵を表示する。引数が表示したい画像の番号。
画像全体ではなく、一部分だけ表示したい場合がある。
そんな時は次のように書く。
Image::SetRect(hPict_, 50, 100, 64, 128);Image::SetRect関数は画像の描画範囲を指定する関数で、
引数は左から順に「画像番号」「左」「上」「幅」「高さ」を指定する。
一度指定すれば、再度違う値を指定するまでこの範囲だけ表示される。
切り抜き範囲をリセットして全体を表示したい場合は
Image::ResetRect(hPict_);と書く。
画像を半透明で表示したい場合は次のように書く。
Image::SetAlpha(hPict_, 128);第2引数がアルファ値(不透明度)で、0~255で指定します。(0が透明、255が不透明)