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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1223
ギンシューティングゲームの質問6解決


ギン

リンク

2009/12/23(Wed) 23:48:27|NO.29450

screen 0,400,400
//自機の弾の情報 dim tama,40 dim tama_x,40 dim tama_y,40 *main stick key,31 if key & 1:x=x-5 if key & 2:y=y-5 if key & 4:x=x+5 if key & 8:y=y+5 //スペースキーで弾を撃つ if key && 16 { repeat 40 if tama(cnt) = 0 { tama(cnt) = 1 tama_x(cnt) = (x + 8) tama_y(cnt) = y break } loop } if x < 0 :x = 0 if x > 360:x = 360 if y < 0 :y = 0 if y > 360:y = 360 color 0,0,0 boxf 0,0,400,400 pos x,y color 255,255,255 mes "■" //自機 //弾の処理 repeat 40 if tama_y(cnt) < 0 : tama(cnt) = 0 if tama(cnt) = 1 { tama_y(cnt)-=10 color 255,255,255 pset tama_x(cnt),tama_y(cnt) } loop redraw 1 wait 1 redraw 0 goto *main

↑のスクリプトだと、弾を打ちながら左斜め上に動きません><
なにが原因なんでしょうか?

もう一つ。
スペースキーだけを押すと弾が発射されるのですが、そうすると静止しているように見えます。
どんなシューティングゲームを見ても弾は動いて見えますよね?
どうすればそういう風になりますか??



この記事に返信する


足利超神

リンク

2009/12/24(Thu) 00:19:36|NO.29455

こちらの環境では球を打ちながら、左右斜め上に移動できました。
おそらくNキーオバロールとかがらみだと思います。

具体的には、安いキーボードはコストの問題で同時押しを3キーぐらいまでしか認識しmasen



足利超神

リンク

2009/12/24(Thu) 00:27:46|NO.29456

もう一つ忘れてました。

//弾の処理 repeat 40 if tama_y(cnt) < 0 : tama(cnt) = 0 if cnt\2==1{ if tama(cnt) = 1 { tama_y(cnt)-=10 color 255,255,255 pset tama_x(cnt),tama_y(cnt) } } loop
タマの表示をタマのナンバーが奇数のときのみ行うようにしました。
ある程度動いているように見えます。
\は余りの記号で
cntを2で割って余りが1だったらタマの描画処理を飛ばす、といった感じです。



GENKI

リンク

2009/12/24(Thu) 01:54:11|NO.29460

> おそらくNキーオバロールとかがらみだと思います。

おしい!

> ↑のスクリプトだと、弾を打ちながら左斜め上に動きません><

nキーロールオーバーの問題です。
http://hspdev-wiki.net/?%BE%AE%A5%EF%A5%B6%2F%A5%B8%A5%E7%A5%A4%A5%B9%A5%C6%A5%A3%A5%C3%A5%AF#t64da8e0
概要はNo.29455で足利超神さんが回答されているとおりです。
訂正があるとすれば1点だけ。nキーロールオーバー対応品は高級品です。(楽天あたりで検索してみてください。)
3キーロールオーバーぐらいの製品が普通なんです。

解決方法は、いくつか種類が考えられます。
・ユーザーにnキーロールオーバー対応製品を購入してもらう。
・2キー以上、同時押ししなくても済むルールのゲームを作る。
・ゲームコントローラに対応する。
一般的には3つめのようです。

HSPには標準でmod_joystickモジュールが付属しているので、簡単にゲームコントローラに対応することができます。


> スペースキーだけを押すと弾が発射されるのですが、そうすると静止しているように見えます。

先に撃った弾が通り過ぎた座標に後から来た弾が来るので、あたかも止まっているかのように見えます。
アニメーションは少しずつ場所がずれていかないと動いているようには見えません。
弾の発射間隔が1発/1フレームなので、上手くタイミングが合いすぎてこんな現象が起こります。

弾を発射する間隔が考慮されていないようなのでこれを変更すれば動いているように見えるはずです。
1発/2フレームとか。1発/3フレームとか。

また、弾の大きさを大きくすれば、発射間隔が長くても気にならなくなると思いますよ。
動くものが大きければ、移動量が大きくてもアニメーションしているように見えやすくなりますし。
今のように動くものの大きさに対して移動量が大きいと、止まっているようにも見えてしまいます。あるいは瞬間移動のように見えます。



あああ

リンク

2009/12/24(Thu) 23:07:22|NO.29487

私もギンさんと同く、左斜めのときだけ弾がでませんでしたが
スペースキーの変わりに、エンターキー、コントロールキー、getkeyでの文字キーだと
正常に動いてくれました



GENKI

リンク

2009/12/25(Fri) 01:10:16|NO.29488

キーボードによって(おそらくメーカーによる)同時押しが可能な組み合わせも数も異なります。
ちなみに我が家の普通キーボードでは、スペースキー+方向キー2個以上の同時押しはどの組み合わせでも正常に認識してくれます。
逆にスペースキー以外の組み合わせだと上手くいかないかもしれません。



ギン

リンク

2009/12/25(Fri) 18:59:18|NO.29500

教えていただきありがとうございましたー。
弾の出る間隔をもうちょっと長めに取ろうと思います。



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