CoRサンプル集: 【CoR】メッセージウィンドウ
CoRで使えるメッセージウィンドウを紹介!
CoRサンプル集からこのゲームページを開くとソースファイルが見れます。
2021/02/04 進化しました!
CoRサンプル集からこのゲームページを開くとソースファイルが見れます。
2021/02/04 進化しました!
プレー:27
(人数:18)
クリア:13
評価: 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
プレー内容を公開する
プレー履歴
プレー履歴はありません。
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア