Amazon 初売り

« 超肉食系サンド | トップページ | 「初音ミク冒険記」、決定ボタン/キャンセルボタン/ジャンプボタンの長押し対策 »

2012.02.07

「初音ミク冒険記」、人を見るreadpad? んなわけねー!

| |コメント (3)|トラックバック (0)

 このエントリーをはてなブックマークに追加

ななしあさんからのコメントで
ジャンプボタンを押し続ける、メニューで○ボタンを押し続けると
動きがおかしいというのがあったので早速、調べてみた。

一部のボタンは、処理によっては長押し対策があるのだが
実は、長押し対策がないところの方が多い。

あちこち場当たり対策するのも変なので
ポイントを絞って確認してみよう。

「初音ミク冒険記」では、ボタンの入力受付を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)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: 「初音ミク冒険記」、人を見る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)




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。