と書いてたんですが、今回はそういうもののヒントになるようなお話です。
vrubyには VRMouseFeasible というものがあります。
これを使うとマウスのクリックを捕らえたりできます。
今回使うのはほんの一部ですが、みなさんはもっといろいろ調べて試してみてください。
こんなのを作ってみました。
__________________________
#! ruby -Ks
require 'vr/vruby'
require 'vr/vrcontrol'
require 'vr/vrhandler'
class TestForm < VRForm
include VRMouseFeasible
include VRDrawable
def initialize
#ボタンの画像切り替え用の変数
@bc = 0
end
def construct
self.caption = 'gz.test'
@font = @screen.factory.newfont('MS Pゴシック', 12)
#画像の準備
@bmp1 = SWin::Bitmap.loadFile("maskom/cara1.bmp")
@bmp2 = SWin::Bitmap.loadFile("maskom/cara2.bmp")
#メッセージ表示部
addControl(VRStatic, 'mes1_area','結果表示ですよ',10,10,200,20)
@mes1_area.setFont(@font)
end
def self_paint
if @bc == 0
drawBitmap @bmp1,50,50
@mes1_area.caption = "オレンジですよ"
else
drawBitmap @bmp2,50,50
@mes1_area.caption = "ピンクですよ"
end
end
def self_lbuttonup(shift, x, y) #引数で座標を指定
#この座標の範囲はクリックが有効
if 50 < x and x < 80 and 50 < y and y < 80
if @bc == 0
@bc = 1 ; self.refresh
else
@bc = 0 ; self.refresh
end
else
@mes1_area.caption = "そこは違いますって"
end
end
end
VRLocalScreen.start(TestForm,100,100,150,150)
__________________________
どういうものかというと、用意した画像をボタンとして扱います。
ボタンはスゴロクの時に作ったコマを使いまわしました。
(画面の見本です。動きません)
サンプルではコマの画像(例えばcara1.bmp)は「maskom」という名前のフォルダに入っている事になってます。
オレンジとピンクのコマです。コマの大きさは30×30ピクセルです。
画像の上でマウスがクリックされると画像の色が変化します。
というか正確には2つの画像を入れ替えます。オレンジ→ピンク
そして画像以外の場所でクリックされると「そこは違いますよ」とメッセージを出します。
画像の変化は@bcという変数を使って条件式で管理してますが
肝になっているは def self_lbuttonup(shift, x, y) です。
これは VRMouseFeasible のイベントハンドラです。
マウスの左ボタンのクリック(厳密にはボタンが上がった)を捕らえます。
self_lbuttondown(shift,x,y) という(ボタンが押された)のもあります。
なんで2つ必要なのかは初心者の自分にはまだわかりませんが、何か必要を感じるときがくるのかもしれません。
もちろん右ボタン用の self_rbuttonup(shift,x,y) や self_rbuttondown(shift,x,y)
もあります。
もうひとつself_mousemove(shift,x,y) というイベントハンドラがありますが
これはまだ使ったことがありません。マウスの動きを捕らえるのでしょう。
本題に戻ります。
引数のx,yはクリックされた座標が入ります。
なので、条件式を使ってクリックされた場所が画像の範囲内だったら……
という命令を作れば良いわけです。
画像はX座標50ピクセル,Y座標50ピクセルの位置に表示させていて、画像のサイズが30×30ピクセルですから
あとはソースとにらめっこしてもらえればわかると思います。
使い方によっては画像ボタンを作るヒントにもなると思いますし、
間違い探しや脱出ゲームとかのクリックゲームを作るヒントにもなると思うんですがどうでしょうか。
今回もどこか間違ってたら暖かいツッコミをお願いいたします
にほんブログ村