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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0710
海鷹弾幕シューティングの移動速度のキーによる変更の仕方について5解決


海鷹

リンク

2010/7/10(Sat) 15:52:16|NO.33608

HSP初心者です
hspで弾幕ゲーを作っているのですが。
東方のようにキーで速度の調整ができるようにしたいのですけど、stickで↑↓→←
は押しっぱなしでも連続で取得するのにそれ以外は取得しません。
Enterで遅くしたいのですが。

repeat redraw 0 color 255,255,255 boxf pos x,y gmode 2 ,50,100 gcopy 1, 150 ,0 stick key, 15 ;キー入力 if key & 4 : x = x + dx if key & 1 : x = x - dx if key & 2 : y = y - dy if key & 8 : y = y + dy if key & 32 : ido = 10:else:ido=0 redraw 1 await ido loop stop



この記事に返信する


あり

リンク

2010/7/10(Sat) 16:08:18|NO.33609

stick key, 15

stick key, 47
にしてみて下さい。
詳しくはstickの解説を参照の事。



ミント

リンク

2010/7/10(Sat) 20:57:50|NO.33614

どーも、こんにちは。初めまして。
私も東方STGを作っているので参考になると思います。


ありさんの言うとおりですが


if key & 4 : x = x + dx if key & 1 : x = x - dx if key & 2 : y = y - dy if key & 8 : y = y + dy if key & 32 :

2+8=10、4+1=5 → 15+32を足した数字を「stick key, 15」に入れればおkですね。

少し気になったのですが、エンターキの場合少し操作しずらいような気がします。
まー何か理由があるはずなのであえて突っ込みません。


形がかなり違うかも知れませんが、おまけで私のサンプルプログラム載せときますね。
-------------------------------------------

screen 0,380,450 ;サイズ ;画像を出す buffer 1 picload "素材.bmp" gsel 0,1 ;自機 myx=180 ;自機の座標 myy=380 ;自機の座標 ;****************メインループ************************* *main redraw 2 color 20,20,20 boxf gosub *KEYCHK ;自機の移動 gmode 2 ;透明色付きコピー ;自機の表示 pos myx,myy gcopy 1,1,0,29,42 ;低速移動 getkey skey,13 ;エンターキー ;16 ;シフトキー if skey{ pos myx,myy ;自機の座標 ; gcopy 1,34,0,29,42 ;自機(低速)の表示 ; color 0,255,0 ;緑色 ; pos 200,80 ; mes "シフト押されたよ";ボタン確認 mySpd = 1 ;自機のスピード } else { ;違う場合 ; color 0,255,0 ;緑色 ; pos 200,80 ; mes "シフト押されてないよ";ボタン確認 mySpd = 3 ;自機のスピード } redraw await 10 goto *main ;****************自機の移動*************************** *KEYCHK stick ky,15 ;キー取得 if ky & 1 : myx- = mySpd ;←の移動スピード if ky & 4 : myx+ = mySpd ;→の移動スピード if ky & 2 : myy- = mySpd ;↑の移動スピード if ky & 8 : myy+ = mySpd ;↓の移動スピード return ;サブルーチンから復帰
----------------------------------------------
コメントアウトしているところは邪魔だと思ったら削除しちゃってください。
動作確認用なので。



Sucret

リンク

2010/7/10(Sat) 20:59:47|NO.33615

あり様のおっしゃる通り、HELPにstick命令のボタン情報も含め載っていますよ。
例えば左上右下のボタン情報は1,2,4,8となりますが、合計すると15になります。

余計な話かもしれませんが、私も東方をやっているのでスクリプトを見て疑問に想ったのですが、
キーで速度の調整とは、自機の移動速度を落としたいとおっしゃっているのではないですか?
(東方で言う低速移動)
その場合awaitの数値を弄ってしまうとゲーム全体の速度が遅くなってしまいます。
テストプレイで速度変更の為にそうしているのでしたら本当に余計な話でしたね、
スレッドの内容から外れた書き込み、失礼いたしました。
ご意向に合わないようでしたら無視してください。



f3d

リンク

2010/7/10(Sat) 21:03:24|NO.33616


speed = 15 boxf font msgothic,30,1 repeat redraw 0 color:boxf color 255,255,255:pos px,py:mes "△" stick key,1+2+4+8+16 if key&1 : px-=speed if key&2 : py-=speed if key&4 : px+=speed if key&8 : py+=speed speed = 15 if key&32 : speed = 5//Enterを押すと、速度が下がる redraw 1 await 17//60FPS loop

まずstick key,15とは
stick key,1+2+4+8という意味で
押しっぱなしにしても検出されるキーを加算してあります。
Enterも検出したい場合は
stick key,1+2+4+8+32と足して
stick key,47となるわけです。


質問とは関係ないですが、
東方のような弾がたくさん出るSTGは通常命令より
DirectXが使えるHSPDXFIXやHGIMG3がつかったほうが速度出るかも。



海鷹

リンク

2010/7/11(Sun) 21:07:05|NO.33621

ありがとうございました。m(−_−)m
ちゃんと動きました。
これからもお世話になることがあるとおもいますが、よろしくおねがいします。



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