PAD_INPUT

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

PAD_INPUT

#1

投稿記事 by trx » 16年前

40a.番の、キーを押して判断の、所をPAD_INPUT_○○などとしたい時には、どこに、何を入れれば良いのでしょうか?これは、PLAYSTATION2のコントローラーを、使って動かしたいと、思っています。他に、14歳からはじめるC言語わくわくゲームプログラミング教室と言う本を使っていますがその本に付いて来たCDの中に、コンパイル済みのデータが入っており、そのゲームでは、コントローラーは、動きました。回答よろしくの願いします。

kazuoni

Re:PAD_INPUT

#2

投稿記事 by kazuoni » 16年前

一番身近には、

http://dixq.net/rp/8.html

PADとキー監査を一緒に行う関数があります。

trx

Re:PAD_INPUT

#3

投稿記事 by trx » 16年前

もしもこのような場合キーを押す時をパッドに変えるには、どこを変えるのですか?

kazuoni

Re:PAD_INPUT

#4

投稿記事 by kazuoni » 16年前

まず、PADとキーの対応関係を明らかにしてください。
PADの入力は本家を参照してください。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N4
例えば、PAD_INPUT_AとKEY_INPUT_Xを同じものとして扱いたいなど。
また、これを扱うなら先ほど挙げた龍神録解説ページが詳しいので、参照してください。
ちょっと長いかも知れませんが、読んでしまえば、丸々使えます。

もしキーとPADの入力を分けるなら、単にGetHitKeyStateAll_2
のキー監査256個に自分が入力状態を得たいPADキー分増やせば良いです。
が、これだとPADを持っていない人は遊べなくなるので、意味無いですね^^;

trx

Re:PAD_INPUT

#5

投稿記事 by trx » 16年前

ありがとうございます。

hss12

Re:PAD_INPUT

#6

投稿記事 by hss12 » 16年前

変えるところはいくつかありますが、例えば

if( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_UP ) 上を押した時の処理 ;

のように書くことができます。
DX_INPUT_KEY_PAD1ならパッドとキーボード両方使えます。
14歳の本を持っているのなら詳しく説明されていたと思いますが。
ちなみにこれだとキーコンフィグはできないです。

hss12

Re:PAD_INPUT

#7

投稿記事 by hss12 » 16年前

解決後の投稿で申し訳ないですが、気になって作ってみたのでせっかくなので載せてみます。
ゲームプログラミングの館の40節のプログラムのゲームパッド版です。
もちろんhttp://dixq.net/rp/8.htmlのキーコンフィグ対応のほうが良いのでしょうが
少し飛躍していて分かりにくいですし、簡単なゲームなら必要ないと思いますので
40cにパッドについても加筆されてはどうでしょうか、管理人様。

DX_INPUT_KEY_PAD1にしてますのでパッドがなくてもキーボードでも動作します。
キーボードは別でパッドだけにするならDX_INPUT_PAD1として下さい。
#include "DxLib.h"
#define PAD_MAX 16

unsigned int KeyPad[PAD_MAX];

int GetHitPadStateAll_2(){
  int PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 );//パッドの入力状態を取得
  for(int i=0; i<PAD_MAX; i++){
    if( PadInput & 1<<i)KeyPad++;//押されていたらカウントアップ
    else  	     KeyPad=0;//押されてなかったら0
  }
  return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
  ChangeWindowMode(TRUE);//ウィンドウモード
  if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
  while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitPadStateAll_2()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
          //↑メッセージ処理         ↑画面をクリア            ↑入力状態を保存       ↑ESCが押されていない

    for(int i=0; i<PAD_MAX; i++)
      DrawFormatString(0, 20*i, GetColor(255,255,255), "ボタン%d:%u", i, KeyPad);

    if(KeyPad[3]==1)//ボタン3(上)が押された瞬間
      DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示
    //if(KeyPad[3]>0) 押されている間の処理;
    //if(KeyPad[3]>10) 長押しされている時の処理;

    ScreenFlip();
  }
 
  DxLib_End();
  return 0;
}

閉鎖

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