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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0117
ヒヨコHgimg4のメインルーチンから数値を1だけ上げる方法11解決


ヒヨコ

リンク

2024/1/17(Wed) 06:36:01|NO.101067

hgimg4でGotoからラベルへとぶメインルーチン内で、キー
を押すと1だけ加算される方法はないでしょうか。メインルーチン
内からキーを押すとどうしてもたくさん数値が加算されてし
まいます。教えて下さい



この記事に返信する


nennneko5787

リンク

2024/1/17(Wed) 13:44:52|NO.101069

stick命令とかはどうでしょうか。
[F1] キーを押してヘルプをみることをおすすめします。



ヒヨコ

リンク

2024/1/17(Wed) 20:54:02|NO.101070

stick命令でもうまくいかないですgetkeyと同じです。F1キーでは勿論検索
しました。どうやってるんですかね



名無し

リンク

2024/1/17(Wed) 21:18:54|NO.101071

>キーを押すとどうしてもたくさん数値が加算されてしまいます
というのは、一回のキーの入力につき1加算したいという意味で、
一度1加算した後はキーを押しても一切加算したくないという意味ではないと思いますが、
あってますか?
repeat
stick key,0 if key&32 : gosub,*plus ;32はEnterキー title ""+z ;タイトルバーで加算状況確認 wait 1 loop stop *plus z+=1 ;Enterが押されたらzに1加算 return
こちらのコードで想定通りの動作をすると思うのですがどうでしょうか?

スクリプトの提示が無いので推測ですが、
一度キーを押しただけのつもりでもループが早いために
何度もキーの検出と加算処理を通過してしまっているのではないかと思います。
stick命令では、キーを押した瞬間のみ検出できますので、
上記理由による複数回の加算は解消できるものと思います。

全くの見当違いかもしれませんが.....



ヒヨコ

リンク

2024/1/18(Thu) 04:50:33|NO.101080

提示してもらったスクリプトでは、ちゃんと押した瞬間を検出
して1加算されるのですがやはりredrawとawait1000/60を置いた
hgimg4のmainルーチンからはstick命令でも押しぱなしを、
検出するようです1回で4つ位、カウンターで調節してみます



名無し

リンク

2024/1/18(Thu) 06:00:33|NO.101081

>101080
であればどこか別の個所でおかしくなってるのでは。
試しにhgimg4のblock3のサンプルの「*main」の行の下(37行目の下)に
下記3行を追加して確認してみましたが普通に1ずつ増えていきましたので
hgimg4が問題で意図した動作をしてないわけでは無いように思えます。
	stick key,0
if key&32 : z+=1 ;32はEnterキー title ""+z ;タイトルバーで加算状況確認
状況を再現できる(極力短い)ソースコードを掲示していただくと早い解決につながると思います。



zrs90(5さい)

リンク

2024/1/18(Thu) 06:08:31|NO.101082

間違いなら申し訳ないです

当方の使っている、osは7proの32ビット版と
hsp3.7β5 ですが、hgimg4の同梱サンプル
(\sample\hgimg4\test4.hsp)が
参考になりませんか?

実行すると、番号のついた球が回転していますが
実行画面内をマウスクリックする毎に
クリックした場所に球が移動して
番号が1ずつ増えていきます
(※番号は、ball64.pngの分割画像NO.0〜63
63を超えると0に戻る)

なので、マウスクリック回数(分割画像の変数 id)
を拾えば良いのでは?マウスを押しっぱなしにしても
カウントは上がらないようです



アキアキノヒロロ

リンク

2024/1/18(Thu) 11:16:58|NO.101083

見当違いだったら、お許し下さい。

ご質問の最初に「Gotoからラベルへ」とありますが、
メインルーチン内からだと普通は、[gosub *] を使うのにと疑問に思いました。
もしかして、「Gotoからラベルへ」行き、ラベル内からも [goto *] を使って、
メインルーチン内に戻ってくるようにしているのではないですか。
その場合、その [goto *] で戻るためのラベルをメインルーチン内に記述すると思いますが、
その記述位置が問題になります。
[stick] を使っても、ラベルへ [goto *]、そしてそのラベルから [goto *] で戻るラベルを
その [stick] のあとの方に記述すると、何度も繰り返してキーを検出してしまうようです。
下手をすると、パソコンが固まってしまいますので、要注意です。(テストで、経験済みです)
[gosub *] を使うか、[goto *] なら、戻りラベルを [stick] の前に持ってくるべき、と思います。

これは、[goto *] を想定しての話ですが......。



ヒヨコ

リンク

2024/1/18(Thu) 13:14:15|NO.101085

名無しさんkzr90さんアキノアキノヒロロさんありがとうございます。早速名無しさんの
スクリプトで試してみます。簡単なミスを気付かずひたすら自分でスクリプトを
組んでいたかも知れません。あとアキノアキノヒロロさんのtWitterつい最近フォロー
しましたよ自分は今Hgimg4の手引きをベースにしてhgimg4のゲームを作ろうと思って
ます過去ログもとてもためになります。
あとソースが、よく示しているのですがどうやってソースを転載しているのかわかりませ
んあと訳あってスマホでしか出来ないので、でも今度からソースの直接入力しようと思い
ます。すいませんでした。



ヒヨコ

リンク

2024/1/18(Thu) 14:11:17|NO.101086

どうやら自分の単純なミスだったようです。
stick ky,0
if ky&2048 : gosub *jyagaimo
if ky&4096 : gosub *ninjin
と記述しなければいけないところを
stick ky,2048
if ky=2048 : gosub *jyagaimo
stick ky,4096
if ky=4096 : gosub *ninjin
としてました。
あと,redraw 0と redraw 1の間にサブルーチンジャンプを置いてたら、
加算されませんでした。ただしくはメインルーチンの、最初の行で
redraw 0の前にサブルーチンジャンプを置くとうまく1加算されました。
ソースを示して下さりありがとうございました。
ちなみにキーコードの2048と4096はxとzです。



名無し

リンク

2024/1/18(Thu) 20:14:11|NO.101089

解決してよかったです。

スクリプトはあれば分かりやすいですが、
難しいのであれば無理に記載しなくても大丈夫です。(長いと大変ですし)

もう理解されてると思うので説明不要だと思いますが、
stick命令のp2にキーを指定すると長押しでも判定されてしまうので、
押した瞬間のみ判定する場合は指定してはいけない部分ですね。

何かコードを書いていて問題が起きた場合ですが、今回の場合
・gosub処理の前の部分(「if ky&2048」の後)で
 a+=1 : title""+a
 と入れてみるとフラグの処理を何度も行っているのか、
 飛んだ先のフラグ側の処理に問題があるのか判断できます。
・怪しいと思う箇所(hgimig4が怪しい等)がある場合、それを取り除いてみるか、
 hgimg4を使用している他のソースで同様の処理を実行してみると、
 それが原因なのか判断できます。
 今回の場合、>101082 で挙げられている「test4.hsp」がやりやすかったです。
 「if key&$100」の行を「key&2048」といった形で入れ替えるだけで確認可能。
 長押しで判定されないのでhgimg4が原因ではないと分かります。
 また、上手くいくサンプルがあるのなら、
 そのサンプルを自分のコードにそのままコピーするのも一つの手です。
・命令で使用している変数の誤字脱字などもよくあるので、
 もう一度命令文を削除し、打ち直すのも有効だと思います。

余計なお世話かもしれませんが、簡単に解決するかもしれませんし参考にしてみてください。
長文失礼しました。



ヒヨコ

リンク

2024/1/19(Fri) 05:43:01|NO.101096

説明ありがとうございます。おかげでstickの使い方が
わかりました。いままでstickの使い方をはっきり熟知して
ませんでした。ただやみくもにスクリプトを打ち込んでまし
た。
ちゃんと理解してスクリプトを組むのは非常に重要ですね。
これからも初心者の質問すると思いますが
宜しくお願いします。
では、では。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101067への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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