2009年11月10日

Rubyの勉強17補足(画面のちらつき解決)

やっぱり自分はまだまだ初心者です(汗)
昨日の記事の訂正と補足です。

サンプルの def self_mousemove 内の処理(画像の変更)で画面がちらつくということを書きましたが、
self.refresh の扱いが原因でした。

vrubyのプログラムって基本的にそれ自体が無限ループしてるようなものですから
常にマウスポインタの座標をチェックするような命令の中に漠然とself.refreshなんて書いたら
高速で毎回画像を描画しなおしちゃいますもんね。
たぶんこれが原因かと。

で、以下のように書き換えて(一部追記)してみました。
確実に画像が変更された場合のみ self.refresh します。
__________________________
  def self_mousemove(shift,x,y)
a = @bmpc
if 20 < x and x < 100 and 40 < y and y < 120
@bmpc = 1
else
@bmpc = 0
end
self.refresh if a != @bmpc
end

__________________________

実行してみたところちらつきが無くなりました。
自分のせいでした、ごめんなさい(滝汗)

ついでに、def self_mousemove(shift,x,y) のx,yがマウスのポインタから座標情報を得ているというのを
視覚的に認識したくて書いたものを示します。

続きを読む
posted by Hol_nice at 18:04| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする

2009年11月09日

Rubyの勉強17(画像ボタンとタイマーのお話)

「クリックゲーム」の話の続きです。

前回vrubyの VRMouseFeasible でマウスのクリックを捕らえて画像を変化させました。
今回はタイマー VRTimerFeasible と組み合わせておさらいしてみようと思います。

サンプルも少しだけゲームっぽくしてみました。

5times_s1.jpg
(画面の見本です。動きません)

今回作るものはボタンの画像が1つと文字表示部が1つだけのシンプルなものです。
マウスのポインタがボタンの上に来ると色が変わります。
そしてボタンの画像を押す(マウス左クリック)とボタンの絵は押された状態に変わります。

クリックを押している間はタイマーが作動します。
クリックを放すとタイマーが停止して押していた間のタイムが表示されます。

というのを作ってみました。
一応(たとえば)5秒ぴったりで止められるかな? という感じで作ってますが
ぴったりで止めても「おめでとう」的なメッセージは用意してません。

必要ならボタンの画像も使ってください。

go_btm1.bmp go_btm2.bmp go_btm3.bmp

続きを読む
posted by Hol_nice at 21:35| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする

2009年10月27日

Rubyの勉強16(マウスのクリックを捕らえる)

以前にスゴロクの話が一段落したら「クリックゲーム」の話でも……
と書いてたんですが、今回はそういうもののヒントになるようなお話です。

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)

__________________________

どういうものかというと、用意した画像をボタンとして扱います。

続きを読む
posted by Hol_nice at 21:58| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする