HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1106
ひつじ複数のゲームパッド8解決


ひつじ

リンク

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



GENKI

リンク

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



GENKI

リンク

2021/11/7(Sun) 00:29:20|NO.94317

ポート番号って少し厄介なところがあるんですよね。
ゲームパッドを2個つなぐと環境によっては番号が 0 と 2 になることがあります。複数個のゲームパッドを持っているとこのような現象が起こりえます。
複数のゲームパッドに対応するには、必ず対応が必要な現象です。

回避は NO.94316 で回答いただいた方法か、PAD設定さんの JStickSearchID 命令です。



GENKI

リンク

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

わかりました



ONION software Copyright 1997-2023(c) All rights reserved.