画像のフェードインのやり方について
受付中
回答 2
投稿
- 評価
- クリップ 0
- VIEW 4,341
//ロゴ画面
//-----------------------------------------------------------------------------
#include "Task_Logo.h"
#include "Task_Brand.h"
namespace Logo
{
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//リソース
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//-----------------------------------------------------------------------------
//安全の為に、追加したリソース用の変数はここで予めゼロクリアしておく
Resorce::Resorce( )
{
this->img = nullptr;
}
//-----------------------------------------------------------------------------
//リソース読み込みはここに書く
bool Resorce::Initalize( )
{
this->img = DG::Image::Create("./data/image/Logo.bmp");
return true;
}
//-----------------------------------------------------------------------------
//リソース解放はここに書く
bool Resorce::Finalize( )
{
this->img.reset();
return true;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//本体
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//-----------------------------------------------------------------------------
//「初期化」タスク生成時に1回だけ行う処理
bool Object::Initialize( )
{
__super::Initialize(defGroupName, defName, true); //スーパークラス初期化
//固有情報の初期化
ge->dg->EState( ).param.bgColor = ML::Color(1,1,1,1);
return true;
}
//-----------------------------------------------------------------------------
//「実行」1フレーム毎に行う処理
void Object::Step( )
{
if( ge->in1->Button_Down(DI::But::○) ){
this->Kill( ); //自分自身に消滅申請
}
}
//-----------------------------------------------------------------------------
//「2D描画」1フレーム毎に行う処理
void Object::Draw2D_BF( )
{
ML::Box2D draw(0, 0, 1920, 1080);
ML::Box2D src (0, 0, 1920, 1080);
draw.Offset(0, 0);
res->img->Draw(draw, src);
}
//-----------------------------------------------------------------------------
//「終了」タスク消滅時に1回だけ行う処理
bool Object::Finalize( )
{
//固有情報の解放
//その他・後処理
//配下の削除
//引き継ぎタスクの生成
auto next = Brand::Object::Create( );
ge->PushBack(next);
return true;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//本体・リソース双方の基本的に変更不要なメソッド
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//-----------------------------------------------------------------------------
//タスク生成窓口
Object::SP Object::Create( )
{
Object::SP ob = Object::SP(new Object( ));
if(ob){
ob->me = ob;
if( ob->B_Initialize( ) ){
return ob;
}
}
return nullptr;
}
//-----------------------------------------------------------------------------
bool Object::B_Initialize( )
{
res = Resorce::GetInst( ); //リソース準備
return this->Initialize( );
}
//-----------------------------------------------------------------------------
Object::~Object( ){ this->B_Finalize( ); }
bool Object::B_Finalize( )
{
auto rtv = this->Finalize( );
res.reset( );
return rtv;
}
//-----------------------------------------------------------------------------
Object::Object( ){ }
//-----------------------------------------------------------------------------
Resorce::WP Resorce::instWPtr;
//-----------------------------------------------------------------------------
Resorce::SP Resorce::GetInst( )
{
if(!instWPtr.expired( )){
return instWPtr.lock( );
}
else{
SP sp = SP(new Resorce( ));
sp->Initalize( );
instWPtr = sp;
return sp;
}
}
//-----------------------------------------------------------------------------
Resorce::~Resorce( ){ this->Finalize( ); }
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
まず、画像をフェードインさせるための基本的な処理方式としては
- 背景と同じ色の四角形を被せてその透明度を「不透明→透明」と変化させる
- 画像そのものの輝度を「暗→明」と変化させる
では、画像の輝度をどうやって変化させるか、というと、全てを自らC言語で記述することも可能なのでしょうが、普通はグラフィックAPIを使用します。その代表例は下記になります。
- Windows なら DirectX
- クラスプラットフォーム なら OpenGL
次に、APIを直接呼び出すことももちろん出来ますけれども、様々なグラフィックライブラリが開発されており、目的に合わせて選んだライブラリを経由してAPIを操作するのが一般的なようです。
Windows環境(DirectX)で **DXライブラリ** を使用した実装例が こちら に掲載されていました。
以上、ご参考になれば幸いです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
DG や ML が何なのか分からないため難しいですが…
ロゴを「移動する」プログラムは書けるでしょうか?
毎フレームごとに、ロゴの位置を計算しながら描画を行います。
例えば、時刻1000~2000の間に、ロゴのx座標を0~1920に移動させるなら、
x = ({現在の時刻} - 1000) * 1920 / (2000 - 1000) で求められます。
それができれば簡単です。
毎フレーム、例えば透明度を計算しながらロゴを描画すればOKです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる