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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0519
MentholjoyGetPosExの使い方を教えてください9解決


Menthol

リンク

2011/5/19(Thu) 23:53:03|NO.39270

下のスクリプトをジョイスティックで動かせるように書き換えたい思い
mod_joystick.asをインクルードしてみたもののjoyGetPosExサンプルを
どのように利用すればいいのかわかりません。

マイクロソフトのforcefeedback2しか持ってないのですが、
サンプルスクリプトでは、X軸、Y軸、スロットルやハットスイッチ等、
下のdataが読み取れるのでジョイスティックは機能するようなのですが、
数値をどう扱えばいいのか、スクリプトの書き方をおしえていただけないでしょうか?

data(2) = 第 1 軸の状態(普通のジョイスティックの X 軸)0〜65535
data(3) = 第 2 軸の状態(普通のジョイスティックの Y 軸)0〜65535
data(4) = 第 3 軸の状態(スロットル等)0〜65535

data(5) = 第 4 軸の状態 0〜65535

data(8) = ボタンの状態(最大32ボタン)
data(9) = 同時に押されているボタンの数
data(8)とdata(9)はどのボタンを押しても連動していてdata(8)は必ず1が出ます。data(9)は1,2,4,8,16…128までで、同時押しも可能です。
data(10) = POV スイッチの状態 0〜65535




#include "mod_joystick.as" //-------省略--------------- //このサブルーチンをジョイスティック使用に書き換えたいのですが //自機の操作ルーチン *jiki_process stick key,31 if key & 1:player_x-=3 if key & 2:player_y-=3 if key & 4:player_x+=3 if key & 8:player_y+=3 if key & 16 { repeat maxbullet if bullet(cnt) = 0 { bullet(cnt) = 1 bullet_x(cnt) = x bullet_y(cnt) = y break } return



この記事に返信する


doko

リンク

2011/5/20(Fri) 11:59:36|NO.39274

単に押されているかいないかを調べたいのならjstickを使えばいいと思います



Menthol

リンク

2011/5/20(Fri) 21:21:44|NO.39286

まずは訂正
> data(8)とdata(9)はどのボタンを押しても連動していてdata(8)は必ず1が出ます。
> data(9)は1,2,4,8,16…128までで、同時押しも可能です。

data(8),data(9)のところ、間違ってました。
必ず1が出ます書きましたが、ボタンにあわせて数値はちゃんと変わりました。

えっと、jstickでやってはみたのですが、普通に矢印キーで動かしてるのと同じだったので。
joyGetPosExだったら、アナログ的な動きが出来るんじゃないかと思ったんです。

HSPがまだあまり理解できてない初学者にはまだ早いスクリプトなのでしょうか?
いろいろ、マウスポインタを動かすのとかしてみたんですけど、せっかくジョイスティック
あるんでゲームを作りやすいというHSPならと思ったんですが。



R

リンク

2011/5/20(Fri) 23:07:08|NO.39289

>data(2) = 第 1 軸の状態(普通のジョイスティックの X 軸)0〜65535
X軸は「左右」で、0方向が左、65535方向が右です。
なので32768の辺りが真ん中ですが、基本的にピッタリこの値にならないと思うので
4000とか8000とか、遊びを持たせて下さい。
遊びが小さいとスティックに軽く触れただけで反応したり
勝手に移動してしまったりと、始末に負えなくなります。

>data(3) = 第 2 軸の状態(普通のジョイスティックの Y 軸)0〜65535
Y軸は「上下」で、0方向が上、65535方向が下です。
こっちも同じように処理すると良いです。

>data(4) = 第 3 軸の状態(スロットル等)0〜65535
>data(5) = 第 4 軸の状態 0〜65535
アナログスティックを2本もったゲーム用コントローラーだと
これが2本目の、PSやXBOXのだと右のレバーになるはずです。
必要ならこれも同じように処理してください。

>data(8) = ボタンの状態(最大32ボタン)
これは方向キー以外のボタンの入力状態です。
HSP標準命令の「stick」と同じように
ビットを調べる事でボタンの状態を取得できます。

>data(10) = POV スイッチの状態 0〜65535
コントローラーによっては方向キーの入力状態がここに返ってくるものもあるらしいです。
これを扱う場合は一応「joyGetDevCaps」で「JOYCAPS_POV4DIR」をチェックした方が良いかも。
入力内容は角度値を100倍した整数です。
上方向が0で右上が4500という風に右回りのようです。
入力されてない場合は「-1」か「65535」が返ってくるそうです。

>数値をどう扱えばいいのか
取得できる値の意味が分かったら、後はどうとでもなると思いますがどうですか。
折角入力状態を表示できるサンプル(mod_joystick)があるのだから
それとにらめっこするのも良いと思います。



Menthol

リンク

2011/5/22(Sun) 20:07:05|NO.39353

ジョイスティックは動かせるようになりました。

ただ、スロットを操作したときに止まった状態から徐々に早くなっていくように
したいのですが、この式を使えばいいのでしょうか? v = v0 + at
また、徐々に止まるとかも再現したいのですがジョイスティックの値をどのように
利用したらいいかわかりません。
よろしくお願いします。


joyGetPosEx key, 0 if key(2)>=35000 : an(1)-=0.02 ; 右回転 if key(2)<=30000 : an(1)+=0.02 ; 左回転 if key(4)<=30000 { fvdir an,0.0,0.0,0.4 ; 前進 fvadd po,an(0),an(1),an(2) ; } if key(4)>=35000 { fvdir an,0.0,0.0,-0.2 ; 後退 fvadd po,an(0),an(1),an(2) ; }



Mentho

リンク

2011/5/23(Mon) 20:45:07|NO.39358

なんとなく思ってるようなのはできましたが、キャラを上手く止めることができません。
どうすればいいでしょうか?

speed_add = 0.1 // 加速度 speed_max = 6.0 // 速度の最大値 friction = 0.9 // 摩擦 px = 0.0 // x 座標 py = 0.0 // y 座標 dx = 0.0 // x 方向の速度 dy = 0.0 // y 方向の速度 *main redraw 0 color 255,255,255 : boxf stick key,15 if key & 1 : dx -= speed_add : if dx < -speed_max : dx = -speed_max if key & 4 : dx += speed_add : if dx > speed_max : dx = speed_max if key & 2 : dy -= speed_add : if dy < -speed_max : dy = -speed_max if key & 8 : dy += speed_add : if dy > speed_max : dy = speed_max // 速度を座標に加算する px += dx; py += dy; color 255,0,0 pos px,py mes "@" redraw 1 await 5 goto *main



GENKI

リンク

2011/5/23(Mon) 21:22:50|NO.39359

>> NO.39358
こんな感じでいいですか?

// 速度を座標に加算する dx*=friction dy*=friction px += dx; py += dy;



Mentho

リンク

2011/5/24(Tue) 00:04:27|NO.39360

ありがとうございます。
ですが、なんかサイドブレーキをずっと入れっぱなしのような感じです。
キー入力中の加速感が失われますね。

キー入力がなくなったときに、加えて下さったスクリプトが働くようにする方法って
あるでしょうか?



GENKI

リンク

2011/5/24(Tue) 02:05:04|NO.39361

>> NO.39360
こんな感じでいいですか?

#include "hspmath.as" ;←最初の行に入れる …(中略)… // 速度を座標に加算する dx-= limitf( 0.04, 0.0, absf(dx)) * sgn(dx) dy-= limitf( 0.04, 0.0, absf(dy)) * sgn(dy) px += dx; py += dy;

NO.39359は粘性抵抗、これは摩擦抵抗…のつもりだったけどあってるかな?まあ、ゲームで使うならそれらしく見えれば何だっていいんですが。
学校で使った物理や数学の教科書は結構便利なのでお勧め。

キー入力があるかないかはkeyの中身を
if key & (1|4|2|8)
とか
if key & 15
とかで確認すればわかるわけだから、それで抵抗のON/OFFしてみるのもいいんじゃないんでしょうか。



Mentho

リンク

2011/5/24(Tue) 03:07:22|NO.39362

ありがとうございます。
実にしっくりきますね。

勉強の方は正直苦手なんですが、NHKの高校講座は一応見てます。
丁度物理のところと数学のところがプログラムに使えそうなんで。
ただ、応用力が自分にはあまり無いようなので、ちょっと困ってますが。

ともかくも、ありがとうございました。
また、つまらない質問をするかと思いますが、よろしくお願い致します。



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