CoRサンプル集: 【CoR】メッセージウィンドウ

CoRで使えるメッセージウィンドウを紹介!
CoRサンプル集からこのゲームページを開くとソースファイルが見れます。

2021/02/04 進化しました!
Code on Rmake


Rmakeクイズ!
プレー:19 (人数:12) クリア:8 評価: 20 (2回)
scene 'start' do #背景塗り潰し用画像素材 $bgfill_spId = 325178 $parts_size = 10 #画像1パーツ当たりのサイズ(px) $clip_size = 5 #実際に使うサイズ #各種アイコン素材 $icons_Id = 325218 #===== レイヤー =====# $system_layer = nil bg = nil preload do # 背景塗り潰し用画像の読込み image 'color_sp', id: $bgfill_spId # アイコン素材の読込み image 'icon_sp', id: $icons_Id, frame_size: [32, 32] end create do #========== レイヤーの生成 ==========# $system_layer = add_layer end update do #ゲームの中身 message("Hello Code on Rmake World!\n\nZキーを押してね。") message("これはspeek関数みたいなやつだよ!") message("改\n行\nも\n出\n来\nる\n!") message("なーがーいーのーはーだーめーだーよおおおおおおおおおおおおおおおおおおお") message("文字色を変えられる!", {:c => '#FF0000'}) message("文字サイズも!", {:size => 36}) message("太字・・・・・・?", {:size => 36, :b => true}) message("斜体……??", {:size => 36, :it => true}) message("ウィンドウの色も少しは選べる……!", {:bg_c => 2, :frame_c => 5}) #白く塗る bg = filling(0, 0, 800, 450, 1, 100) $system_layer.add bg message("背景の不透明度も!(緑40)", {:bg_c => 3, :frame_c => 4, :bg_opacity => 40}) message("60!", {:bg_c => 3, :frame_c => 4, :bg_opacity => 60}) message("80!", {:bg_c => 3, :frame_c => 4, :bg_opacity => 80}) message("100!", {:bg_c => 3, :frame_c => 4, :bg_opacity => 100}) #スプライトの削除 bg.destroy message("そして!", {:x => 50, :y => 50, :w => 700, :h => 300}) message("ソ\nー\nシ\nャ\nル\nデ\nィ\nス\nタ\nン\nス", {:x => 380, :y => 0, :w => 40, :h => 450, :h_interval => 60}) game_clear end render do end end #========== メッセージウィンドウ定義 ==========# #========== 塗り潰し ==========# #===== 素材定義 =====# sprite 'color_sprite' do image 'color_sp' origin :left_top end #===== 関数定義 =====# #配置座標, サイズ, 色0~, 不透明度0~100, カメラ独立 def filling(x, y, w, h, c, opacity, camera = true) filsp = put_sprite 'color_sprite' do src_rect(opacity*$parts_size+2, c*$parts_size+2, $clip_size, $clip_size) position x, y scale w / $clip_size, h / $clip_size if camera camera_fixed! end end return filsp end #========== メッセージウィンドウ ==========# #===== 素材定義 =====# #▼アイコン sprite 'icon_sprite' do image 'icon_sp' origin :left_top animation 'msg', [0, 1, 2, 3, 4, 3, 2, 1], 5, true end #メッセージテキスト text 'message-text' do origin :left_top end #===== 関数定義 =====# #▼アイコン def msgicon(x, y, w, h) sp = put_sprite 'icon_sprite' do position x, y frame_index 0 scale w / 32, h / 32 camera_fixed! end sp.start_animation('msg') return sp end #メッセージ def message(m='', args = {}) # 引数はハッシュテーブル # 引数初期値 #座標, サイズ, テキストサイズ・色・太字・イタリック, 背景不透明度・色, 枠色, 文字行間 arguments = {:x => 100, :y => 300, :w => 600, :h => 125, :size => 18, :c => '#FFFFFF', :b => false, :it => false, :bg_opacity => 80, :bg_c => 0, :frame_c => 1, :h_interval => 5} # 引数書換え args.each do |key, value| arguments[key] = value end #Zキーを離していなければtrue if keyboard.down?('Z') waitloop = true else waitloop = false end #画像用設定 ofst = 12 #枠と文字位置決定用 fr_w = 2 #フレーム幅 2pxに設定 #背景の設定 msbg_sprite = filling(arguments[:x], arguments[:y], arguments[:w], arguments[:h], arguments[:bg_c], arguments[:bg_opacity]) #枠の設定 msfr = [] #上 msfr << filling(arguments[:x], arguments[:y], arguments[:w], fr_w, arguments[:frame_c], 100) #左 msfr << filling(arguments[:x], arguments[:y], fr_w, arguments[:h], arguments[:frame_c], 100) #右 msfr << filling(arguments[:x] + arguments[:w], arguments[:y], -fr_w, arguments[:h], arguments[:frame_c], 100) #下 msfr << filling(arguments[:x], arguments[:y] + arguments[:h], arguments[:w], -fr_w, arguments[:frame_c], 100) #テキストの設定 各行設定 message_sprites = [] text_y = arguments[:y] + ofst #各行のY位置 while text_y+arguments[:size] < arguments[:y]+arguments[:h]-ofst message_sprite = put_text 'message-text' do position arguments[:x] + ofst, text_y font_size arguments[:size] color arguments[:c] bold arguments[:b] italic arguments[:it] #wordwrap true #wordwrap_width arguments[:w] - ofst*2 camera_fixed! end message_sprites << message_sprite text_y += arguments[:size] + arguments[:h_interval] #次の行の位置を設定 end #レイヤー設定 $system_layer.add msbg_sprite #背景 msbg_sprite.layer_index 0 msfr.each do |item| #枠 $system_layer.add item item.layer_index 2 end message_sprites.each do |item| #テキスト $system_layer.add item item.layer_index 3 end #テキストのアニメーション表示 text_over = false str_arr = StrSplit(m) print_text = '' line = 0 str_arr.each_with_index do |item, i| if item === "\n" line += 1 print_text = '' if line >= message_sprites.size m = str_arr[i+1..-1].join text_over = true break end else print_text += item message_sprites[line].text print_text wait_time(10) end end #▼アイコン表示 iconsize = ofst - fr_w - 2 icon_sprite = msgicon(arguments[:x]+arguments[:w]-ofst+1, arguments[:y]+arguments[:h]-ofst+1, iconsize, iconsize) $system_layer.add icon_sprite icon_sprite.layer_index 1 #離すのを待つ while waitloop if !keyboard.down?('Z') break end wait_time(10) end #Zキー押したら終了 while !keyboard.down?('Z') wait_time(10) end #スプライトの削除 msbg_sprite.destroy icon_sprite.destroy msfr.each do |item| item.destroy end message_sprites.each do |item| item.destroy end if text_over message(m, arguments) end end #========== 文字列 ==========# #文字列分割用 def StrSplit(t) t = t.split('') new_t = [] counter = 0 t.each_with_index do |item, i| if counter > 0 counter -= 1 else if ('a'..'z') === item || ('A'..'Z') === item || ('0'..'9') === item || ('!'..'~') === item || ' ' == item || "\n" == item new_t << item else new_t << t[i..i+2].join counter = 2 end end end return new_t end start_scene 'start'
コード一覧
  • start.rb
投稿者:    mini 光楼(114) 対象Lv1 公開日:2021年01月25日 23:26:42
プレー内容を公開する

違反を通報する

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。

プレー履歴

プレー履歴はありません。

全てのプレー履歴を見る

新着レビュー

レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?

全てのレビュー

フォロー/シェア

ブログ/Wiki/掲示板で共有する

Rmake内(ブログ/Wiki/掲示板)に貼り付ける場合は以下のタグを利用してください。

リンク

プレイヤー

外部ホームページに貼り付ける

外部ホームページに貼り付ける場合は以下のタグを利用してください。