ruby クリックしたとき
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,103
rubyについて質問です。
main を実行すると画面を表示することはできるのですが、画面に表示されている「あいうえお」をおすと新しい画面が出るようにしたいです。どうすればいいか教えてください。
rubyの本を見てだいたい作ってみたんですがどう改良したらいいですか
ソースコード
main
!ruby -Ks
require "./windowkiku.rb"
def clicked?
if (550 < 100) and (200 < 20)
return true
else
return false
end
end
while true do
while event = SDL::Event2.poll do
case event
when SDL::Event2::Quit
exit
when SDL::Event2::MouseButtonDown
x = event.x
y = event.y
if clicked?
puts "ok "
end
end
end
window = Window.new
window.drawBack
window.gamestart
window.refresh
end
windowkiku
require "sdl"
require "./color.rb"
class Window
WINDOW_YOKO = 750
WINDOW_TATE = 550
BITPIKUSERU = 0
def initialize
SDL.init(SDL::INIT_EVERYTHING)
@screen = SDL.set_video_mode(WINDOW_YOKO,WINDOW_TATE,BITPIKUSERU,SDL::SWSURFACE)
SDL::TTF.init
@font = SDL::Kanji.open("font/jiskan24.bdf",24)
@font.set_coding_system(SDL::Kanji::SJIS)
end
def drawBack
@screen.fill_rect(0,0,WINDOW_YOKO,WINDOW_TATE,Color::GREEN)
@font.put(@screen,"あいうえお",230,50,255,255,255)
end
def refresh
@screen.update_rect(0,0,0,0)
end
def gamestart
@font.put(@screen,"かきくけこ",550,200,255,255,255)
@font.put(@screen,"さしすせそ", 570,300,255,255,255)
end
end
color
> class Color
SKYBLUE = [135,206,235]
GREEN = [ 0,128, 0]
WHITE = [255,255,255]
YELLOW = [255,255, 0]
BULACK = [ 0, 0, 0]
LIGHTBLUE = [ 200,255,255]
PINK = [255,192,203]
end
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
まずはhttps://teratail.com/questions/37106と同質問ですよね、別スレッドを立てて、同じ質問はしないように!
あまり詳しくはないですが、ざっと見て気になったところだけ、
clicked?メソッドですが、いきなり
if (550 < 100) and (200 < 20)
という判定をしてますが、これ必ずfalseになります(どちらの式も成り立ちませんよね)。おそらく、550か100、200か20のそれぞれどちらかは変数になるのではないかと。
それと、このclicked?メソッドは「ある範囲がクリックされたかどうか」を判定するメソッドになると思います。しかし、「クリックされた箇所」が処理に渡されていません。clicked?メソッドの呼び元の前で
x = event.x
y = event.y
としていますが、このxとyをclicked?メソッドに渡さなければならないのではないでしょうか。そして先の条件文でxとyの範囲判定をするのではないでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/06/07 22:59
ありがとうございます。xとyの範囲の判定の文がわかりません。教えていただけないでしょうか。
2016/06/08 23:24
やりたいことは「あいうえお」と書かれたところがクリックされた時に画面が変わることですので、「あいうえお」と描画されている部分の範囲(開始座標と終点座標)を明確にする必要があります。開始座標は
@font.put(@screen,"あいうえお",230,50,255,255,255)
で指定している(x,y)=(230, 50)になるでしょう。ただ、終点座標はここからじゃわからないんですよね。これは試行錯誤で求めるしかないのかなと。
で、範囲判定の条件ですが、x軸、y軸でそれぞれ求めて、そのANDを取るようにします。つまり、
230 <= x <= 終点のx座標
50 <= y <= 終点のy座標
この2つの範囲を同時に満たすように条件文を書きます。
それと思ったのですが、clicked?メソッドはWindowクラスのメソッドにした方が収まりがいいと思います(Window内の特定の箇所がクリックされたかを判定する処理のため)。
2016/06/09 17:47
参考にして直してみます。