|
|
2021/11/6(Sat) 18:07:34|NO.94313
一つのゲームで複数のゲームパッド入力を処理するってできますでしょうか、対戦ゲームとかで。
簡単に方法も教えていただけると幸いです。
|
|
2021/11/6(Sat) 20:26:15|NO.94314
WinAPIのjoyGetPosExを使えばジョイスティックの状態が取得できるので、
それを使えば良いのではないかと。
#include "winmm.as"
dim joy,13,2 //ジョイスティック情報取得のため、要素数が13の整数配列を用意
//joy(p1,p2)のうち、p1は情報番号、p2は1Pか2Pかをあらわす。(0が1P、1が2P)
repeat 2 : joy(0,cnt)=52 : joy(1,cnt)=255 : loop //情報番号0にあたる部分には52を、1には255を代入しておく
repeat
//ジョイスティックの状態を取得
joyGetPosEx 0,varptr(joy(0,0)) //第1パラメータにはジョイスティックのポート番号を指定。環境に合わせて数値を変えてください。
joyGetPosEx 1,varptr(joy(0,1)) //2P用
//以下、取得した情報を表示してみる。
redraw 0 : color 255,255,255 : boxf : color 0,0,0
repeat 2
x=320*cnt : pos x,0
mes "XPOS:"+joy(2,cnt)
mes "YPOS:"+joy(3,cnt)
mes "ZPOS:"+joy(4,cnt)
mes "RPOS:"+joy(5,cnt)
mes "UPOS:"+joy(6,cnt)
mes "VPOS:"+joy(7,cnt)
a=joy(8,cnt)
mes "ボタン:"+a
repeat 32
mes (a>>(31-cnt))&1,1
loop
mes : pos x,ginfo_cy
mes "ボタン同時押し数:"+joy(9,cnt)
mes "POV:"+joy(10,cnt)
loop
redraw 1
await 16
loop
|
|
2021/11/6(Sat) 20:37:31|NO.94315
mod_joystick2.as のjstick命令の p3:ポート番号 を指定するだけです。
ポート番号は 0 以上の整数値で、接続されたゲームパッドを識別するための番号です。
#include "mod_joystick2.as"
*main
redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0
repeat 16
jstick key,0xFFFFFFFF,cnt
mes key
loop
goto *main
って解答したかったんですがだめでした。
複数のゲームパッドを探した際に発生するエラーの処理がうまく行っていないようです。
1回エラーが出たら次以降は、取得した値を返す前にreturnしてますね。
同モジュールの joyGetPosEx 命令を使うか、こちらのモジュールをお使いください。
PAD設定さん
https://mclab.uunyan.com/dl/dl11.htm
|
|
2021/11/6(Sat) 21:33:34|NO.94316
ジョイスティックを探すところからやるのなら、こういう形ならどうでしょうか。
#include "winmm.as"
dim joy,13,2 //ジョイスティック情報取得のため、要素数が13の整数配列を用意
//joy(p1,p2)のうち、p1は情報番号、p2は1Pか2Pかをあらわす。(0が1P、1が2P)
repeat 2 : joy(0,cnt)=52 : joy(1,cnt)=255 : loop //情報番号0にあたる部分には52を、1には255を代入しておく
//ジョイスティックを探す
j_num=0 //ジョイスティックの数
dim j_id,2 //見つかったジョイスティックのポート番号
repeat 16
joyGetPosEx cnt,varptr(joy(0,0))
if stat=0 {
j_id(j_num)=cnt
j_num++
if j_num=2 : break
}
loop
if j_num=0 : dialog "ジョイスティックが見つかりませんでした" : end
repeat
//ジョイスティックの状態を取得
repeat j_num
joyGetPosEx j_id(cnt),varptr(joy(0,cnt))
loop
//以下、取得した情報を表示してみる。
redraw 0 : color 255,255,255 : boxf : color 0,0,0
repeat j_num
x=320*cnt : pos x,0
mes "XPOS:"+joy(2,cnt)
mes "YPOS:"+joy(3,cnt)
mes "ZPOS:"+joy(4,cnt)
mes "RPOS:"+joy(5,cnt)
mes "UPOS:"+joy(6,cnt)
mes "VPOS:"+joy(7,cnt)
a=joy(8,cnt)
mes "ボタン:"+a
repeat 32
mes (a>>(31-cnt))&1,1
loop
mes : pos x,ginfo_cy
mes "ボタン同時押し数:"+joy(9,cnt)
mes "POV:"+joy(10,cnt)
loop
redraw 1
await 16
loop
|
|
2021/11/7(Sun) 00:29:20|NO.94317
ポート番号って少し厄介なところがあるんですよね。
ゲームパッドを2個つなぐと環境によっては番号が 0 と 2 になることがあります。複数個のゲームパッドを持っているとこのような現象が起こりえます。
複数のゲームパッドに対応するには、必ず対応が必要な現象です。
回避は NO.94316 で回答いただいた方法か、PAD設定さんの JStickSearchID 命令です。
|
|
2021/11/7(Sun) 00:47:32|NO.94319
mod_joystick2モジュールの不具合回避方法がわかりました。
jstick命令の直前で
modjoy_err = 0
を実行してください。これで複数のゲームパッドの情報を取得できます。
#include "mod_joystick2.as"
*main
redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0
repeat 16
modjoy_err = 0
jstick key,0xFFFFFFFF,cnt
mes "" + key + "\tError : " + modjoy_err
loop
goto *main
ただし、やはりポート番号の問題は残るので、事前に使えるゲームパッドを確認しておく必要があります。
|
|
2021/11/7(Sun) 23:43:40|NO.94336
みなさんありがとうございます!参考にさせていただきます!
|
|
2021/11/7(Sun) 23:44:05|NO.94337
解決にします。
|
|
2021/11/20(Sat) 16:04:05|NO.94416
わかりました
|
|