背景(マップなど)やキャラクターの拡大縮小を行いたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
素人A

背景(マップなど)やキャラクターの拡大縮小を行いたい

#1

投稿記事 by 素人A » 16年前

[1] 質問文
 こんにちは。素人Aと申します。
 3日間も悩んでしまったので投稿(投降ともいう)します。

 背景画像のサイズが画面サイズより大きい場合、
 全体を表示させたりキャラクターがいる範囲を拡大して表示させたりと、
 背景とキャラクターの位置関係を維持したまま、ズームアップしたりズームアウトしたいのですが、
 アルゴリズムが閃きません・・・。
 ヒントでも構いませんのでお教えください。ぺこ <(_ _)>


[2] 環境  
 [2.1] OS : Windows Xp sp3
 [2.2] コンパイラ名 : VC++ 2008EE
[3] その他
 ・どの程度C言語を理解しているか: 龍神録プログラミングの館50章まで。
 ・ライブラリを使っている場合は何を使っているか:DXライブラリ

チルチル

Re:背景(マップなど)やキャラクターの拡大縮小を行いたい

#2

投稿記事 by チルチル » 16年前

少し違いますが参考になるかもしれないので過去ログを・・

http://www.play21.jp/board/formz.cgi?ac ... &rln=34455

Justy

Re:背景(マップなど)やキャラクターの拡大縮小を行いたい

#3

投稿記事 by Justy » 16年前


>背景とキャラクターの位置関係を維持したまま、ズームアップしたりズームアウトしたいのですが

 どう拡大するのかで、細かいところは変わってきますが、行列使えば簡単にできます。
 例えば画面中央で拡大するなら、(作るのが面倒なので)DXライブラリのを使って書くと
[color=#d0d0ff" face="monospace]
struct vector2
{
float x;
float y;
};

void GetScreenScalingVector(vector2 *out, const vector2 &in, float scale)
{
if(!out) return;

MATRIX m, mOut;
CreateIdentityMatrix(&mOut);

CreateTranslationMatrix(&m, in.x-ScreenSize_Width*0.5f, in.y-ScreenSize_Height*0.5f, 0.f);
CreateMultiplyMatrix(&mOut, &mOut, &m);

CreateScalingMatrix(&m, scale, scale, 1.f);
CreateMultiplyMatrix(&mOut, &mOut, &m);

CreateTranslationMatrix(&m, ScreenSize_Width*0.5f, ScreenSize_Height*0.5f, 0.f);
CreateMultiplyMatrix(&mOut, &mOut, &m);

VECTOR vOut, v = {0, 0, 0};
VectorTransform(&vOut, &v, &mOut);
out->x = vOut.x;
out->y = vOut.y;
}
[/color]

という感じの処理で、引数 inに元の座標を、scaleに拡大率を入れると outに結果の位置が
格納されます。

 ちなみに vector2は座標を扱う構造体、ScreenSize_Width / ScreenSize_Heightは画面のサイズです。

 
 DXライブラリのは3D用なので計算コスト的には無駄な部分がありますが、
2D用のを作ればそのあたりは改善できるはずです。

素人A

Re:背景(マップなど)やキャラクターの拡大縮小を行いたい

#4

投稿記事 by 素人A » 16年前

返信ありがとうございます。
過去ログの質問と内容がまったく同じでした。
さっそく試してみたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る