画像をキー入力で移動
画像をキー入力で移動
分割した画像をキー入力で画像を移動させるというのがプログラミングの館であったので、
自分で構造体を作り、自分で作成してみました。しかし、プログラミングの館を参考にしながら作成したにも
関わらず、正常に動作されません。(エラーは起きない。)
#include "DxLib.h"
#include "練習[主人公].h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if(DxLib_Init()==-1)return -1;
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage()==0)
{
ClsDrawScreen() ;
//◇◇◇プログラミング開始◇◇◇
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
if(Key[KEY_INPUT_RIGHT] == 1)
c_character.chief_x ++;
c_character.chief_image = image[11];
DrawGraph(c_character.chief_x , c_character.chief_y , c_character.chief_image , TRUE);
ScreenFlip();
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
}
DxLib_End();
return 0;
}
----------------------------------------------------------------------------------------------------
練習.h
#include "DxLib.h"
struct chief { //主人公の構造体
int chief_x; //主人公のX座標
int chief_y; //主人公のY座標
int chief_image;//主人公の画像(32x32)
int chief_up; //主人公の向き(上)
int chief_down; //主人公の向き(下)
int chief_left; //主人公の向き(左)
int chief_right;//主人公の向き(右)
int chief_stop; //主人公が止まっている
int chief_moves;//主人公が動いている
}c_character;
これで、正常に動作しない原因はなんでしょうか?また、解決法はどうすれば良いでしょうか?
構造体は、使用していない関数(?)があります。
自分で構造体を作り、自分で作成してみました。しかし、プログラミングの館を参考にしながら作成したにも
関わらず、正常に動作されません。(エラーは起きない。)
#include "DxLib.h"
#include "練習[主人公].h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if(DxLib_Init()==-1)return -1;
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage()==0)
{
ClsDrawScreen() ;
//◇◇◇プログラミング開始◇◇◇
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
if(Key[KEY_INPUT_RIGHT] == 1)
c_character.chief_x ++;
c_character.chief_image = image[11];
DrawGraph(c_character.chief_x , c_character.chief_y , c_character.chief_image , TRUE);
ScreenFlip();
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
}
DxLib_End();
return 0;
}
----------------------------------------------------------------------------------------------------
練習.h
#include "DxLib.h"
struct chief { //主人公の構造体
int chief_x; //主人公のX座標
int chief_y; //主人公のY座標
int chief_image;//主人公の画像(32x32)
int chief_up; //主人公の向き(上)
int chief_down; //主人公の向き(下)
int chief_left; //主人公の向き(左)
int chief_right;//主人公の向き(右)
int chief_stop; //主人公が止まっている
int chief_moves;//主人公が動いている
}c_character;
これで、正常に動作しない原因はなんでしょうか?また、解決法はどうすれば良いでしょうか?
構造体は、使用していない関数(?)があります。
Re:画像をキー入力で移動
ちなみに正常に動作しないと言うのは具体的に何が起こっているのですか?
それから
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
if(Key[KEY_INPUT_RIGHT] == 1)
c_character.chief_x ++;
c_character.chief_image = image[11];
の範囲もループの前で行った方が良いと思います
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
は危ない気がするので条件式に加えるか
if( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
としてはどうでしょうか?
あとKey[/url]とCheckHitKey()の2通りあるのはなぜですか?
それとKey[/url]に代入がされていない気がするのですが・・
>プログラミングの館を参考にしながら作成したにも関わらず
少し理解が不足しているようですね・・
それから
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
if(Key[KEY_INPUT_RIGHT] == 1)
c_character.chief_x ++;
c_character.chief_image = image[11];
の範囲もループの前で行った方が良いと思います
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
は危ない気がするので条件式に加えるか
if( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
としてはどうでしょうか?
あとKey[/url]とCheckHitKey()の2通りあるのはなぜですか?
それとKey[/url]に代入がされていない気がするのですが・・
>プログラミングの館を参考にしながら作成したにも関わらず
少し理解が不足しているようですね・・
Re:画像をキー入力で移動
if(CheckHitKey(KEY_INPUT_LALT)==1) if (CheckHitKey(KEY_INPUT_F4)==1) break;は大丈夫では?
特に問題ないかと思います。
まぁ、インデントしといたほうがあとが見やすいですけどね。
#余談
#include "練習[主人公].h"
あんまり日本語ファイル名のヘッダーってみないですよね。
自分だけかもしれないですけど・・・。^^;
Re:画像をキー入力で移動
本題からは外れますが、
> if(CheckHitKey(KEY_INPUT_LALT)==1)
> if (CheckHitKey(KEY_INPUT_F4)==1)
> break;
ALT + F3とか Ctrl + Qとか他の組み合わせならわかるのですが、
ALT + F4ならこれ要らないですよね……。
> if(CheckHitKey(KEY_INPUT_LALT)==1)
> if (CheckHitKey(KEY_INPUT_F4)==1)
> break;
ALT + F3とか Ctrl + Qとか他の組み合わせならわかるのですが、
ALT + F4ならこれ要らないですよね……。
Re:画像をキー入力で移動
皆様返信ありがとうございます。
>ループの前にしてはどうでしょうか?
while(ProcessMessage()==0)
{
の前に入れてもダメでした。
>ちなみに正常に動作しないと言うのは具体的に何が起こっているのですか?
エラーは起こらず普通に起動はするのですが、右キーを押しても、画像が右に移動しません。
多分、if(Key[KEY_INPUT_RIGHT]==1)という部分が怪しいです。
>範囲もループの前で行った方が良いと思います
while(ProcessMessage()==0)
{
の前に入れてもダメでした。
>if( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
をif( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
に書き直してもダメでした。
>あとKey[/url]とCheckHitKey()の2通りあるのはなぜですか?
CheckHitKey()はDXリファレンスを見てやったもので、Key[/url]のほうはプログラミング館にあったので2箇所になってしまいました・・・。また、if(CheckHitKey(KEY_INPUT_RIGHT)==1)
c_character.chief_x ++;
とやってもほんの少しだけ動いただけで(カクッと)だめでした。
>それとKey[/url]に代入がされていない気がするのですが・・
if(Key[KEY_INPUT_RIGHT] == 1)の後に文章を表示する処理をしたところ、正常に表示されませんでした。
なので、 if(Key[KEY_INPUT_RIGHT] == 1) の処理が間違っているように見えます。(一番怪しい箇所)
Key[/url]に代入がされていないとは、どういうことでしょうか。理解力なくてすみません・・・。
>あんまり日本語ファイル名のヘッダーってみないですよね。
英語より日本語のほうが分かるので、分かりやすい日本語にしてみました。"主人公.png"も分かりやすいので日本語です!
>ALT + F3とか Ctrl + Qとか他の組み合わせならわかるのですが、
ALT + F4ならこれ要らないですよね……。
確かにそうですよね・・・。
ALT F4は強制終了なので、一々そんな処理しなくても大丈夫ですよね・・・。
>ループの前にしてはどうでしょうか?
while(ProcessMessage()==0)
{
の前に入れてもダメでした。
>ちなみに正常に動作しないと言うのは具体的に何が起こっているのですか?
エラーは起こらず普通に起動はするのですが、右キーを押しても、画像が右に移動しません。
多分、if(Key[KEY_INPUT_RIGHT]==1)という部分が怪しいです。
>範囲もループの前で行った方が良いと思います
while(ProcessMessage()==0)
{
の前に入れてもダメでした。
>if( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
if(CheckHitKey(KEY_INPUT_LALT)==1)
if (CheckHitKey(KEY_INPUT_F4)==1)
break;
をif( CheckHitKey(KEY_INPUT_LALT)==1 && CheckHitKey(KEY_INPUT_F4)==1 )break;
に書き直してもダメでした。
>あとKey[/url]とCheckHitKey()の2通りあるのはなぜですか?
CheckHitKey()はDXリファレンスを見てやったもので、Key[/url]のほうはプログラミング館にあったので2箇所になってしまいました・・・。また、if(CheckHitKey(KEY_INPUT_RIGHT)==1)
c_character.chief_x ++;
とやってもほんの少しだけ動いただけで(カクッと)だめでした。
>それとKey[/url]に代入がされていない気がするのですが・・
if(Key[KEY_INPUT_RIGHT] == 1)の後に文章を表示する処理をしたところ、正常に表示されませんでした。
なので、 if(Key[KEY_INPUT_RIGHT] == 1) の処理が間違っているように見えます。(一番怪しい箇所)
Key[/url]に代入がされていないとは、どういうことでしょうか。理解力なくてすみません・・・。
>あんまり日本語ファイル名のヘッダーってみないですよね。
英語より日本語のほうが分かるので、分かりやすい日本語にしてみました。"主人公.png"も分かりやすいので日本語です!
>ALT + F3とか Ctrl + Qとか他の組み合わせならわかるのですが、
ALT + F4ならこれ要らないですよね……。
確かにそうですよね・・・。
ALT F4は強制終了なので、一々そんな処理しなくても大丈夫ですよね・・・。
Re:画像をキー入力で移動
すみません。今、プログラムとにらめっこして、間違っている部分を見つけました。
GetHitKeyStateAll( Key ) ; という部分が抜けていました・・・。本当に単純なミスでした・・。
しかし、これを加えても、押している間は、右にちょっと移動するのですが、離すとまた戻ってしまいます。
>それとKey[/url]に代入がされていない気がするのですが・・
この部分が理解できました。 GetHitKeyStateAll(Key)のことですよね。
GetHitKeyStateAll( Key ) ; という部分が抜けていました・・・。本当に単純なミスでした・・。
しかし、これを加えても、押している間は、右にちょっと移動するのですが、離すとまた戻ってしまいます。
>それとKey[/url]に代入がされていない気がするのですが・・
この部分が理解できました。 GetHitKeyStateAll(Key)のことですよね。
Re:画像をキー入力で移動
チルチルさんのアドバイスを実行してみてください。
>英語より日本語のほうが分かるので、分かりやすい日本語にしてみました。
僕も始めたときはそう思ってましたけど、普通はしないですね。
そのうち英語で慣れてきますよ。
今はかなり違和感があって見づらいです。たぶん普通のプログラマーの方もそうなんではないでしょうか。
別に誰にもコードを見せないならそれでいいと思いますけど・・・
>英語より日本語のほうが分かるので、分かりやすい日本語にしてみました。
僕も始めたときはそう思ってましたけど、普通はしないですね。
そのうち英語で慣れてきますよ。
今はかなり違和感があって見づらいです。たぶん普通のプログラマーの方もそうなんではないでしょうか。
別に誰にもコードを見せないならそれでいいと思いますけど・・・
Re:画像をキー入力で移動
>押している間は、右にちょっと移動するのですが、離すとまた戻ってしまいます。
これは「押し続けている間は右にどんどん進んで行くけど、離した瞬間に初期位置に戻る」と言う事でしょうか?
違う場合はもしかしたら「ちょっと移動」と言うのは1ピクセルの事ではないでしょうか?
c_character.chief_x =100;
c_character.chief_y =100;
を現在でもループの前に置いてあるでしょうか?
ループの中に戻している場合は毎フレーム初期位置に戻されてしまいます
右を押している時は戻った後で右に1ピクセル動いているので
押している間だけ右に1ピクセル動くという現象が起きているのではないでしょうか?
あと下の処理はループの前で行ってください
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
c_character.chief_image = image[11];
見た目には変化が無いように見えますが
画像を毎フレーム読み込んでいるので重くなって行くと思います
これは「押し続けている間は右にどんどん進んで行くけど、離した瞬間に初期位置に戻る」と言う事でしょうか?
違う場合はもしかしたら「ちょっと移動」と言うのは1ピクセルの事ではないでしょうか?
c_character.chief_x =100;
c_character.chief_y =100;
を現在でもループの前に置いてあるでしょうか?
ループの中に戻している場合は毎フレーム初期位置に戻されてしまいます
右を押している時は戻った後で右に1ピクセル動いているので
押している間だけ右に1ピクセル動くという現象が起きているのではないでしょうか?
あと下の処理はループの前で行ってください
int image[12];
c_character.chief_x =100;
c_character.chief_y = 100;
LoadDivGraph("主人公.png" , 12 , 3 , 4 , 32 , 32 , image);
c_character.chief_image = image[11];
見た目には変化が無いように見えますが
画像を毎フレーム読み込んでいるので重くなって行くと思います
Re:画像をキー入力で移動
出来ました!ありがとうございます!
ループの中にあったので出来なかったのですか・・。
while(ProcessMessage()==0)
{
の外から行う処理もある・・・ 勉強になりました!
目的は、4方向に斜めありで処理することなので、出来るように頑張ります。
ループの中にあったので出来なかったのですか・・。
while(ProcessMessage()==0)
{
の外から行う処理もある・・・ 勉強になりました!
目的は、4方向に斜めありで処理することなので、出来るように頑張ります。
Re:画像をキー入力で移動
ファイルやファイルパスに全角を使うと自分が今使っている環境じゃないと動かないって可能性があるんですよね。
例えばLinuxで動かすとか、日本語に対応していないOSで使うとか・・。
現に龍神録は一部ファイルパスに全角が含まれていたので、
海外の方から龍神録が自分の環境で遊べないと苦情が何件か寄せられました。
何を思ったのか、練習の為に作ったセーブデータの暗号化ツールの書き出すファイル名が「セーブデータ.dat」だったんですが、面倒だからそのまま使いまわしました・・。
・・その結果がこれd・・・!・・でした^^;
例えばLinuxで動かすとか、日本語に対応していないOSで使うとか・・。
現に龍神録は一部ファイルパスに全角が含まれていたので、
海外の方から龍神録が自分の環境で遊べないと苦情が何件か寄せられました。
何を思ったのか、練習の為に作ったセーブデータの暗号化ツールの書き出すファイル名が「セーブデータ.dat」だったんですが、面倒だからそのまま使いまわしました・・。
・・その結果がこれd・・・!・・でした^^;
Re:画像をキー入力で移動
な、、なるほど!日本語に対応してないOSからですか!
本番(練習じゃないもの)になったら、また新しくファイルを作ろうと思ってるので、多分大丈夫だと思います!
本番(練習じゃないもの)になったら、また新しくファイルを作ろうと思ってるので、多分大丈夫だと思います!