トピック
べっち bechisennin

DEF命令での自作関数について

現在、某ブログで見つけた、 スライドパッドの値を8方向に返す関数を使っているのですが、BUTTON()命令の様に押された瞬間、離された瞬間が検出できるように書き換えられますか?教えて優しい人
2そうだね
プレイ済み
返信[1]
親投稿
ΖΕΧ ZEX256
そういうのは自力でやるもんだ
3そうだね
プレイ済み
返信[2]
親投稿
otta777 otta777a
STICK OUT関数で取得できるスライドパッドの情報の変化を検知して 押した瞬間、離した瞬間が検知出来そうですが 左に操作している状態からスライドパッドを離した場合と右に 操作した場合の区別の付け方が分からないので離した瞬間を どう検知したらいいかは思いつきませんでした。
2そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
この関数からの戻り値を記録しておいてから関数を呼び出して 戻り値と記録しておいた戻り値を比較すれば押した、離したの検知は 出来そうですが、ユーザー関数内で検知する方法は思いつきませんでした。
1そうだね
プレイ済み
返信[4]
親投稿
ほしけん Hosiken
書き換えるのは面倒なので、「DSTICK()を使って押された瞬間・離された瞬間をとる」関数を新しく作った方が手っ取り早いと思います。 あと、自分でできないならサンプルの EX8TECHDEMO の @SWINIT と STKANDBTN() をコピペして使えば良いと思います。自分も面倒くさかったのでそうしました。こっちはキーリピートが実装されてます。
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
そのDSTICK関数を作った者です。 このDSTICK関数は押した角度を元に判断することで遊びの大きさがどの向きでも一定で8方向のレバーの入りやすさがすべて同等なので操作しやすくなっています。 STICK OUTの戻り値だけで単純に判断した場合は斜め方向の遊びが上下左右方向と比べて大きくなり、斜め方向が上下左右方向よりも入りにくくなってしまいます。斜め方向に入りにくくしたいという意図があるならば単純判断の方がベターかもしれません。 こちらのトピックスでこのDSTICK関数の解説をしているので良かったらご覧になってください。 https://miiverse.nintendo.net/posts/AYIHAAAEAADHVHhveJfmfA 十字ボタンは押しっぱなしで使用することが多くBUTTON(2)のような押した瞬間を取得する必要性は低いと判断してリストの短さを重視しました。
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
そこでDSTICK関数を元に押した瞬間や離した瞬間を取得できるように改造してみました。 「押した瞬間」というのは前回呼び出した時の値とビット演算を行い前回のビットが0(そのボタンを押してない)で今回のビットが1(そのボタンを押している)ならばそのビットが1になるようにすれば良いです。 具体的に言えば、前回のDSTICK関数の戻り値のNOT(ビット反転)を求め、その値と今回の戻り値とのANDを計算すれば良いというわけです。(「離した瞬間」は今回の戻り値のNOTと前回の戻り値のANDを取ればよい)
1そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
この改造版DSTICK関数ですが、前回の値を保持するためグローバル変数_DSTICKを使用しているのでDSTICK関数より前で変数の宣言をしておいてください。 引数は0(通常)、2(押した瞬間)、3(離した瞬間)のみが使用できます。(それ以外を選択した場合や引数を省略した場合はエラーが出るようにプログラムされています) 注釈(')を削除すれば十字ボタンとの併用が可能になります。(同時に押している場合はスライドパッドを優先) BUTTON(2)は60fps(VSYNC 1)でないと正常動作しませんが、DSTICK(2)ならば60fps以外でも正常動作が可能になるというメリットがあるのでぜひ使ってみてください。
2そうだね
プレイ済み
返信[8]
親投稿
べっち bechisennin
皆さんありがとうございました! まさかのご本人登場でビックリしてます笑
0そうだね
プレイ済み