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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0228
きつねstick命令の使い方について9解決


きつね

リンク

2009/2/28(Sat) 22:59:59|NO.23656

この質問を見てくださりありがとうございます。
現在、作っているソフトで
トップメニュー → 自己紹介 → ゲームスタート
のような感じで作りたいのですが
どうしても トップメニュー → ゲームスタート
になってしまいます。どうすれば
トップメニュー → 自己紹介 → ゲームスタート
になるのでしょうか?よろしくお願いします。

作成したソース↓

mes "Enterを押してください。"
repeat
stick ok,32
if (ok ==32){
goto *zikosyoukai
}
wait 1
loop
stop
*zikosyoukai
cls
repeat
mes "自己紹介"
stick okk,32
if (okk==32) {
goto *game
}
wait 1
loop
stop

*game
cls
mes "ゲーム開始"
stop



この記事に返信する


check

リンク

2009/2/28(Sat) 23:08:40|NO.23657

とりあえず、repeat〜loop内でgotoするのはよくない。breakでF1HELP



ORZ

リンク

2009/2/28(Sat) 23:40:49|NO.23658

それ以前にトリガータイプの指定を勘違いしているらしい。stickでF1おしんさい。



Sucret

リンク

2009/3/1(Sun) 00:07:40|NO.23659


stick okk,32 if (okk==32) {


stick okk,1;6ビット目が立たない値にする if (okk&32) {
に変更すれば問題なく動くはずです。

あと、

repeat stick ok,32 if (ok ==32){ goto *zikosyoukai } wait 1 loop stop *zikosyoukai
の部分は

repeat stick ok,32 if (ok ==32){ break } wait 1 loop //この場合 *zikosyoukai は不要になります。 //*zikosyoukai
にしたほうがいいと思います。
repeat〜loopを強制的に離脱させるとネスト構造がおかしくなるとHelpにもありますし。



Satoshi

リンク

2009/3/1(Sun) 17:41:55|NO.23661

トップメニュー → ゲームスタート
とのことですが、一度エンターキーを押した状態で次のループに移ると
そのまま押された状態として認識されてしまいます、ですから、

mes "Enterを押してください。" repeat stick ok,32 if (ok =32){ pushed=1 break } wait 1 loop cls mes "自己紹介" repeat stick ok,32 if (ok=32) { if pushed=0 :pushed=1 :break } else { pushed=0 } wait 1 loop *game cls mes "ゲーム開始" stop
この様にpushedというフラグのような変数を用意し、
押しっぱなしの場合には次のループに移動させません。

つまり最初のスクリプトは一応自己紹介を通っていますが、
すぐにゲーム開始に移っていたということです。

余計かもしれませんがbreak命令はrepeat〜loop間のループを抜け出します。
またトリガーキーのことは問題ないので気にしなくていいです。

このテクニックはメニュー画面などでも利用できます。
ゲーム開発頑張ってください。



SYAM

リンク

2009/3/1(Sun) 18:58:25|NO.23663

「押しっぱなしではなく押した瞬間だけを検出する」のがトリガータイプなので、ふつうはそれ使うと思います。
トリガーとかで過去ログでも検索したらサンプルとか見つかるんじゃないでしょか。



きつね

リンク

2009/3/1(Sun) 21:44:29|NO.23668

皆さんありがとうございました。
特にsatoshiさんのが参考になりました。



ORZ

リンク

2009/3/1(Sun) 22:17:30|NO.23670

Satoshiさんのスクリプトではstick命令を使う意味が殆ど無いのでは。
非トリガータイプキー設定の32を取っ払えばいいだけのこと。



tsuka

リンク

2009/3/2(Mon) 16:51:35|NO.23687

非トリガーとトリガーのサンプル

title "トリガー"
repeat await 1 stick key, trig redraw 0 ;ちらつきを押さえる color 255, 255, 255 :boxf :color ;背景を塗りつぶし pos 0, 0 mes "方向キーで操作" mes "Enterで非トリガーの入れ替え" if trig = 15 { mes "非トリガーでは押されている間、ずっと感知されます" } else { mes "トリガーは押した時だけ感知されます" } pos x, y ;xとyの位置に●を描画 mes "●" redraw 1 if key & 1 :x-- ;← if key & 2 :y-- ;↑ if key & 4 :x++ ;→ if key & 8 :y++ ;↓ if key & 32 { ;Enter trig = trig ^ 15 ;非トリガーのスイッチ if trig = 15 { ;非トリガーなら title "非トリガー" } else { ;トリガーなら title "トリガー" } } loop

今回は押されたときだけ感知させたいのだから非トリガーキー指定はしなくていいんじゃないですかね

つまりこういうこと
mes "Enterを押してください。"
repeat stick ok ;非トリガーキーを指定しない、もしくは6ビット目をたたせない if (ok ==32){ break } wait 1 loop cls mes "自己紹介" repeat stick okk ;上と同じ if (okk==32) { goto *game } wait 1 loop stop *game cls mes "ゲーム開始" stop



きつね

リンク

2009/3/2(Mon) 22:23:50|NO.23691

tsukaさん
どうもありがとうございます。
tsukaさんのとヘルプを呼んでやっと理解できました。



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