ページ 11

画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 21:49
by Apalis
「ゲームプログラミングの館」様の方で学ばせてもらっているApalisというものです。

ちょっと質問させていただきたいのですが、よろしいでしょうか。

実は画像(.png)を動かせるようにしたいのですが、これを分割等をせずにそのままのを動かすようにするにはどうしたらいいのでしょう?

サイト様のほうには分割したやつを動かせるプログラムしか載っていなかったので少々悩んでおります。

問題の意味がよく分からない場合は言っていただければもっと詳しく話しますので、どうか宜しくお願いします。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 22:26
by AbuherO
LoadGraphScreen( 0 , 0 , "名前" , TRUE ) ;
これ使えばPNGだけ表示可能ですが。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 22:54
by Apalis
返信有難うございます。

そうなんです、「表示」だけならそれで出来るのですが、問題はその表示した画像を「動かす」方法なんです。

サイト様の「19. キャラをキー入力によって移動させる。」には分割した画像を動かす方法しか書かれていないんです。

ですのでどうすればいいのかな~と悩んでいるわけです。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 23:07
by h2so5
分割していない画像でも、左右キー入力時の画像の切り替えが無いだけで
動かし方は基本的に同じですよ。

座標を記憶しておいて、キー入力で座標を移動、そして
graph_main()にて記憶した座標に描画するだけです。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 23:09
by Dixq (管理人)
こんにちは。
ゲームプログラミングの館をご覧くださりありがとうございます。

もしかして、ですが、3Dゲームのモデルのように、手足を自由に動かしたいとかそういう事でしょうか?
それともそのまま画像を上下左右に移動させたいという事でしょうか?

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 23:30
by ライス
表示したい画像の座標をそれぞれ X,Y として、キー入力によってそれぞれ変数X,Yの値を増減させればよいかと思います。
そもそも画像を分割していたのは、アニメーションさせるためだったはずです。
(主人公が全く足を動かさないで地面を移動するのは現実的ではないので^^;)

なので位置以外の動きが変わるもの…キャラクターの歩行など…は画像を分割し、
位置は変わるがそれ以外の動きが変わらないもの…メニュー画面のカーソルなど…は画像を分割しなくても良いと思います。

[hr]
おっと、私がノロノロと書いている途中に他の御方から返事がきちゃいましたね^^;
とりあえず投稿しますが、状況が分からなくなってきたのでもし私が的外れな事を言っているのならば申し訳ございませんm(_ _)m

Re: 画像を分割しないで動かしたい

Posted: 2011年1月05日(水) 23:57
by Apalis
たくさんの返信本当にありがとうございます!

詳しく言うとシューティングゲームもどきみたいなのを作ろうとしていて

そこで機体を上下に動かせるようにしたいと思ったんです。

向きは一方方向のみでいいので画像を分割せずに表示しようとしていたんです。

でも分割して表示した画像の動かし方が書かれていなかったためどうしたらいいかわからなかったんです。

なので、Dixqさんの質問への答えは「そのまま画像を上下左右に移動させたいという事」でまるっきり合っています。

ですのでこのやり方を詳しく教えてもらえたらなと思い、質問させていただきました。

こんな未熟者ですが、どうか宜しくお願いします。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月06日(木) 10:18
by 沖 滉均
ただ1枚の画像を読み込んで上下左右に動かしたいとのことですので19章のコードを使ってということであれば以下のような感じで
9行目は分割読み込みしたグラフィックハンドルを格納しておく配列なので不要
18行目をch.img = LoadGraph("char.png")にしてやれば良い
26行目は分割読み込みしたグラフィックから右向きの画像をch.imgに格納してやってるだけなので不要

で、上下左右に動かしたいのであれば23~24行目のif文のように
それぞれ、KEY_INPUT_DOWN、KEY_INPUT_UP、KEY_INPUT_LEFTについても条件を追加してやればいい
どうすれば上下左右に動くかは23~24行目を参考にx, yの値を変更してやってみてください。

と、このような感じで良いでしょうか?

Re: 画像を分割しないで動かしたい

Posted: 2011年1月08日(土) 22:23
by Apalis
連絡遅くなってしまって済みません。

沖 滉均様の言うとおりにプログラムを書いてみたのですが、

「warning C4700: 初期化されていないローカル変数 'image' が使用されます」

と、出てしまいビルドが出来ません。

どうしたらよろしいでしょうか?

Re: 画像を分割しないで動かしたい

Posted: 2011年1月08日(土) 23:17
by kimuchi
コードを拝見していませんので正確ではないですが、
imageという変数に値が入れられずに何かの処理に使われていることを警告するメッセージです。
しかし、これは警告なのでビルドが出来ない理由にはならないように思えますが・・・
(ですが、障害になっている可能性はあり得ますので直した方が良いです。)

他にエラーメッセージなどはないのでしょうか?

Re: 画像を分割しないで動かしたい

Posted: 2011年1月10日(月) 16:56
by 沖 滉均
Apalis さんが書きました:「warning C4700: 初期化されていないローカル変数 'image' が使用されます」
これは、恐らく前の返信で不要といったところをコード上から削除せずにそのまま使用してしまっているのでしょう。

19章のソースコードから前回の返信で書いた部分(キー処理除く)を反映させると以下のようなものになるはずです

コード:

#include "DxLib.h"

typedef struct{
        int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
       
//  int image[16];//分割読み込みを行ったグラフィックハンドルを格納する配列(不要)
    char Key[256];
    ch_t ch;

    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

    ch.x    =320;
    ch.y    =240;

    SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
//  LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存//ここは分割読み込みを行わないので削除
    ch.img = LoadGraph("char.png");//この行を追加(ファイル名は環境に合わせて変えてください

    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了

        if( Key[ KEY_INPUT_RIGHT ]  == 1 )      //右ボタンが押されたら
            ch.x++ ;                            //xの値を1増やす

//      ch.img=image[12];//この行はグラフィックハンドルの入った配列から右向きの画像を取り出して設定している(不要)

        DrawGraph( ch.x , ch.y , ch.img , TRUE  ) ;

        ScreenFlip();//裏画面を表画面に反映
    }

    DxLib_End();
    return 0;
}
9行目・19行目・20行目・28行目を変更しています。
また、キー処理をご自分で入れる際にch.img = image[xx];(xxは適当な数字)を使用しているのではないでしょうか?
Apalisさんの作成されたコードがないので上記は推測です。
もし作成したコードがあるのであれば貼っていただければ、より正確な返答が可能になると思います。

Re: 画像を分割しないで動かしたい

Posted: 2011年1月10日(月) 20:42
by Apalis
沖 滉均さんのプログラムと照らし合わせてみるとどうやら自分のプログラムではうまく書きなおせていなかったみたいですね。

直したところ、ちゃんと動きました。

これで作業が進みます。

本当り有難うございましたっ!!

またお手数をおかけすることもありますが、これからも宜しくお願いします!