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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0603
ルーイヨッシーstick命令について8解決


ルーイヨッシー

リンク

2006/6/3(Sat) 12:16:55|NO.961

こんにちは。
今、シューティングゲームを組んでいるのですが、
サンプルでstick命令で受け取った変数を、$10とか$80で調べていたり、
非トリガータイプキーの設定を$1fにしていたりしていますが、
1とか2とか4とか、いくつもキーを押さない限りそういった数しか
入らないと思っていたのですが・・・

実際ifで調べても反応してくれないので、
なんだかgetkeyとかなり違う気がしてなりません・・・

この$1fとか$10とか$80ってなんのことですか?



この記事に返信する


kz3

リンク

2006/6/3(Sat) 13:36:50|NO.963

getkeyとstickは違いますよ。
# トリガーっていうのは拳銃の発砲するときに指を引っ掛ける部分のことですね。
# 拳銃は押しっぱなしだと連射できませんが、マシンガンは押しっぱなしでも連射できます。
# 非トリガーはマシンガンみたいなものです。

stickは複数のキーの状態を一つの変数に格納します。
getkeyみたいに「=」で状態を比較すると正確に取得できません。( 複数の状態を保持しているから )

stickは各々のキーの状態を1ビットで保持します。
だから「&」を使ってビット単位でオンビットかオフビットかを調べます。

「$( 16進数 )」が分かりにくければ「%( 2進数 )」を使えば視覚的に分かりやすくなりますよ。

repeat wait 1 stick key, %1111 arrow = "" if( key & %0001 ): arrow += "←" if( key & %0010 ): arrow += "↑" if( key & %0100 ): arrow += "→" if( key & %1000 ): arrow += "↓" title arrow loop



ルーイヨッシー

リンク

2006/6/3(Sat) 16:24:07|NO.967

あ!あれ16進数だったんですか!
($は16進数、%は2進数だったのか・・・)
すいませんでした!もう一回見てみます!



ルーイヨッシー

リンク

2006/6/3(Sat) 16:33:57|NO.968

$fを非トリガーにしたらちゃんとカーソルキーだけになりました!

なぜ、こういう風に、わざわざ16進数や2進数にするんでしょう?
でもって、パラメータは足した数でなぜ判別できるんでしょうか?

聞きっぱなしですいません。

あと、A〜Zなどのキーはstick命令で認識できませんか?



hiroki

リンク

2006/6/3(Sat) 16:53:28|NO.969

> パラメータは足した数でなぜ判別できるんでしょうか?

数字を2進数にし、実際に足したら解りますよ。
ディップスイッチみたいなものです。
ちがうか? 説明しにくい



GENKI

リンク

2006/6/3(Sat) 17:56:06|NO.972

> パラメータは足した数でなぜ判別できるんでしょうか?

参考資料
http://hspwiki.nm.land.to/?%BE%AE%A5%EF%A5%B6%2F%A5%D3%A5%C3%A5%C8%C1%E0%BA%EE#q988b0e6



K

リンク

2006/6/3(Sat) 18:50:44|NO.973

>ディップスイッチみたいなものです。
>ちがうか? 説明しにくい
てか、同じですw


>なぜ、こういう風に、わざわざ16進数や2進数にするんでしょう?

感覚的に$fは4ビット全部1と分かる人が16進数表記に
すればいいので、無理に使う必要はありません。


>でもって、パラメータは足した数でなぜ判別できるんでしょうか?

1+2+4+8 =15
$01+$02+$04+$08 =$0f
%0000_0001+%0000_0010+%0000_0100+%0000_1000 =%0000_1111

これは、ビットでフラグを管理してるからです。
一つの変数で、ON/OFFのフラグを複数持たせ、同時に又は個別に
判定したい時に使います。

一つの変数で3種類のON/OFFフラグが欲しい時、普通にON時1,2,3で判定すると
全てOFFかどれか一つONしか判定できません。

1〜3ビットを使って判定すれば、3種類全部を個別にON/OFFの判定が出来ます。
%0001 1.ON 2.OFF 3.OFF
%0010 1.OFF 2.ON 3.OFF
%0100 1.OFF 2.OFF 3.ON
%0101 1.ON 2.OFF 3.ON

&で見たくないビットを0にして必要なビット情報だけを取り出せます。
3ビットだけ見たいとき
%0101 & %0100 = %0100
%0001 & %0100 = %0000



K

リンク

2006/6/3(Sat) 19:06:57|NO.974

>なぜ、こういう風に、わざわざ16進数や2進数にするんでしょう?

他にも理由があった、
数値の上限が2の累乗になってる時に分かりやすいのと、一つの変数で何種類かのデータを
持たせた時に視覚しやすいから。
色データなんかで
R,G,B
255,255,255 変数が3個必要
$ff_ff_ff 一つでいい(これを十進数で表すと16777215・・・分かりにくいと思う)
($R_G_B)



ルーイヨッシー

リンク

2006/6/4(Sun) 01:41:26|NO.977

ん〜
わかったような、分からないような。
でも、あのパラメータが16進数、2進数で出来るとわかった分、
役に立ちました!一つの変数で、色々できるんですね!

ありがとうございました!



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