HotSoupProcessorの記録 -9ページ目

HotSoupProcessorの記録

コンピューター言語 HotSoupProcessor の練習記録です

クリックができたら次はドラッグです。
薬じゃない方の、ドラッグ&ドロップとかのドラッグです。



ヘルプで、"ドラッグ"って入力してみたらいいのを見つけました。
やっぱヘルプすごい。

ただ、ドラッグ&ドロップ(画面へアイコンをドロップするようなの)も
ヘルプでは出てくるので、それじゃない、画面上でのドラッグを選びます。

んでヘルプからパクったいただいた版。
---
; ドラッグ
; 参考:sample\basic\groll.hsp
*main
stick key,$300
if( key&$100 ){
; ドラッグ開始
goto *main2
}
await 15
goto *main

*main2
stick key,$300
if( (key&$100)=0 ){
; ドラッグ終了
goto *main
}

; マウス位置を表示
color 255,255,255
boxf
color 0,0,0
pos 0,0
mes str(mousex) + ":" + str(mousey)

await 15
goto *main2
---

ぶっちゃけ、あんまりわからないです。

stickでキー入力情報を取得して、
それがマウス左クリックだったら~
というif文だけど、
$300と$100が謎。
ヘルプでも、どう調べたらいいのかわからない。

$がなんなのか、よくわからないけども、
今回のポイントはそこだけなので
別のことやりたくなったときにでも調べよう。
ドラッグだったら、今回のように書けばいいってことで!
クリックイベントを取得する方法です。
HSPではとても簡単。

---
; クリック取得
onclick gosub *MouseClickEvent
stop

*MouseClickEvent
mes "クリックしたよ"
return
---

処理のどこかでonclickっていうと、
クリックリスナー(言葉が合ってるかわからない・・)が動いて
クリックイベントを拾えるようになる。
んで、今回だったら*MouseClickEventへ移動して
なんか処理をすればいい。



+α情報として
イベントを拾うのをやめたい場合は、
onclick 0
で一時停止。
onclick 1
で再開。
モジュールをクラスのように使って、オブジェクト指向でやると、
きっと配列に詰めたくなると思って、その練習。


---
; モジュールの配列

; モジュール
#module modColor nVal
#modinit int p_nVal
nVal = p_nVal
return
#modcfunc GetVal
return nVal
#global

; メイン
; モジュール型の配列を定義(3要素)
dimtype naRGB, 5, 3

; 値を設定
; 実行エラー25になる
; newmod naRGB(0), modColor, 200 ; newmodでは、配列要素をしていしてはいけないらしい
; newmod naRGB(1), modColor, 240
; newmod naRGB(2), modColor, 200
newmod modRGB0, modColor, 200
naRGB(0) = modRGB0
newmod modRGB1, modColor, 240
naRGB(1) = modRGB1
newmod modRGB2, modColor, 200
naRGB(2) = modRGB2

; 値を取得
color GetVal(naRGB(0)), GetVal(naRGB(1)), GetVal(naRGB(2))

; テスト
boxf

stop
---

dimtypeは、型を指定した配列定義。
intでもdoubleでも配列を作れるのだけど、今回はモジュール。
モジュールは5です。

<脱線>
ちなみに、5を求める関数も用意されています。
vartype。
これに、すでに作った変数を与えると、5とか、intだったら4だとか、返ってきます。
</脱線>



あと手間取ったのが、
newmodに直接配列要素を指定しちゃいけないということ。
コンパイルはOKで、実行時のエラーが出ました。
  25 "配列の要素書式が間違っています"

ググったら公式HPの説明ページがヒットしました。
http://www.fujidig.com/ohdl/doclib/error.htm
  配列要素の書き方が間違っている場合や、配列要素を書いては
  いけない場所に書かれている時に表示されます。
とのこと。
後者の場合なんだろうな。

ということで、配列でない変数で作ってから、配列要素へ移して解決。