「初音ミク冒険記」、人を見るreadpad? んなわけねー!
ななしあさんからのコメントで
ジャンプボタンを押し続ける、メニューで○ボタンを押し続けると
動きがおかしいというのがあったので早速、調べてみた。
一部のボタンは、処理によっては長押し対策があるのだが
実は、長押し対策がないところの方が多い。
あちこち場当たり対策するのも変なので
ポイントを絞って確認してみよう。
「初音ミク冒険記」では、ボタンの入力受付をreadpadという
ファミコンエミュレータのNesterJで使われている
パッド入力処理を真似ている。
PSP xviでそういう解説の記事があったのだ。
「PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 ソース解説 」
実は、このreadpadという処理の中に
ボタンの長押し対策がある。
が、「初音ミク冒険記」では、これがうまく機能していない。
仕事でプログラムしていると
ある人が動かすとうまく動かないのに
別の人が動かすとうまく動くといったことがある。
(順序だてて動かない理由を説明しているうちに
自分で問題に気付いたりすることもある)
そんな時に
「そのプログラム、人を見てるんじゃない?」
と、かげさんは言ったりするわけだ。
readpadも人を見るのかもしれない・・・
と思って改めてソースを見てみる。
うーん、やっぱりreadpadの中身自体は問題ない気がする。
NesterJを動かして確認したくても、
かげさんはファミコンソフトを持っていない。
どうしたものか?
NesterJのソース自体を見てみるとイイかも?
見比べてみた。
うーん、やはり問題が無い。
じゃあ、なぜ動かないんだぁ!
もう一度readpadのソースを見てみる。
やはり問題は見つからない。
now_pad = paddata.Buttons;
new_pad = now_pad & ~old_pad;
if(old_pad==now_pad){
n++;
if(n>=25){
new_pad=now_pad;
n = 20;
}
}else{
n=0;
old_pad = now_pad;
}
そして1つのことに気付いた。
あれ?
readpad後のボタンの判定ではnow_padを使っているけど
本来、判定に使うのはnew_padの方じゃね?
同じボタンが押し続けられていたらnが25以上の時に
パッドの内容を入れ替えるんだよね?
(25未満のときはnow_padの内容は受け捨てする)
NesterJのソースで_padでGrepしてみる。
うぉ! やっぱ、ほとんどnew_padを使っている!
now_padを使っているのは
コンフィグ系と確認メッセージくらいだ。
でも確かにnow_padを使っている箇所もある。
「初音ミク冒険記」だとnew_padは、readpad内でしか使っていない。
ボタン判定は全部now_padを使っている。
now_padは、その瞬間のボタンの状態なので
受け捨てせずにそのまま使うとボタンを連打した扱いとなる。
1秒間60フレームとすると1秒間にreadpadは60回呼ばれるんだから
ジャンプボタンでは、こことは別に長押し対策してるとは言え
ジャンプの効果音が連続して鳴るというのは、納得がいく。
now_padを使っている場所が多いから、一気に直すと
実は違う原因だったと言うときにダメージがでかいから
ななしあさんのコメントにあったジャンプボタンと
ステータスメニューのところで、ちょっと試してみよう。
2012/02/07追記
よく考えたらNesterJのreadpadって
メニューのところで使っているから
長押し対策していると言っても
十字キーの上下で連続移動するんだから
今回期待している長押し対策と関係なかった・・・orz
ここまではOKだ
| 【固定リンク】 | 【コメント (3)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: 「初音ミク冒険記」、人を見るreadpad? んなわけねー!:
コメント
このブログの新着コメントをRSSリーダに登録する為のxmlお久しぶりです。
ダウンロードして少し試してみました。
垂直の壁で次のところに行きたいときって、
×ボタンと左右キーでいけないんですか?
投稿者: 新横浜 (2012/02/07 22:19:52)
To:新横浜さん
コメントありがとうございます。[→◇←]
> 垂直の壁で次のところに行きたいときって、
> ×ボタンと左右キーでいけないんですか?
ええと、垂直の壁の近くにミクがいて
その壁を飛び越えたいから
左右+☓ボタンにすると垂直ジャンプになる
という話でしょうか?
だとしたら、
ジャンプ移動方向に壁があるときは
壁に沿って落ちるようにしているので
(斜めの壁の場合、ぶつかった地点から垂直に落下します)
残念ながら飛び越えられません。[冷や汗]
ジャンプボタンを押すときに左右が入っていると
その方向にジャンプするのですが
垂直ジャンプの後に左右を入れた時に
空中制御ができていないのです。[汗]
以前、猫山Pから
「ジャンプ中も、左右に移動できたら嬉しい」
というコメントをもらって
一度チャレンジしたけどうまくいかなかったという・・・orz
参考のため探索系ドラキュラとかプレイしていると
結構、空中制御にはお世話になっているので
できれば実装したいとは思っています。
このため現在は
プロローグの2マップ目、
試練の洞窟の2マップ目(ドラゴンの像があるマップ)、
試練の洞窟の3マップ目(移動床があるマップ)
にある垂直の壁は、少し助走をとって
ジャンプで飛び越える必要があります。
投稿者: かげさん (2012/02/08 1:01:43)
To:新横浜さん
間違えた。
「少し助走をとって」ではなく
「少し距離をとって」です。[汗]
ななしあさんの指摘してくれた
ボタンの長押し関連対応中に他の不具合も
見つかったので、それらの対処をした後、
空中制御に再チャレンジしてみます。[・_←]
投稿者: かげさん (2012/02/08 12:47:55)