トップページ > 過去ログ > 記事閲覧
2Dマップ風で…
名前: 日時: 2008/01/12 07:56

今回も質問です ぶっちゃけプログラム的な事なのですが… 宜しくお願いします m_ _m 【ソース解説・質問】 上下左右に、「PNG画像」を2D的に動かしてます (ぶっちゃけここの「サンプルプログラム」から 拝借してますが……2D的?) そこでジャンプ処理を入れているのですが… 「上下の移動量」が変になってしまいました (左右よりも早く移動してます。しかもジャンプしなくても…) よろしく御教授お願いします (汗汗 #include "DxLib.h" char key[256]; //キー入力用バッファ int i=0,x=0; int PlayerX=0 , PlayerY=0 ; int JumpPower=0 ; int Y_STOP=0; int image[3]; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { if( ChangeWindowMode(TRUE)!= DX_CHANGESCREEN_OK || SetGraphMode( 800 ,600, 16 ) || DxLib_Init() == -1 ) return -1; //初期化処理 LoadDivGraph( 所定の画像ファイル名 ,3, 3, 1, 36,36, image); SetDrawScreen( DX_SCREEN_BACK );//裏画面に設定 //ゲームループ// while(!ProcessMessage() && //メッセージ処理 !ClearDrawScreen() && //画面をクリア !GetHitKeyStateAll(key)&& //キーボード入力状態取得 !(key[KEY_INPUT_ESCAPE]))//ESCが押されていない { i++ ;//画像ループカウンタ if(!key[KEY_INPUT_RIGHT] == 0)//右入力 { PlayerX=PlayerX+5; } else if(!key[KEY_INPUT_LEFT] == 0)//左入力 { PlayerX=PlayerX-5; } else if(!key[KEY_INPUT_DOWN] == 0)//下入力 { PlayerY=PlayerY+5; } else if(!key[KEY_INPUT_UP] == 0)//上入力 { PlayerY=PlayerY-5; } // ジャンプボタンを押していて、地面についていたらジャンプ if( ( key[KEY_INPUT_SPACE] )&& Y_STOP == PlayerY) JumpPower = 20 ; //* 落下処理 Y_STOP -= JumpPower ; // 落下加速度を加える JumpPower -= 1 ; // もし地面についていたら止まる if( Y_STOP > PlayerY ) { Y_STOP = PlayerY ; JumpPower = 0 ; } //アニメーション if( i == 3 ) i = 0 ;//3枚の画像をぶるぶる…w DrawGraph(PlayerX ,PlayerY+Y_STOP , image[ i ] , TRUE ) ; ScreenFlip() ; //裏画面データを表画面へ反映 } DxLib_End(); }

Page: 1 |

Re: 2Dマップ風で… ( No.1 )
名前:SweetBlack 日時:2008/01/13 01:24

ざっとみただけで検証してませんが…… > // もし地面についていたら止まる > if( Y_STOP > PlayerY ) > { > Y_STOP = PlayerY ;     ←←←←←← これで > JumpPower = 0 ; > } > //アニメーション > if( i == 3 ) i = 0 ;//3枚の画像をぶるぶる…w > DrawGraph(PlayerX ,PlayerY+Y_STOP , image[ i ] , TRUE ) ;                 ↑                 ↑                 ↑                これだと Y軸位置が倍になってません?
Re: 2Dマップ風で… ( No.2 )
名前: 日時:2008/01/16 03:00

>SweetBlackさん 拝見だけでも感謝です 正確な結果は… 「地面(ここではY座標)が常に変化(移動)しながらジャンプもする(JumpPower分ジャンプ)」 をして見たいのですが… 確かにコレじゃ倍になってますね、一応確認はして見ました。 っとすると… 「PlayerY値」に「JumpPower値」を単純に足せば良いものなのでしょうか? どうも言葉とプログラムとのギャップが自分の中にはあるので… ・・;
Re: 2Dマップ風で… ( No.3 )
名前:SweetBlack 日時:2008/01/16 12:41

まずDさんがどのような完成図を想定されて 作られているのかが解りませんが……。 1)見下ろし型マップ   画面はすべて地面で、その上をキャラが東西南北に移動したり、   ジャンプしたりする。 2)サイドビュー   エレベーターのような動かせる地面に乗っていて、   上下左右に動かせる上、ジャンプもできる。 で……私なら…… 1)の場合なら、「PlayerZ値」という高さを表す変数を追加して、   ジャンプによる座標変化はこのZ値で行い、   Y値+Z値で表示する。 2)の場合なら、「地面の高さ」を表す変数を追加して、   ジャンプによる座標変化は直接「PlayerY値」で行い、   そのY値が「地面の高さ」より低くなった時にジャンプを終了するようにする。 って感じでしょうか。
1)……です ( No.4 )
名前: 日時:2008/01/17 04:23

コレマタ分かりやすい説明を…m_ _m; なるほど… 後は ジャンプ処理と移動処理を絡めれば良い いい訳ですね 移動量+ジャンプ値=Y座標 (PlayerY+JumpPower=Y座標) 何とか頑張ってみます ・ ・ゝ

Page: 1 |