質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1664閲覧

文字の表示 

yusuke.

総合スコア66

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/07/07 08:53

画面を出して、文字を表示するようにしたいのですが、startを実行しても、文字が表示されません。
ほかの画面では表示することができているのになぜできないのでしょうか。
エラー文も出ていないので、今の自分の知識では、どうしたらいいのかわかりません。
どなたかわかる方教えていただけないでしょうか。

ruby

1#!ruby -Ks 2require "sdl" 3require "./color.rb" 4 5 6def yomikomi() 7 i = 0 8 j = 0 9 $moji =[] 10 f = open("./dat/mondai1.dat","r") 11 while text = f.gets do 12 $moji[i] = text.chomp 13 i += 1 14 end 15 f.close 16 $mondaisu = i/8 17 while j <= i/8 18 eval("$q#{j} = [ $moji[j*8+0],$moji[j*8+1],$moji[j*8+2], $moji[j*8+3],$moji[j*8+4],$moji[j*8+5],$moji[j*8+6],$moji[j*8+7 ] ]") 19 j += 1 20 end 21end 22 23def mondai 24 $q = [] 25 eval("$q = $q#{rand($mondaisu)}.clone") 26 $mondai = $q[0] 27 $sentakusi1 = $q[1] 28 $sentakusi2 = $q[2] 29 $sentakusi3 = $q[3] 30 $sentakusi4 = $q[4] 31 $sentakusi5 = $q[5] 32 $kotae = $q[6] 33 $score = $q[7] 34end 35 36 37class Gmen 38 WINDOW_YOKO = 750 39 WINDOW_TATE = 550 40 BITPIKUSERU = 0 41 42 43 def initialize 44 SDL.init(SDL::INIT_EVERYTHING) 45 @screen2 = SDL.set_video_mode(WINDOW_YOKO,WINDOW_TATE,BITPIKUSERU,SDL::SWSURFACE) 46 SDL::TTF.init 47 @font = SDL::Kanji.open("font/jiskan24.bdf",24) 48 @font.set_coding_system(SDL::Kanji::SJIS) 49 end 50 51 def drawBack 52 @screen2.fill_rect(0,0,WINDOW_YOKO,WINDOW_TATE,Color::WHITE) 53 end 54 55 def refresh 56 @screen2.update_rect(0,0,0,0) 57 end 58 59 def start 60 @font.put(@screen2,"今から問題が出てきます。問題によって、スコアが異なります。",50,30,0,0,0) 61 @font.put(@screen2,"正解だと思う選択肢の番号のキーボードを押してください。",50,70,0,0,0) 62 @font.put(@screen2,"始めるにはスペースキーを押してください。",50,120,0,0,0) 63 while true do 64 while event = SDL::Event2.poll # (1) 65 case event # (2) 66 when SDL::Event2::Quit 67 exit 68 when SDL::Event2::KeyDown 69 if event.sym == SDL::Key::SPACE then # (4) 70 puts "ok" 71 end 72 end 73 end 74 end 75 end 76 end 77 78 def mondaihyouji 79 @font.put(@screen2,"#{$mondai}",200,300,0,0,0) 80 @font.put(@screen2,"#{$sentaku1}", 450,300,0,0,0) 81 @font.put(@screen2,"#{$sentaku2}", 480,300,0,0,0) 82 @font.put(@screen2,"#{$sentaku3}", 510,300,0,0,0) 83 @font.put(@screen2,"#{$sentaku4}", 540,300,0,0,0) 84 @font.put(@screen2,"#{$sentaku5}", 570,300,0,0,0) 85 end 86 87 88 89 90 91def hajime 92 g = Gmen.new 93 g.drawBack 94 g.refresh 95 g.start 96 g.kaisi 97end

hajimeは別のファイルで実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Gmenクラスのstartメソッドで

Ruby

1@font.put(@screen2,"始めるにはスペースキーを押してください。",50,120,0,0,0)

の後に、@screen2.update_rect(0,0,0,0)を実行する必要があるんじゃないかな。ネットでRuby関連でSDLに関する検索をすると、update_rectメソッドを呼んだ契機で対象のウィンドウを再描画するとあるので、必要なメッセージを描画(つまり、@font.put()を実行)した後にupdate_rectを呼べばstartメソッドで表示しようとしているメッセージが表示されると思います。
(self.refreshでもいけるかもしれない。update_rect(0,0,0,0)を呼ぶことには変わりないので)

別件で、hajimeメソッドの最後にg.kaisiとしてあるけど、Gmenクラスの中にkaisiメソッドが見当たりません。これはちゃんと存在します?(まあ、エラーが出てないところを見ると、今回提示してないだけで、実際にはkaisiメソッドはちゃんとあるのかなと思ったりしますが)
付け加えて、Gmenクラスのstartメソッド、ひいてはGmenクラス自体が閉じられていない(endの対応が取れていない)ように見えますが、そこは大丈夫ですか?こちらに転記する際に抜けたようならばいいのですが。

投稿2016/07/08 17:04

編集2016/07/09 16:29
archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yusuke.

2016/07/11 08:09

回答ありがとうございます。 表示はできるようになったのですが、問題表示を実行したときに @font.put(@screen2,"今から問題が出てきます。問題によって、スコアが異なります。",50,30,0,0,0) @font.put(@screen2,"正解だと思う選択肢の番号のキーボードを押してください。",50,70,0,0,0) @font.put(@screen2,"始めるにはスペースキーを押してください。",50,120,0,0,0) これが、消えるようにするにはどうすればいいでしょうか。また画面表示からやり直したらいいのでしょうか。  あと、mondaihyoujiを実行しても、$monndaiしか、表示されていません。 monndaiを表示した後に、refreshを実行しても、表示できないのですが、どうすればいいでしょうか。  g.kaisiは間違いでした。細かいご指摘ありがとうございます。
yusuke.

2016/07/11 08:25

何度もすいません。 $mondaiしか表示しかされないのでそこを調べてみたところ、$sentaku1などに、うまく問題をあてはめることができていないようでした。しかし、どこで、うまくあてはまることができていないのかが分かりません。教えていただけないでしょうか。
yusuke.

2016/07/11 09:15

ごめんなさい。 $sentaku1で呼びたかったのは、mondaiの$sentakusi1で、ただのスペルミスでした。
archiver

2016/07/11 10:39 編集

画面の仕様がわからないので何とも言えないところがあるけど、startメソッドで表示したメッセージを消すには、draw_backメソッドで画面全体を塗りつぶすのが一番簡単じゃないかな(契機的にはスペースキーを押されたらでいいと思うので、スペースキーが押されたと判定した後)。 それと、$mondaiは表示されて、$sentakusi1等が表示されないというのは自己解決したということでいいのかな?
yusuke.

2016/07/12 07:25

わかりました。丁寧にご説明ありがとうございます。 解決しました。
guest

0

def startとdef mondaihyoujiの中の「put」が「puts」のスペルミスではないですよね?

投稿2016/07/08 02:26

Takuma_Tanaka

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yusuke.

2016/07/08 07:37

puts ではないです。 putという画面に描写するためのものを使っています。
Takuma_Tanaka

2016/07/08 09:48

「@font.put(@screen2,"今から問題が出てきます。問題によって、スコアが異なります。",50,30,0,0,0)」の5・6・7引数の値が「0」だから文字が黒でバックグラウンドも黒だから文字が見えないってこともないですよね? もしそうだとしたら、「@font.put(@screen2,"今から問題が出てきます。問題によって、スコアが異なります。",50,30,255,255,255)」にしたら表示されると思います。 見当違いだったらすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問