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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Apalis
記事: 5
登録日時: 14年前

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

#1

投稿記事 by Apalis » 14年前

「ゲームプログラミングの館」様の方で学ばせてもらっているApalisというものです。

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

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

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

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

AbuherO

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

#2

投稿記事 by AbuherO » 14年前

LoadGraphScreen( 0 , 0 , "名前" , TRUE ) ;
これ使えばPNGだけ表示可能ですが。

Apalis
記事: 5
登録日時: 14年前

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

#3

投稿記事 by Apalis » 14年前

返信有難うございます。

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

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#4

投稿記事 by h2so5 » 14年前

分割していない画像でも、左右キー入力時の画像の切り替えが無いだけで
動かし方は基本的に同じですよ。

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

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

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

#5

投稿記事 by Dixq (管理人) » 14年前

こんにちは。
ゲームプログラミングの館をご覧くださりありがとうございます。

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

ライス
記事: 11
登録日時: 14年前
住所: 鹿児島県

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

#6

投稿記事 by ライス » 14年前

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

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

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

Apalis
記事: 5
登録日時: 14年前

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

#7

投稿記事 by Apalis » 14年前

たくさんの返信本当にありがとうございます!

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

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

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

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

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

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

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

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

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

#8

投稿記事 by 沖 滉均 » 14年前

ただ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の値を変更してやってみてください。

と、このような感じで良いでしょうか?
There is no royal road to learning.
codeタグで指定できる言語
画像

Apalis
記事: 5
登録日時: 14年前

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

#9

投稿記事 by Apalis » 14年前

連絡遅くなってしまって済みません。

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

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

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

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

アバター
kimuchi
記事: 163
登録日時: 14年前
住所: 東京

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

#10

投稿記事 by kimuchi » 14年前

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

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

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

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

#11

投稿記事 by 沖 滉均 » 14年前

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さんの作成されたコードがないので上記は推測です。
もし作成したコードがあるのであれば貼っていただければ、より正確な返答が可能になると思います。
There is no royal road to learning.
codeタグで指定できる言語
画像

Apalis
記事: 5
登録日時: 14年前

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

#12

投稿記事 by Apalis » 14年前

沖 滉均さんのプログラムと照らし合わせてみるとどうやら自分のプログラムではうまく書きなおせていなかったみたいですね。

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

これで作業が進みます。

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

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

閉鎖

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