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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1124
如月getkey命令とstick命令について18解決


如月

リンク

2006/11/24(Fri) 20:09:04|NO.3731

getkey命令でもstick命令同様「押された瞬間だけ」を検出できるようにしてほしいです。

あるいはstick命令でチェックできるキーをgetkey命令と同じくらい増やしてほしいです。



この記事に返信する


Drip

リンク

2006/11/24(Fri) 20:19:47|NO.3732

Dripです。

 如月さん、こんにちは。
getkeyは指定したキーが押されている間、変数に1を返す命令なので、

//Aキーを押して下さい。 repeat getkey k,65:if k=1:key++:else:key=0 if key=1:mes "You pushed A key." wait 1 loop
 とすれば、getkeyでキーを押した瞬間を取得できます。
プログラムに用意されている命令や関数は、原始的なものが多いです。
「○○をしたいが○○をするための命令がない→作れない。」
という発想ではプログラムを完成させることはできません。
 プログラムで思い通りのものを作り上げるには、
言語に備わっている命令や関数を応用利用する発想力が必ず必要です。がんばってください。



如月

リンク

2006/11/24(Fri) 21:44:29|NO.3733

>Drip氏
私の投稿の種類は「要望・提案」なのですが、お気づきになりませんでした?
私は「命令を補完する記述」を行う手間を省くための「要望」をしたのです。
命令が効率的な仕様になっていれば、あなたが提示なさったような記述は不要です。

そもそも投稿しておいて今更とは思いますが、
この掲示板はHSP開発者の方はチェックなさるのですか?
チェックされないのであれば「要望」というカテゴリは無意味なのでは?



Drip

リンク

2006/11/24(Fri) 22:01:31|NO.3734

Dripです。

> 私の投稿の種類は「要望・提案」なのですが、お気づきになりませんでした?

 理解しています。
今までにも、この手の「ちょっとした手間を省く機能拡張の要望」は多数目にしてきました。
しかしそのほとんどが取り入れられることはありませんでした。
なぜならばHSPが実行ファイルを生成した時、ランタイムもパックする
インタプリタ言語だからです。

 ピンと来ないかもしれませんが、つまりHSPは標準命令を実行するために必要なライブラリを、
スクリプト中で使用しているかどうかに関わらず、すべてパックしてしまうということです。
 もしもHSPがスクリプトをネイティブコードに変換して実行ファイルを書き出すようならば、
そうした要望は受け入れられることが多くなると思いますが、
現在のHSPでは、そのちょっとの手間を自動化する命令をHSPに拡張することで、
その分生成される実行ファイルのサイズが大きくなってしまうのです。
(現在のHSP3では、本来なら数十KBで済むアプリケーションを作っても、150KBを超える
 大きな実行ファイルが生成されてしまいます。)

 要望によって拡張されたstick命令を使うプログラムを作っている場合に限り嬉しい機能拡張ですが、
その命令を必要としないプログラムを作っている場合は、実行ファイルのサイズをでかくするだけの
迷惑な拡張に他なりません。
 なので、そう難しくないスクリプトを少し書けば解決する程度の手間を自動化する機能を
HSP3に搭載することは、大きなリスクを背負うことになるため、
簡単に標準命令を拡張できないのが現状なのです。



如月

リンク

2006/11/24(Fri) 23:00:22|NO.3735

きっとパッカーやhsp3c.hrtの活用を考慮したご意見なのでしょうね。
丁寧なお教え、ありがとうございました。
失礼いたします。



Yuki

リンク

2006/11/25(Sat) 00:26:03|NO.3736

個人的には標準命令に取り入れて差し支えない範囲だと思います。
おそらくパディングの関係で実行ファイルのサイズも増えないでしょう。

将来的にはキー情報の取得は getkey に統一して stick は削除かマクロにするのがよいかなと思います。
stick は便利と言えば便利ですが Ctrl はあるのに Shift は無いなど微妙なところもあるので。



七次元

リンク

2006/11/25(Sat) 00:26:48|NO.3737

現在はインターネットの高速化、メディアの容量増加で数メガのファイルも簡単に送受信できますが
それでもサイズを軽くしたいですね。
USBメモリーなどを使えば問題ないのですがフロッピーを使うとなると150kbでもかなり大きく感じます。
それにインターネットを使ってる人が全員ブロードバントとも限らないので配布してる側としては
ナローバンドでもすぐにDLできるサイズが好ましいです。
>この手の「ちょっとした手間を省く機能拡張の要望」は多数目にしてきました。
>しかしそのほとんどが取り入れられることはありませんでした。
自分も同じく「ちょっとした手間を省く機能拡張」は追加する必要がないと思います。
あれやこれやと色々入れると起動も重くなりますしね。
やはり追加するなら標準命令でどうやってもできない動作を追加するでしょう。
PNGの場合はかなり容量が大きくなるので追加はしないと思いますが(苦笑



Drip

リンク

2006/11/25(Sat) 01:50:44|NO.3738

Dripです。

 Yukiさんのstickを排除してgetkeyに統一する意見は効率的だと思います。
実行ファイルサイズも若干小さくなると思います。
トリガー指定は初心者向けのギミックに思えるので、
それをマクロ化して対応すれば混乱も少ないですね。

> PNGの場合はかなり容量が大きくなるので追加はしないと思いますが(苦笑

 標準命令で拡張すると大きくてどうしようもないですが、
せめて公式プラグインが欲しいところです。^^;
多彩な画像形式の入出力に特化したプラグインは画像処理ソフト開発に重宝します。



GENKI

リンク

2006/11/25(Sat) 02:44:54|NO.3739

> getkey命令でもstick命令同様「押された瞬間だけ」を検出できるようにしてほしいです。

Dripさんのスクリをモジュール化すればOKってことで…。


> あるいはstick命令でチェックできるキーをgetkey命令と同じくらい増やしてほしいです。

32ビットじゃとても足りないですね。



ななし@HSP3掲示板

リンク

2006/11/25(Sat) 12:07:40|NO.3746

いまさらですが
http://hspwiki.nm.land.to/?Module%2F%B3%C8%C4%A5%C8%C7getkey
ってことですよね



如月

リンク

2006/11/25(Sat) 17:21:33|NO.3751

Yuki氏>
私の投稿の趣旨を理解していただけたのは、あなただけのようです。

念を押しますが、
私は「現状の」getkey命令でstick命令の挙動を再現する方法を教えていただきたい、
とは一切申しておりません。

今後の改良で、両者ともに中途半端な命令の、その一方を洗練し、
もう一方は切り捨てればいい、との考えから要望と提案として投稿させていただいたまでです。
しかし、他の投稿を見て回ったところ、
開発者関係者の方が閲覧・返信なさることはないようですから、
それも無意味だったようですね。



七次元

リンク

2006/11/25(Sat) 17:48:31|NO.3753

>今後の改良で、両者ともに中途半端な命令の、その一方を洗練し、
>もう一方は切り捨てればいい、との考えから要望と提案として投稿させていただいたまでです。
じゃあ最初からそういってくださいよ。
>getkey命令でもstick命令同様「押された瞬間だけ」を検出できるようにしてほしいです。
>あるいはstick命令でチェックできるキーをgetkey命令と同じくらい増やしてほしいです。
からは想像もつかない要望ですね。(一方を洗練し、もう一方を切り捨てる)

Dripさんが丁寧に返事を書いてくれているのに
>あなたが提示なさったような記述は不要です。
何様ですか? 自分の考えてた事と違ったとしても返答した人に失礼ですね。

>開発者関係者の方が閲覧・返信なさることはないようですから、
>それも無意味だったようですね。
無意味だと思うのならそれでいいでしょう。
初心者でも簡単にプログラミングできる環境を提供してもらえるのですから、それだけでありがたいですけどね

っとまたのってしまった・・・
長文失礼しました



リンク

2006/11/25(Sat) 18:49:12|NO.3758

如月さんの言っていることは私を含めHSPを知っている人なら理解できると思います。
私でも理解できるのですから、この件はHSPに関する「超がつくほど専門的な話」では な い ようです。

みなさんは、あなたの最初の発言を理解した上で発言しているのですよ。
Dripさんのが最初の返答で解決策を講じた理由は、2つ目のDripさんの返答で述べられています通り、
全体的に見たらデメリットのほうが大きいとお考えだからです。
あなた中心に考えたらもちろん、メリットのほうが多いのかもしれませんけど。

/*ここからは開発者がこれを見ているかについて*/
開発者の方々が返信することはないのかもしれませんが、閲覧していないとは限りませんよ。
もし、私が開発者だったら、返答はしません。
理由は、もし、1度でもこの手の話に"開発者の立場"で投稿してしまったら、以後、
「この種類の全ての話に返答しないと不公平になる」からです。敵を作ることになります。
それに、開発者と言う肩書きで書き込むと、お互い気を使わざるを得なくなります(あなたはどうか知りませんが少なくとも私は気を使います)。
それに、私はこうも思います。
時々開発者は、「開発者という身分を隠して」書き込んでいるかもしれないと。
もしかしたら、上の方々も開発者かもしれませんよ。

で、私個人の意見を言わせていただければ、そういう機能は
「自分で作ってください」
と言わざるを得ません。
そのために、#deffuncがあるのではないのですか? それに、もしも標準でサポートしてほしいのであれば、「あなたいわく、開発者が見てくれないかもしれないこの掲示板」に書き込むよりは、メールで問い合わせるのが妥当かと。
「あなたは、開発者がこの文を見てくれないと思っている」にも関わらず、この掲示板に書き込んだ。矛盾です。

七次元様を超える長文、失礼した。
タグの使い方を間違っていますが、強調する唯一の手段でしたので、あしからず。

はい、誤爆でした。



七次元

リンク

2006/11/25(Sat) 20:23:01|NO.3759

あ氏の書き込みを見て書き忘れてたのを思い出した。
>開発者関係者の方が閲覧・返信なさることはないようですから
っとありますがつい最近におにたま氏は書き込みしてますよ?
おにたま氏が閲覧していることもこの掲示板に居る人はだいたい知ってますし
とりあえずおにたま氏を巻き込むような発言はやめてください
気に食わないのならユーザーの意見をすべて取り入れてくれる言語でも探してください



GENKI

リンク

2006/11/25(Sat) 21:53:24|NO.3761

 Shiftキーを連打もしくは長押しするとユーザー補助機能を有効になります。
コレを回避するにはユーザー補助のオプションでショートカットキーを使わない設定に
変更する必要があります。同様にNumLockを連打してもユーザー補助機能が有効になります。

 何かの作業中などに、あやまってShift連打してしまいこれが有効になるとでかいビープ音と
ともにダイアログが開いてちょっとビックリしてしまいます。(^ ^;

 このようなことがあるのでshiftキーをゲームに利用すると、ユーザーによっては
ユーザー補助機能が有効になりゲームどころではなくなってしまいます。
stick命令はその便利さからゲームで使用されることが多いためShiftキーをはずしているの
だと思います。



> 「自分で作ってください」

ないものは作る。
最近忘れかけてた言葉だけど、基本ですねぇ〜。
とはいえ、

> getkey命令でもstick命令同様「押された瞬間だけ」を検出できるようにしてほしいです。

これは最初からついてると便利だと思います。(使い方間違えると迷惑ソフトになっちゃうけど。)



> ユーザーの意見をすべて取り入れてくれる言語でも探してください

 言語に限らず、ユーザーの意見全てを詰め込めばいいものが出来上がるかといえばそれは違う。ですね。
この点はいろんなもののユーザとして理解しておきたいところです。



リンク

2006/11/25(Sat) 23:31:32|NO.3766

/*追加訂正*/
自分の書き込みの、
>理由は、もし、1度でもこの手の話に"開発者の立場"で投稿してしまったら、以後、
>「この種類の全ての話に返答しないと不公平になる」からです。敵を作ることになります。
と申しましたが、もし、提案に類する書き込みに対し開発者という立場の人間が書き込みを行っていたとしても、それを責めるものではなく、「もし私が開発者の立場だったら」というifの話ですから書き込んでおいて無責任ですが気にしないでください。
 それと、本文中で「Dripさん」と"さん付け"し、「七次元様」と"様付け"したのには理由はありません。どうか傷ついたりしないでください。格付けしたわけではありませんから。

また、おにたま様がここに書き込みをなさってるとは知りませんでした。あまりここの雰囲気を知らぬまま書き込んでしまったご無礼をお許しください。
なぜ書き込んだのかの言い訳をするなら、「目に余ったから」とでも申しましょうか。

私やその前の方が言った「自分で作る」が正論だとしたら、周りから見れば、如月さんは自分で解決するべきですが、もし如月さんの能力に  今は 適さない(経験地が足りない)とすれば、謝ります。これから頑張ってください。
ですから今は最初のDrip様のコードを参考になさってください。

しかしながらGENKI様のおっしゃるとおり、最初から、押された瞬間だけを検出できるのも便利だと思います。
結論:開発者の皆様、どうか頑張ってください。(脱帽

P.S. 「ユーザーの意見をすべて取り入れてくれる言語」を探すぐらいだったら、自分で作ったほうが早かったりして(笑 まぁ自分の理想の言語なんて、自分にしか作れないかと。。。(技術はさておき あ、小生には無理ですからね(汗



_

リンク

2006/11/26(Sun) 01:45:02|NO.3768

>Dripさんが丁寧に返事を書いてくれているのに
>>あなたが提示なさったような記述は不要です。
>何様ですか? 自分の考えてた事と違ったとしても返答した人に失礼ですね。

有難迷惑を被った如月氏だけが失礼なことをしたと感じることはない
互いに嫌な思いをしたのだからイーブン



もっちり

リンク

2007/1/16(Tue) 22:59:38|NO.4855

また書き直してしまいました。
キーボードの特性上、3つ4つ以上(もしくはそれ以上)同時にキーを押された場合は、
キーボードによって押されてない状態になります。


;-----------------------使い方 ; ; ; sgetkey(p1,[p2]) ; ; p1 = 調べるキーコード(キーコードはgetkeyと同じです) ; ; p2 = 押しっぱなしスイッチ(0:押しているあいだ(1)を返す。1:押したときのみ(1)を返す)省略時(p2=0) ; ; repeat ; a = sgetkey(65,1) ;[A]が押されたら(1)を返す。押されてない(押しっぱなし)場合は(0)を返す。 ; if a = 1 { ; dialog "OK" ; break ; } ; wait 1 ; loop ; end ; ;-----------------------モジュール部 #module #defcfunc sgetkey int keycode,int rep if i = 0 : dim dkey,128 : i = 1 getkey key,keycode c = (key ! dkey(keycode)) & (key ! 0) dkey(keycode) = key & rep return c #global ;-----------------------テスト repeat redraw 0 if sgetkey(90,1) : z++ ;[Z] if sgetkey(88) : x++ ;[X] if sgetkey(67) : c++ ;[C] if sgetkey(65,1) : a++ ;[A] if sgetkey(83,1) : s++ ;[S] if sgetkey(68,1) : d++ ;[D] if sgetkey(1) : m1++ ;[MOUSE LEFT] if sgetkey(2,1) : m2++ ;[MOUSE RIGHT] color 255,255,255 : boxf 0,0,639,20 color 0,0,0 : pos 0,0 mes "Z=" + z + ", X=" + x + ", C=" + c + ", A=" + a + ", S=" + s + ", D=" + d + ", MOUSE(LEFT)=" + m1 + ", MOUSE(RIGHT)=" + m2 redraw 1 wait 1 loop



魔狼♂

リンク

2007/3/14(Wed) 08:30:56|NO.6278

Dripさんが書いてくださったスクリプトが今作ってる格闘ゲームで大変役に立ってます。
何ヶ月もgetkeyを押したときだけ反応するようにするのにかかったのにOTZ

>getkey命令でもstick命令同様「押された瞬間だけ」を検出できるようにしてほしいです。
これには同意しますが自分でまた作るのも楽しいし、なかなか難しい問題ですね^^;



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