プレイヤー移動について
プレイヤー移動について
初めまして。ろりがみといいます
今、東方風の縦シューティングを作っています。
なんとか画像表示ができ、動かせるようにはできました。
そこで質問なのですが、移動の際、移動する方向に傾くようにするにはどうすればよいのでしょうか?
一応ソースを貼っておきます
#include "DxLib.h"
typedef struct {
int x, y, img, muki, walking_flag;
} ch_t;
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
int image[24];
char Key[256]; //キーが押されているフレーム数を格納
ch_t ch;
if ( ChangeWindowMode( TRUE ) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
//ウィンドウ化と初期化処理
int flag = 0;
int w = 0;
int i = 0;
int z = 0;
ch.x = 320;
ch.y = 160;
ch.walking_flag = 0;
ch.muki = 3;
SetDrawScreen( DX_SCREEN_BACK );
LoadDivGraph( "画像/sakuya.png", 24, 8, 3, 32, 47, image ); //画像分割読み込み
//メッセージ処理 画面をクリア キーボード入力状態取得 ESCキーで終了
while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ) {
if( flag == 0 ) {
ch.walking_flag = 1; //歩くフラグ
if ( Key[KEY_INPUT_UP] == 1 ) //上
ch.muki = 0;
else if ( Key[KEY_INPUT_LEFT] == 1 ) //左
ch.muki = 1;
else if ( Key[KEY_INPUT_DOWN] == 1 ) //↓
ch.muki = 2;
else if ( Key[KEY_INPUT_RIGHT] == 1 ) //右
ch.muki = 3;
else
ch.walking_flag = 0;
}
if( ch.walking_flag == 1 ) {
if ( ch.muki == 0 ) { //上
ch.img = image[w % 8];
ch.y--;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 1 ) { //左
w = 11;
if( w == 16 ) {
ch.img = image[w % 21];
}
w++;
ch.x--;
} else if ( ch.muki == 2 ) { //↓
ch.img = image[w % 8];
ch.y++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 3 ) { //右
ch.img = image[w % 8];
ch.x++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
}
}
ch.img = image[w];
DrawGraph( ch.x, ch.y, ch.img, TRUE ); //画像描画
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
このソースは、このサイトの、他のスレから取ったものです。
なお、そのスレは未解決のまま止まっていました。
このソースだと、勝手に消えたりするのです。
どうすれば良いのでしょうか?ご回答お願いします
今、東方風の縦シューティングを作っています。
なんとか画像表示ができ、動かせるようにはできました。
そこで質問なのですが、移動の際、移動する方向に傾くようにするにはどうすればよいのでしょうか?
一応ソースを貼っておきます
#include "DxLib.h"
typedef struct {
int x, y, img, muki, walking_flag;
} ch_t;
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
int image[24];
char Key[256]; //キーが押されているフレーム数を格納
ch_t ch;
if ( ChangeWindowMode( TRUE ) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
//ウィンドウ化と初期化処理
int flag = 0;
int w = 0;
int i = 0;
int z = 0;
ch.x = 320;
ch.y = 160;
ch.walking_flag = 0;
ch.muki = 3;
SetDrawScreen( DX_SCREEN_BACK );
LoadDivGraph( "画像/sakuya.png", 24, 8, 3, 32, 47, image ); //画像分割読み込み
//メッセージ処理 画面をクリア キーボード入力状態取得 ESCキーで終了
while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ) {
if( flag == 0 ) {
ch.walking_flag = 1; //歩くフラグ
if ( Key[KEY_INPUT_UP] == 1 ) //上
ch.muki = 0;
else if ( Key[KEY_INPUT_LEFT] == 1 ) //左
ch.muki = 1;
else if ( Key[KEY_INPUT_DOWN] == 1 ) //↓
ch.muki = 2;
else if ( Key[KEY_INPUT_RIGHT] == 1 ) //右
ch.muki = 3;
else
ch.walking_flag = 0;
}
if( ch.walking_flag == 1 ) {
if ( ch.muki == 0 ) { //上
ch.img = image[w % 8];
ch.y--;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 1 ) { //左
w = 11;
if( w == 16 ) {
ch.img = image[w % 21];
}
w++;
ch.x--;
} else if ( ch.muki == 2 ) { //↓
ch.img = image[w % 8];
ch.y++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 3 ) { //右
ch.img = image[w % 8];
ch.x++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
}
}
ch.img = image[w];
DrawGraph( ch.x, ch.y, ch.img, TRUE ); //画像描画
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
このソースは、このサイトの、他のスレから取ったものです。
なお、そのスレは未解決のまま止まっていました。
このソースだと、勝手に消えたりするのです。
どうすれば良いのでしょうか?ご回答お願いします
Re: プレイヤー移動について
#include "DxLib.h"
typedef struct {
int x, y, img, muki, walking_flag;
} ch_t;
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
int image[24];
char Key[256]; //キーが押されているフレーム数を格納
ch_t ch;
if ( ChangeWindowMode( TRUE ) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
//ウィンドウ化と初期化処理
int flag = 0;
int w = 0;
int i = 0;
int z = 0;
ch.x = 320;
ch.y = 160;
ch.walking_flag = 0;
ch.muki = 3;
SetDrawScreen( DX_SCREEN_BACK );
LoadDivGraph( "画像/sakuya.png", 24, 8, 3, 32, 47, image ); //画像分割読み込み
//メッセージ処理 画面をクリア キーボード入力状態取得 ESCキーで終了
while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ) {
if( flag == 0 ) {
ch.walking_flag = 1; //歩くフラグ
if ( Key[KEY_INPUT_UP] == 1 ) //上
ch.muki = 0;
else if ( Key[KEY_INPUT_LEFT] == 1 ) //左
ch.muki = 1;
else if ( Key[KEY_INPUT_DOWN] == 1 ) //↓
ch.muki = 2;
else if ( Key[KEY_INPUT_RIGHT] == 1 ) //右
ch.muki = 3;
else
ch.walking_flag = 0;
}
if( ch.walking_flag == 1 ) { //ここからが問題かなと思っています
if ( ch.muki == 0 ) { //上
ch.img = image[w % 8];
ch.y--;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 1 ) { //左
w = 11;
if( w == 16 ) {
ch.img = image[w % 21];
}
w++;
ch.x--;
} else if ( ch.muki == 2 ) { //↓
ch.img = image[w % 8];
ch.y++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
} else if ( ch.muki == 3 ) { //右
ch.img = image[w % 8];
ch.x++;
i++;
if( i > 8 ) {
w++;
i = 0;
}
}
}
ch.img = image[w];
DrawGraph( ch.x, ch.y, ch.img, TRUE ); //画像描画
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
Re: プレイヤー移動について
57~59行目がおかしいように見受けられます。
wに11を入れて、次のif文で16と同じかを判断してますね。
59行も他の3方向では %8 の8パターンで回しているのに21で剰余してます。
(コピペミスでしょうか?)
傾きに関しては24分割して読み込んでいるpngファイルに傾いているように見えるチップが無いと出来ないとしか言い様がありません。
w = 11;
if( w == 16 ) {
ch.img = image[w % 21];
wに11を入れて、次のif文で16と同じかを判断してますね。
59行も他の3方向では %8 の8パターンで回しているのに21で剰余してます。
(コピペミスでしょうか?)
傾きに関しては24分割して読み込んでいるpngファイルに傾いているように見えるチップが無いと出来ないとしか言い様がありません。
w = 11;
if( w == 16 ) {
ch.img = image[w % 21];
Re: プレイヤー移動について
あ、見れない・・・
R:\とーほーしかこーさい\GameProg_2012\画像\sakuya.png
↑これコピーしてアドレスに張れば見れるはずです
R:\とーほーしかこーさい\GameProg_2012\画像\sakuya.png
↑これコピーしてアドレスに張れば見れるはずです
Re: プレイヤー移動について
見れませんろりがみ さんが書きました:あ、見れない・・・
R:\とーほーしかこーさい\GameProg_2012\画像\sakuya.png
↑これコピーしてアドレスに張れば見れるはずです
そのフォルダはあなたのPCでしか存在しないのです。
投稿するときに、以下のイメージのように、ファイル添付タブを押して、画像をあげてください。
- 添付ファイル
-
- dixq_net_forum_3_t15768_image_1.png (22.24 KiB) 閲覧数: 6663 回
written by へにっくす
Re: プレイヤー移動について
「アドレスに張る」とはどのような操作ですか?ろりがみ さんが書きました:あ、見れない・・・
R:\とーほーしかこーさい\GameProg_2012\画像\sakuya.png
↑これコピーしてアドレスに張れば見れるはずです
その機能は登録(し、ログイン状態である)ユーザーしか使えなかったと思います。へにっくす さんが書きました:投稿するときに、以下のイメージのように、ファイル添付タブを押して、画像をあげてください。
使えない場合は、適当なアップローダーに画像を上げるといいと思います。
アップローダーの例:http://www.axfc.net/uploader/
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: プレイヤー移動について
何で前回ソース見た時に気づかなかったんだろう
全ての元凶はint wだと思う、w++でインクリメントしっぱなしになってますが仕様ですか?
int wには手を入れずに左右の処理を下記のように修正してデバッグしてみて下さい。
左右キーを押し始めた最初の8フレームだけは意図した感じに表示されるはずです。
左処理: ch.img = image[w % 8 + 8]; //8~16 昇順でループ
右処理: ch.img = image[w % 8 + 16]; //17~23 昇順でループ
そこからは意図した通りのグラフィックが描画されるようint wの中身(もしくはimageの添え字)を操作出来るようにソースに追加していけばよいのではないでしょうか。
追記
左右キーを押しっぱなしの状態で描画領域両端or障害物に衝突した場合、グラを傾き状態のままにするか中立状態に戻すのか
操作キーを離した時、傾きは徐々に戻すのか?戻すとしたら、戻す早さは傾く時と同じでいいのか?を考えないと何度もソースを書き直すはめになります。
全ての元凶はint wだと思う、w++でインクリメントしっぱなしになってますが仕様ですか?
int wには手を入れずに左右の処理を下記のように修正してデバッグしてみて下さい。
左右キーを押し始めた最初の8フレームだけは意図した感じに表示されるはずです。
左処理: ch.img = image[w % 8 + 8]; //8~16 昇順でループ
右処理: ch.img = image[w % 8 + 16]; //17~23 昇順でループ
そこからは意図した通りのグラフィックが描画されるようint wの中身(もしくはimageの添え字)を操作出来るようにソースに追加していけばよいのではないでしょうか。
追記
左右キーを押しっぱなしの状態で描画領域両端or障害物に衝突した場合、グラを傾き状態のままにするか中立状態に戻すのか
操作キーを離した時、傾きは徐々に戻すのか?戻すとしたら、戻す早さは傾く時と同じでいいのか?を考えないと何度もソースを書き直すはめになります。
Re: プレイヤー移動について
画面か衝突した場合、グラは傾き状態のままでいいです追記
左右キーを押しっぱなしの状態で描画領域両端or障害物に衝突した場合、グラを傾き状態のままにするか中立状態に戻すのか
操作キーを離した時、傾きは徐々に戻すのか?戻すとしたら、戻す早さは傾く時と同じでいいのか?を考えないと何度もソースを書き直すはめになります。
操作キーを離した時は、傾くときと同じ早さで問題ないです。
えーと・・・初心者なのでまったく理解できません何で前回ソース見た時に気づかなかったんだろう
全ての元凶はint wだと思う、w++でインクリメントしっぱなしになってますが仕様ですか?
int wには手を入れずに左右の処理を下記のように修正してデバッグしてみて下さい。
左右キーを押し始めた最初の8フレームだけは意図した感じに表示されるはずです。
左処理: ch.img = image[w % 8 + 8]; //8~16 昇順でループ
右処理: ch.img = image[w % 8 + 16]; //17~23 昇順でループ
そこからは意図した通りのグラフィックが描画されるようint wの中身(もしくはimageの添え字)を操作出来るようにソースに追加していけばよいのではないでしょうか。
お手数ですがもう一度コードを書き直してもらってもよろしいでしょうか?
Re: プレイヤー移動について
自分でもソースいじってみたら前回指摘した所だけ修正しても動きませんでした。
同時押しした際の挙動が怪しかったのと、操作開始してからしばらく経つとキャラが表示されなくなる挙動をこちらでも確認出来たので色々と書き換えました。
とりあえずコレを理解して、それでも分からない所があったらトピック立て直して質問し直した方が良いと思われます。
後はint wから左右の傾きを求めず左右独立した変数(ch.left,ch.right)を追加して
それぞれ8~15、16~23の範囲で増減を操作出来るようソースを追加するだけなんですが
一度に全部やっちゃうとわけわからなくなるので少しずつ理解していってください。
余裕があったら良書なのでこちらの購入をお勧めします。
著者:大槻有一郎 ISBN978-4-89977-411-2
14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013偏
初期化変数3行、変更&追加 ・変更点
フラグ判定順を上>下>左>右に。
4方向のフラグを1個の変数で管理する為、2進数ビット比較に。
デバッグ中、操作キャラを初期位置へ戻したい時もあるかと思いJキー機能追加(必要なくなったら消してください)
同時押しした際の挙動が怪しかったのと、操作開始してからしばらく経つとキャラが表示されなくなる挙動をこちらでも確認出来たので色々と書き換えました。
とりあえずコレを理解して、それでも分からない所があったらトピック立て直して質問し直した方が良いと思われます。
後はint wから左右の傾きを求めず左右独立した変数(ch.left,ch.right)を追加して
それぞれ8~15、16~23の範囲で増減を操作出来るようソースを追加するだけなんですが
一度に全部やっちゃうとわけわからなくなるので少しずつ理解していってください。
余裕があったら良書なのでこちらの購入をお勧めします。
著者:大槻有一郎 ISBN978-4-89977-411-2
14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013偏
初期化変数3行、変更&追加 ・変更点
フラグ判定順を上>下>左>右に。
4方向のフラグを1個の変数で管理する為、2進数ビット比較に。
デバッグ中、操作キャラを初期位置へ戻したい時もあるかと思いJキー機能追加(必要なくなったら消してください)
{
if (flag == 0) {
ch.walking_flag = 1; //歩くフラグ
if (Key[KEY_INPUT_UP] != 0){ //上
ch.muki = ch.muki | 2;
}
if (Key[KEY_INPUT_DOWN] != 0){ //下
ch.muki = ch.muki | 4;
}
if (Key[KEY_INPUT_LEFT] != 0){ //左
ch.muki = ch.muki | 8;
}
if (Key[KEY_INPUT_RIGHT] != 0){//右
ch.muki = ch.muki | 16;
}
}
if (ch.walking_flag == 1) {
if (ch.muki & 2) { //上
ch.img = image[w % 8];
ch.y--;
ch.muki = ch.muki ^ 2;
}
if (ch.muki & 4) { //下
ch.img = image[w % 8];
ch.y++;
ch.muki = ch.muki ^ 4;
}
if (ch.muki & 8) { //左
ch.img = image[w % 8 + 8];
ch.x--;
ch.muki = ch.muki ^ 8;
}
if (ch.muki & 16) { //右
ch.img = image[w % 8 + 16];
ch.x++;
ch.muki = ch.muki ^ 16;
}
i++;
ch.walking_flag = 0;
}
if (Key[KEY_INPUT_J] != 0){ // 操作キャラの出現位置初期化
ch.x = 320;
ch.y = 120;
}
DrawGraph(ch.x, ch.y, ch.img, TRUE); //画像描画
if (i > 8) {
w++;
i = 0;
}
}
Re: プレイヤー移動について
新しく作成してもらったコードを使うと以下のエラーが発生しました。
・エラー 1 error C1075: 左側 中かっこ '{' に対応するものが 'r:\とーほーしかこーさい\gameprog_2012\test.cpp(32)' で見つかる前に EOF が検出されました。 r:\とーほーしかこーさい\gameprog_2012\test.cpp 85 1 GameProg_2012
・エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません r:\とーほーしかこーさい\gameprog_2012\source.cpp 84 1 GameProg_2012
・エラー 3 error C2059: 構文エラー : 'return' r:\とーほーしかこーさい\gameprog_2012\source.cpp 85 1 GameProg_2012
・エラー 4 error C2059: 構文エラー : '}' r:\とーほーしかこーさい\gameprog_2012\source.cpp 86 1 GameProg_2012
・エラー 5 error C2143: 構文エラー : ';' が '}' の前にありません。 r:\とーほーしかこーさい\gameprog_2012\source.cpp 86 1 GameProg_2012
・エラー 6 IntelliSense: 明示的な型がありません ('int' が想定されます) r:\とーほーしかこーさい\GameProg_2012\Source.cpp 84 5 GameProg_2012
・エラー 7 IntelliSense: 宣言が必要です r:\とーほーしかこーさい\GameProg_2012\Source.cpp 85 5 GameProg_2012
・エラー 8 IntelliSense: 宣言が必要です r:\とーほーしかこーさい\GameProg_2012\Source.cpp 86 1 GameProg_2012
・エラー 1 error C1075: 左側 中かっこ '{' に対応するものが 'r:\とーほーしかこーさい\gameprog_2012\test.cpp(32)' で見つかる前に EOF が検出されました。 r:\とーほーしかこーさい\gameprog_2012\test.cpp 85 1 GameProg_2012
・エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません r:\とーほーしかこーさい\gameprog_2012\source.cpp 84 1 GameProg_2012
・エラー 3 error C2059: 構文エラー : 'return' r:\とーほーしかこーさい\gameprog_2012\source.cpp 85 1 GameProg_2012
・エラー 4 error C2059: 構文エラー : '}' r:\とーほーしかこーさい\gameprog_2012\source.cpp 86 1 GameProg_2012
・エラー 5 error C2143: 構文エラー : ';' が '}' の前にありません。 r:\とーほーしかこーさい\gameprog_2012\source.cpp 86 1 GameProg_2012
・エラー 6 IntelliSense: 明示的な型がありません ('int' が想定されます) r:\とーほーしかこーさい\GameProg_2012\Source.cpp 84 5 GameProg_2012
・エラー 7 IntelliSense: 宣言が必要です r:\とーほーしかこーさい\GameProg_2012\Source.cpp 85 5 GameProg_2012
・エラー 8 IntelliSense: 宣言が必要です r:\とーほーしかこーさい\GameProg_2012\Source.cpp 86 1 GameProg_2012
Re: プレイヤー移動について
なお、コードはこのような感じです
#include "DxLib.h"
typedef struct {
int x, y, img, muki, walking_flag;
} ch_t;
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
int image[24];
char Key[256]; //キーが押されているフレーム数を格納
ch_t ch;
if ( ChangeWindowMode( TRUE ) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
//ウィンドウ化と初期化処理
int flag = 0;
int w = 0;
int i = 0;
int z = 0;
ch.x = 320;
ch.y = 160;
ch.walking_flag = 0;
ch.muki = 3;
SetDrawScreen( DX_SCREEN_BACK );
LoadDivGraph( "画像/sakuya.png", 24, 8, 3, 32, 47, image ); //画像分割読み込み
//メッセージ処理 画面をクリア キーボード入力状態取得 ESCキーで終了
while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ){
if (flag == 0) {
ch.walking_flag = 1; //歩くフラグ
if (Key[KEY_INPUT_UP] != 0){ //上
ch.muki = ch.muki | 2;
}
if (Key[KEY_INPUT_DOWN] != 0){ //下
ch.muki = ch.muki | 4;
}
if (Key[KEY_INPUT_LEFT] != 0){ //左
ch.muki = ch.muki | 8;
}
if (Key[KEY_INPUT_RIGHT] != 0){//右
ch.muki = ch.muki | 16;
}
}
if (ch.walking_flag == 1) {
if (ch.muki & 2) { //上
ch.img = image[w % 8];
ch.y--;
ch.muki = ch.muki ^ 2;
}
if (ch.muki & 4) { //下
ch.img = image[w % 8];
ch.y++;
ch.muki = ch.muki ^ 4;
}
if (ch.muki & 8) { //左
ch.img = image[w % 8 + 8];
ch.x--;
ch.muki = ch.muki ^ 8;
}
if (ch.muki & 16) { //右
ch.img = image[w % 8 + 16];
ch.x++;
ch.muki = ch.muki ^ 16;
}
i++;
ch.walking_flag = 0;
}
if (Key[KEY_INPUT_J] != 0){ // 操作キャラの出現位置初期化
ch.x = 320;
ch.y = 120;
}
DrawGraph(ch.x, ch.y, ch.img, TRUE); //画像描画
if (i > 8) {
w++;
i = 0;
}
}
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
Re: プレイヤー移動について
自分のいじってるソースに組み込む形で編集していた為、相違点がいくつかありましたので独立したソースにて手直し致しました。大変、失礼しました。
ソース全文載せましたのでこれで、動くはずです。
分割読み込みした画像の添え字を初期化する為、LoadDivGraphの位置をそれより前に行移動しましたのでお気を付けください。
ソース全文載せましたのでこれで、動くはずです。
分割読み込みした画像の添え字を初期化する為、LoadDivGraphの位置をそれより前に行移動しましたのでお気を付けください。
#include "DxLib.h"
typedef struct {
int x, y, img, muki, walking_flag;
} ch_t;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
int image[24];
char Key[256]; //キーが押されているフレーム数を格納
ch_t ch;
if (ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1) return -1;
//ウィンドウ化と初期化処理
LoadDivGraph("画像/sakuya.png", 24, 8, 3, 32, 47, image); //画像分割読み込み
int flag = 0;
int w = 0;
int i = 0;
int z = 0;
ch.x = 320;
ch.y = 160;
ch.walking_flag = 0;
ch.muki = 0;
ch.img = image[0]; //分割画像:添え字初期位置
SetDrawScreen(DX_SCREEN_BACK);
//メッセージ処理 画面をクリア キーボード入力状態取得 ESCキーで終了
while (!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {
if (flag == 0) {
ch.walking_flag = 1; //歩くフラグ
if (Key[KEY_INPUT_UP] != 0){ //上
ch.muki = ch.muki | 2;
}
if (Key[KEY_INPUT_DOWN] != 0){ //下
ch.muki = ch.muki | 4;
}
if (Key[KEY_INPUT_LEFT] != 0){ //左
ch.muki = ch.muki | 8;
}
if (Key[KEY_INPUT_RIGHT] != 0){//右
ch.muki = ch.muki | 16;
}
if (ch.muki == 0){
ch.img = image[w % 8];
}
}
if (ch.walking_flag == 1) {
if (ch.muki & 2) { //上
ch.img = image[w % 8];
ch.y--;
ch.muki = ch.muki ^ 2;
}
if (ch.muki & 4) { //下
ch.img = image[w % 8];
ch.y++;
ch.muki = ch.muki ^ 4;
}
if (ch.muki & 8) { //左
ch.img = image[w % 8 + 8];
ch.x--;
ch.muki = ch.muki ^ 8;
}
if (ch.muki & 16) { //右
ch.img = image[w % 8 + 16];
ch.x++;
ch.muki = ch.muki ^ 16;
}
i++;
ch.walking_flag = 0;
}
if (Key[KEY_INPUT_J] != 0){ // 操作キャラの出現位置初期化
ch.x = 320;
ch.y = 120;
}
DrawGraph(ch.x, ch.y, ch.img, TRUE); //画像描画
if (i > 8) {
w++;
i = 0;
}
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
Re: プレイヤー移動について
レス遅れました
えっと、何とか動くようにはなりました。
ちゃんとアニメーションもしています。
ですが、横にずっと動かすと傾きを繰り返してしまいます
なぜでしょうか?
うまく文字で表せないのですが、一定傾くとまた戻って、また傾き始める、といった感じです
えっと、何とか動くようにはなりました。
ちゃんとアニメーションもしています。
ですが、横にずっと動かすと傾きを繰り返してしまいます
なぜでしょうか?
うまく文字で表せないのですが、一定傾くとまた戻って、また傾き始める、といった感じです
Re: プレイヤー移動について
DrawFormatString() や printfDx() などを利用して数値をみて見れば分かるはずです。
ソースコードをよく読んでいないのですが、ch.imgの値を見てみましょう。
ソースコードをよく読んでいないのですが、ch.imgの値を見てみましょう。
初心者です
Re: プレイヤー移動について
質問に直接関係ありませんが、Axfc Uploaderはアダルトサイトのバナーが大量に出るのでこの質問サイトには不向きかと思われるのですが・・・
前にもAxfc Uploaderでアップロードした質問者が管理人副管理人に、小学生もこのサイトを閲覧する可能性がある以上アダルトサイトへのリンクの可能性があるために
対象のリンクを削除された事案を見たのですが・・・
ファイルをあげるのであれば、それらの不健全なバナーが表示されないアップローダーにあげるべきだと思います。
例えばgoogle driveやDropBox等・・・
前にもAxfc Uploaderでアップロードした質問者が管理人副管理人に、小学生もこのサイトを閲覧する可能性がある以上アダルトサイトへのリンクの可能性があるために
対象のリンクを削除された事案を見たのですが・・・
ファイルをあげるのであれば、それらの不健全なバナーが表示されないアップローダーにあげるべきだと思います。
例えばgoogle driveやDropBox等・・・
Re: プレイヤー移動について
先ほどお伝えしたAxfc Uploaderの件ですが
下記↓のトピックにて
http://dixq.net/forum/viewtopic.php?f=3&t=15832
ソフト屋さんが規制していました。
と言うか、 みけCATさん程のお人がこの手のサイトを他の方にお勧めしてはダメでしょう・・・
下記↓のトピックにて
http://dixq.net/forum/viewtopic.php?f=3&t=15832
ソフト屋さんが規制していました。
と言うか、 みけCATさん程のお人がこの手のサイトを他の方にお勧めしてはダメでしょう・・・