DXライブラリの低速移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
NONON

DXライブラリの低速移動

#1

投稿記事 by NONON » 12年前

BCC DeveloperでDXライブラリを使ってゲームプログラミングを始めてみて
キャラクターの移動ができたので次にSHIFTでの低速移動を実装しようとしてみたところ
うまくいかずに困っています。

どのように直したらいいのか、ヒントでもいいのでよろしければ教えてください。

使っているコンパイラーはbcc32です

コード:

//ライブラリ宣言
#include "DxLib.h"
//定数の宣言
#define PLAYER_SIZE 50
#define PLAYER_SIZE_HALF PLAYER_SIZE/2
#define PLAYER_MOVE_HIGH_SPEED 5
#define PLAYER_MOVE_LOW_SPEED 2.5
#define P_FirstY 240
#define P_FirstX 320
#define A_Firstx 0
#define A_Firsty 0

//WinMain関数
int main( HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
     // DXライブラリの設定
     // SetOutApplicationLogValidFlag(TRUE);
     SetGraphMode(640,480,16);
     ChangeWindowMode( true ) ;
     if( DxLib_Init()==-1) return-1;
     // SetMouseDispFlag( TRUE ) ;
     SetDrawScreen(DX_SCREEN_BACK);
     //変数の宣言と初期化
     int player_position_x=P_FirstX;
     int player_position_y=P_FirstY;
     int Area_x=A_Firstx;
     int Area_y=A_Firsty;
     int area_graph=LoadGraph("windows help.png");
     int player_graph=LoadGraph("Player.png");
     int joypad_state=0;
                                                     
     //メインループ
     while(ProcessMessage()==0)
     {
         //ジョイスティック&キー入力
         joypad_state=GetJoypadInputState(DX_INPUT_KEY_PAD1);
         
         if(KEY_INPUT_LSHIFT!=0){
            
            if((joypad_state&PAD_INPUT_UP)!=0)player_position_y-=PLAYER_MOVE_LOW_SPEED;
            if((joypad_state&PAD_INPUT_DOWN)!=0)player_position_y+=PLAYER_MOVE_LOW_SPEED;
            if((joypad_state&PAD_INPUT_LEFT)!=0)player_position_x-=PLAYER_MOVE_LOW_SPEED;
            if((joypad_state&PAD_INPUT_RIGHT)!=0)player_position_x+=PLAYER_MOVE_LOW_SPEED;
         }
         else{
            if((joypad_state&PAD_INPUT_UP)!=0)player_position_y-=PLAYER_MOVE_HIGH_SPEED;
            if((joypad_state&PAD_INPUT_DOWN)!=0)player_position_y+=PLAYER_MOVE_HIGH_SPEED;
            if((joypad_state&PAD_INPUT_LEFT)!=0)player_position_x-=PLAYER_MOVE_HIGH_SPEED;
            if((joypad_state&PAD_INPUT_RIGHT)!=0)player_position_x+=PLAYER_MOVE_HIGH_SPEED;
            }
            
         //キャラの範囲指定と背景移動
         if(player_position_x>640){
            player_position_x=640;
            Area_x-=5;
            }
         if(player_position_x<0){
            player_position_x=0;
            Area_x+=5;
            }
         if(player_position_y>480){
            player_position_y=480;
            Area_y-=5;
            }
         if(player_position_y<0){
            player_position_y=0;
            Area_y+=5;
            }
                                        
         //キャラの描画
         ClearDrawScreen() ;
         DrawGraph(Area_x,Area_y,area_graph, true);
         DrawGraph(player_position_x-PLAYER_SIZE_HALF,
             player_position_y-PLAYER_SIZE_HALF, player_graph,true);
         ScreenFlip();
         
         // ESCキーが押されたらループから抜ける
         if(CheckHitKey(KEY_INPUT_ESCAPE)==TRUE)break;
     }
     //終了処理
     DxLib_End();
     return 0;
} 

non
記事: 1097
登録日時: 13年前

Re: DXライブラリの低速移動

#2

投稿記事 by non » 12年前

39行目のif(KEY_INPUT_LSHIFT!=0){
が間違っているのじゃないかな。

DXLIBはまともに使ったことがないので、いいかげんですが。
non

nil
記事: 428
登録日時: 12年前

Re: DXライブラリの低速移動

#3

投稿記事 by nil » 12年前

うまくいかず、ということが具体的にどのようなことなのか説明されておられないので私の想像ですが、おそらく
左右で移動速度が違う、ということだと思います。
それはキャラの座標位がint 型で有るためではないでしょうか?
int 型では小数点以下を扱えず、切り捨てられてしまいます

double型にするといいでしょう

NONON

Re: DXライブラリの低速移動

#4

投稿記事 by NONON » 12年前

うまくいかないというのは、このプログラムを実行すると
押してなくても高速状態(速度5)でなく低速状態(速度2)になってしまうということです。
分かりづらくてすいませんでした

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DXライブラリの低速移動

#5

投稿記事 by softya(ソフト屋) » 12年前

NONON さんが書きました:うまくいかないというのは、このプログラムを実行すると
押してなくても高速状態(速度5)でなく低速状態(速度2)になってしまうということです。
分かりづらくてすいませんでした
であれば、押されたことに成るのはnonさんの言われるとおりです。
キーの値は取得しなくてはいけません。

速度が2になるのは涼雅さんの言われる通り整数であるからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

NONON

Re: DXライブラリの低速移動

#6

投稿記事 by NONON » 12年前

無事実装させることができました
ありがとうございました

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DXライブラリの低速移動

#7

投稿記事 by softya(ソフト屋) » 12年前

NONON さんが書きました:無事実装させることができました
ありがとうございました
フォーラムルールに書いてありますが解決した場合のコードの投稿をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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