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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0525
馬琴コントローラーの振動(フォースフィードバック)について17解決


馬琴

リンク

2014/5/25(Sun) 23:04:50|NO.62194

コントローラの振動機能を使おうとしています。
だいたい以下のような処理で ck_joyforce を使って振動を発生させています。
(ck_joyforce の取扱説明書に載っているのとほぼ同じです)



#include "ck_joyforce.as" //コンスタントフォース ck_setforce 0,65535,0 //テストボタン button gosub "TEST",*TEST1 stop *TEST1 dialog "約3秒間テスト振動します" repeat 30 //1Pコントローラーを振動させる ck_force 1 await 100 loop return

HSP3では手を加える必要があるとの事なので、まずは動かしてから対応を模索しようと
したところ、振動したのですが以下のような問題がありました。
 ・複数実行(ソースをHSP実行する、またはexeにして起動する)すると
  最後に実行したプログラムからしか振動しない。
 ・複数起動するたび、振動が弱くなる。
上記の問題の解決に加えて以下も実現したいと考えているのですが
対応方法をご存知の方がいらっしゃったら教えて頂けますでしょうか。
 ・振動の強さをプログラム内で変更できる
  (ck_setforceでプログラム内で強さを再定義すると異常終了or反応しなくなります)

ck_joyforce の使用にこだわらず、どのような方法でも構わないと考えています。
よろしくお願いします。



この記事に返信する


774

リンク

2014/5/28(Wed) 00:30:21|NO.62226

テストできる環境が無い為憶測120%です。

>最後に実行したプログラムからしか振動しない。
は、恐らく仕様だと思います。
1つのコントローラで複数ゲームを同時操作できても不都合しか思い浮かびませんから…
ck_joystick などの戻り値 stat で、既に使用中の場合などを検出できないでしょうか?
既に使用中であればその旨ダイアログ等で表示し
2P側に切り替え・コントローラ不使用・起動中断などの処理へ移行すべきだと思います。

>・複数起動するたび、振動が弱くなる。
は、上記の兼ね合いで以前の信号が残って巧く処理できていないのではないかと予想します。

>・振動の強さをプログラム内で変更
再定義前に ck_joybye 実行は既にお試しでしょうか?
コントローラではなく"フォースフィードバックオブジェクト"の解放とありますので
ひょっとしたらその為の命令かも?と思いました。



馬琴

リンク

2014/5/31(Sat) 14:24:07|NO.62256

返信ありがとうございます。
一応、解放命令も試してみたのですが…。
実際に試してみたソースは以下の通りです。


#include "ck_joyforce.as" //テストボタン button gosub "TEST",*TEST1 stop *TEST1 dialog "約3秒間テスト振動します" //コンスタントフォース ck_setforce 0,65535,0 repeat 30 //1Pコントローラーを振動させる ck_force 1 //振動に失敗したらメッセージを表示 if stat != 0: dialog "振動に失敗しました": break await 100 loop //エフェクト開放 ck_joybye return

確認結果は以下の通りになりました。

1.コントローラを接続し単体で実行した場合
→1回目のクリックではきちんと振動。2回以降では振動せず

2.コントローラを接続し複数で実行した場合
→実行順序の後先に係わらず、各窓で1.と同じ

3.コントローラ未接続で実行した場合
→実行したプログラムが単体・複数に係わらず"振動に失敗しました"とだけ表示。
 2回以降のクリックでも同様。

なお、1.と2.では2回以上クリックすると終了時(右上の×ボタン押下時)に
"hsp3.exe は動作を停止しました"というダイアログが出て異常終了してしまいました。
(確認環境:Windows7)
これが出るという事はメモリの解放時に問題が発生していると思うので、それが
解決すれば振動させるたびに初期化も可能だと思うのですが…。

命令の組み合わせや順番で解決できればいいのですが、代替案を
ご存知の方がいれば教えて頂けますでしょうか。



Rosh

リンク

2014/5/31(Sat) 14:36:22|NO.62257

自分もWindows7なんですけど
今使ってるPSコントローラの変換器のドライバが
Windows7に対して条件付の対応という形になっていて
振動機能が正常に動作しません。
(振動の強さが変わらなかったり、デュアルショックの右モーターしか動作しなかったり…)

馬琴さんが何を使っているのか分からないですが
変換器やコントローラ側の問題という可能性も有るので
そちらも調べてみた方がいいかもしれません。



774

リンク

2014/5/31(Sat) 21:33:02|NO.62258

すいません、1回しか振動しなくなったのは ck_joybye のせいかも知れません。
・DLL起動時に暗黙的にFFBオブジェクト生成
・ck_joybye でFFBオブジェクト解放してしまったため、2回目以降宛先不明でフリーズ
という事かも知れません。FFB不使用時の為の命令なんでしょうか…
安易な発言をしてしまい申し訳ないです。

振動機能に関してはXInputというものもあるようですが
これはこれでコントローラが対応している必要がるみたいです。



馬琴

リンク

2014/6/1(Sun) 09:23:48|NO.62260

> Roshさま
すみません。環境について何も書いていませんでしたね。

私はWindows7環境下でELECOM製のJC-U2912Fを接続、ドライバには
コントローラーに添付されていたCDからインストールしたものを使用しています。
ちなみに、ドライバをインストールする前(Windows標準ドライバを使用していた時)は
振動しない事を確認しています。
(後で確認したらELECOMのページに標準ドライバでは振動しない事は載っていました)

また友人に確認してもらったところ JC-U3312S、JC-U3016Fでは振動しなかったそうです。
同じELECOM製品でドライバも入れてるはずなのに…なんでだ!?

> 774さま
xinputについて調べてみたいのですが、HSPで実装するサンプルがあれば良いのですが…。
コントローラーの対応なども調べてみようと思います。



774

リンク

2014/6/1(Sun) 20:01:36|NO.62272

>xinput
サンプルは見当たらなかったのですが、HSP用xinputモジュールというピンポイントな代物なら。
xinput自体が非常にシンプルな機構で扱い易そうなのですが
現行コントローラでの対応率が高くなさそうなのがネックですね。
そして残念ながら、お使いの製品も非対応みたいです。

お使いの製品ですとコンパネのコントローラ設定内に
振動機能のテストがあるようなので、そちらも試してみてはどうでしょうか?
もしそこでも問題が発生すれば、ドライバ等の対応が不完全。
振動切り替えも含めて何も問題が無ければ、プラグイン側の対応が不完全な可能性が高そうです。

特にプラグインに関しては動作環境としてXPまでしか記載されてませんし
Rosh様の事例から、Win7辺りでFFB関連に何らかの内部仕様変更が考えられますし…

蛇足。ご友人についてですが、メーカー製ドライバは入れたものの
使用するドライバの設定が標準ドライバのままという事はないでしょうか。
別のゲーム等で振動機能を確認済みであればこれは無いのですけど。



MonoChrome

リンク

2014/6/4(Wed) 03:42:06|NO.62291

XInputに関して

XInputはXbox360コントローラーが基準になっています
(方向キーx1 スティックx2 トリガーx2 ボタンx10)

XInputコントローラーをDirectInputで使用することは可能ですが
DirectInputコントローラーをXInputで使用することはできません
またXInputコントローラーで振動機能を使用するためにはXInput APIを使用する必要があります


>>774さん
CK_JOYFORCEはHSP2用のプラグインなんですよね。
なので馬琴さんがNO.62194で言っているようにHSP3で使用するには手を加える必要があるようです。



774

リンク

2014/6/5(Thu) 01:14:11|NO.62308

>手を加える
#func ck_setforce      "_ck_setforce@16" bmscr,int,int,int
#func ck_force "_ck_force@16" int #func ck_sync "_ck_sync@16" int #func ck_joybye onexit "_ck_joybye@16"
のようにHSP3風に宣言する必要があるという事でしょうか?
同じ事だと思い込んで可能性から除外してしまっていたようです、すいません。



MonoChrome

リンク

2014/6/5(Thu) 02:34:18|NO.62310

>>774さん
具体的な対処方法はわかりませんでした。
わかったのは「CK_JOYFORCEをHSP3用に修正する必要がある」ということだけです。



774

リンク

2014/6/5(Thu) 19:49:23|NO.62316

>MonoChrome様
すみません、遠回しな発言でした。
ヘッダ(?)ファイルck_joyforce.as内には関数宣言しか無い為
プラグイン利用者としては手の施し様が無いように思えます。

以下は個人的見解ですが
プラグインの中にはヘッダファイル内にHSP2xとしての処理が記述されているものもあり
「HSP3で使用するには手を加える必要がある」は、その様なケースへの措置だと捉えています。
関数宣言については前述のように記述方式が異なるだけと考えてましたので
それが勘違いであるとご指摘を受けたのかとも思ったのですが…

やはり回りくどいので要約致しますと
・HSP2用=手を加えないとHSP3では動かない、と決め付けていませんか?
となります。

ざっとテストした限りWindowsXP+HSP3環境下では手を加えなくても問題無さそうでしたし
MonoChrome様の環境で問題が発生していたとして、HSP3以外の要因は考えられないのでしょうか。



MonoChrome

リンク

2014/6/6(Fri) 07:50:28|NO.62319

>>774さん

>HSP2用=手を加えないとHSP3では動かない、と決め付けていませんか?
「CK_JOYFORCE HSP3」で検索すると
「CK_JOYFORCEをHSP3で使うには修正が必要」と書かれたサイトがいくつか出てきます。
なのでCK_JOYFORCEをHSP3で使う場合手を加えないと正常には動かないと判断しました。


>ざっとテストした限り〜
自分の場合は
「2回目以降のck_setforceでプログラムが停止する(stopと同じ状態?)」
「2回目以降のck_setforceでエラーが発生し終了する」
という問題が発生しました

この問題は「ループ内のck_setforce」「サブルーチン内のck_setforce」でのみ発生するようです



774

リンク

2014/6/6(Fri) 23:40:33|NO.62329

>「CK_JOYFORCEをHSP3で使うには修正が必要」と書かれたサイトがいくつか出てきます。
私も「修正が必要そう」「手を加える必要があるらしい」といった記述なら何件か見かけました。
ですが、その後同サイト内で具体的にどう手を加えたかを見かける事はありませんでした。
この事からMonoChrome様とは逆に「実際に手を加える事はなかった」と予想しています。

>「2回目以降のck_setforceでエラーが発生し終了する」
はい、馬琴様と同様の症状ですね。
生憎私の方では振動機能付きコントローラを接続していませんので
キー入力や関数呼び出しでエラーが発生しない程度の確認しか行えないのです。

>この問題は「ループ内のck_setforce」「サブルーチン内のck_setforce」でのみ発生するようです
情報ありがとうございます。
複数の方で同様の現象という事でハード・ドライバの問題では無さそうですね。
プラグイン利用者として手を加えるかどうかであれば、1回目でエラー38が出てそうな気がします。
>エフェクト切り替え時に再設定するための命令で、ループ中に使用するものではありません。
と説明書にもありますので、デバイスの応答にかなり時間を要するのかも知れませんね。
若しくは、OSやDirectXやHSP3に対してck_setforceの切り替えが対応できていないのでしょうか。

前者だとすればスクリプトの工夫でどうにかできそうですが、後者だとすると
・切り替えは諦める
・作者様に修正要望
・対応プラグイン自作
のどれかになりそうですね。(全て憶測で言ってます



MonoChrome

リンク

2014/6/7(Sat) 01:43:14|NO.62333

>>774さん

>実際に手を加える事はなかった
「必要な機能は使えたから手を加えなかった」ということも考えられます。
なのでそれだけでは手を加える必要がなかったのかまではわかりません。


>デバイスの応答にかなり時間を要する〜
自分も応答に時間がかかりその間に別のck_setforceが行われると処理が衝突しエラーが発生するのではないか
と思ってテストしてみたのですが
#include "ck_joyforce.as"
ck_setforce 0 ck_setforce 1 ck_setforce 2
この場合は連続でck_setforceを行ってもエラーが発生しないんですよね。

それと新たにわかったことなのですが
一度ck_setforceでエラーが発生するとどのスクリプトでも2回目のck_setforceで必ずエラーが発生します。
スクリプトエディタを再起動しても症状は変わりませんでした。


>・作者様に修正要望
配布されているものの更新時期を見ると新しくて2004年なんですよね。
サイト自体も2006年が最後の更新みたいですし連絡自体できない可能性が高いと思います。



774

リンク

2014/6/7(Sat) 21:38:55|NO.62349

>どのスクリプトでも2回目のck_setforceで必ずエラーが発生します。
どうやらFFBの設定内容は一旦デバイス内に記憶されるらしく、その更新辺りで巧くいってないのでしょうか。
完全に解放されるまでエラーがコントローラの中に居座ってるような感じですね。

>連絡自体できない可能性が高いと思います
ダメ元でも他の選択ができない場合はやむ無しですよ。

(スレ主様不在っぽいですし、こちらそろそろ切り上げた方が良くないでしょうか



馬琴

リンク

2014/6/8(Sun) 10:10:46|NO.62351

ごめんなさい、居ないわけではないんです。
平日は汎用機と格闘していたり、休日は法要だったりで書き込めていませんが…。
その間にxinputについて確認していたのですが、ちょっと方法が分かりませんでした。
directinput以上に情報が少ないようですね。私の探し方の問題もあるのでしょうが…。

また、コンパネからの動作確認ですが私の環境と友人の環境どちらでも振動させることができ、
友人の環境ではPSO2をプレイ中に振動する事も確認できたようです。
(逆に私の環境では振動に対応したソフトがないため、今回のPG以外では確認できていません)


ひとまず NO.62308で774さまの書かれているように ck_joyforce を変更して
NO.62333でMonoChromeさまの書かれているコードを実行してみたのですが
こちらの環境では line5(2回目の ck_setforce)のところで
『-->システムエラーが発生しました』
と出てしまい実行に失敗してしまいました。
(ck_joyforceを元に戻した状態でも同じ結果でした)

私が考えていた「CK_JOYFORCEをHSP3で使うには修正が必要」と言うのは、
DLLのソースを提供してもらい、そのソースを修正してリコンパイルが必要と
考えていました。
そうするとCなりC++なりの環境と知識が必要なのかと思い、敬遠していたのですが…
こうなるとMSDN参照して本腰を入れないと対応できないかもしれませんね。
HSPで使用可能なDLLの作り方から分かっていないので長丁場になりそうですね。


余談ですが…
冒頭で書いた通りの状態のため開発時間を稼ぐためにタブレット(Windows8環境)を
購入したのですが、今回のコードを実行してもタブレット本体が振動、という事もないようです。
この辺は hsp3dish の領分になりそうだし作成中のプログラムの要件からは対象外なので考えない事にします。



774

リンク

2014/6/8(Sun) 23:21:36|NO.62369

失礼致しました。応答が無いと責めるようなつもりでは無く
スレ主様抜きでスレを伸ばすのはあまり歓迎されないような気がしましたので…

ここからは完全に憶測なのですが
FFBのデバイス状態取得関数がポインタ渡しとなっていまして
ここで64bit版OSに対応できていない為、現在の状態を正確に把握できず
デバイスの状態を無視したまま設定しようとしてエラー。
というのが私なりの予想となります。

もし当っていれば、馬琴様が開発される場合は
同様のエラーで悩まされる事は無いと思いますので頑張って下さい。

(dishはそもそもプラグインを扱えませんので、こちら以上に茨の道かと思います。



馬琴

リンク

2014/6/14(Sat) 16:54:14|NO.62424

すみません。本来なら1週間前に解決チェックを入れるべきだったのですが…。
一応、結論としては
「hsp3では一部に動作する環境・動作する機能もあるが、機能を保障できるものではない」
という事で理解します。
対応するには DirectInput を制御する dll を自作しようと思いますので、HSP以外の
作業を調べていくので掲示板の内容は解決とさせていただきます。

Roshさま、774さま、MonoChromeさま。その他、書き込まなくても検証や情報収集して
くださったROMの皆さま、ありがとうございました。



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