#### <お手軽ウィンドウ表示ver.1.0.0.1> ####
# 自由な形のデフォルトレイアウトな文字列入りウィンドウを表示、
# 削除する関数を実装しています。
# ウィンドウのみの表示、文字列のみの表示、削除の関数も同梱。
# 当たり判定に関してはだいぶアバウトなので
# 別途当たり判定用のスプライトを生成することを推奨します。
## 仕様上の不具合 ##
# ウィンドウに使う正方形画像以下のウィンドウサイズを設定すると表示がおかしくなる。
# 適度なウィンドウサイズと画像で利用すること。
# 文字列表示を行う際に指定サイズ以上の幅を持つ文字列は自動的に右端で折り返される。
# ただし下方向に文字列がはみ出た場合表示されない。
# こちらも適度な表示スペース、文字サイズで利用すること。
game.loading do |loader|
loader.add :window, :system => "window"
loader.add :gui_item, :system => "gui_item"
loader.add :WindowTemp, 193
loader.add :Title, 233
# loader.add :TheArrow, 195
end
game.on_init do
set_window_image :window
set_gui_image :gui_item
scene_change :start_scene
end
scene :start_scene do |scene|
scene.loading do
end
# ここにゲームの処理内容を記述します。
scene.on_init do
scene.add :image, :template => :BackG, :position => [0, 0], :color => [100, 100, 255, 100]
# ウィンドウのみ描画
# SWin( [追加するシーン], [表示左上位置X], [表示左上位置Y], [表示サイズX], [表示サイズY] )
ArrWin = SWin(scene, 600, 50, 100, 100)
# 文字のみ描画、表示サイズ以上の文字列を入れると入りきらないので注意
# SWor( [追加するシーン], [表示文字列], [表示文字サイズ], [表示左上位置X], [表示左上位置Y], [表示サイズX], [表示サイズY] )
ArrWor = SWor(scene, "テストああああああああああああああああ", 32, 600, 200, 100, 100)
speak("Hello CoR World!!")
# ウィンドウや文字の削除
# DW3P( [描画関数の返り値を代入した変数] )
DW3P(ArrWin)
DW3P(ArrWor)
# 簡単ウィンドウ表示、speak関数で呼び出される
# WPri( [追加するシーン], [表示文字列], [表示左上位置X], [表示左上位置Y], [表示サイズX], [表示サイズY] )
ArrWP = WPri(scene, "テスト", 100, 100, 300, 100)
speak("テスト表示です")
# 簡単ウィンドウ削除
DW3P(ArrWP)
speak("表示テストを終わります")
game.change_project "start_menu"
end
end
# 画面の幅を取得
def screen_width
game.get_screen_size[0]
end
# 画面の高さを取得
def screen_height
game.get_screen_size[1]
end
sprite_template :BackG do |st|
st.texture :BackG
st.src_size 1, 1
st.dest_size screen_width, screen_height
end
sprite_template :Title do |st|
st.texture :Title
end
## コピペここから
#### 簡単ウィンドウ表示関数 ####
## 大域変数 ##
# ここから変更可能部分
# ウィンドウに使う正方形画像(変更可)
# □□□ このような形に上下3分割できる画像を使用すること
# □□□ 関数側で計9パーツに分割し、表示を行う。
# □□□ 斜め方向四方は拡大率そのまま、中心と四方は高さや幅で伸びるので注意
SWinWDI = :WindowTemp
# 文字送りの▼マーク画像(変更可)
ArrowWDI = :gui_item
# ArrowWDI = 195
# ウィンドウに使う画像の縦横サイズ(ウィンドウ画像変更時に各自調整すること)
SWinFL_Size = 30
# ウィンドウの分割表示用変数(変更不要、変更時不具合発生の原因になる可能性あり)
SWinCutSize = SWinFL_Size / 3
# 文字送り用▼画像のスプライトテンプレート(変更可、▼画像差し替えたいときにどーぞ)
sprite_template :T_Arrow do |st|
st.texture ArrowWDI
#st.texture :window
# デフォルト画像表示用の矩形設定、消せば使用されている本来の画像が表示される
st.src_size 32, 32
st.dest_size 16, 16
st.copy_rect 0, 1
end
# ここまで変更可能部分
## SimpleWindow ##
def SWin(myScene, x_Pos, y_Pos, x_Size, y_Size)
NW = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos, y_Pos]
NE = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + x_Size - SWinCutSize, y_Pos]
SW = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos, y_Pos + y_Size - SWinCutSize]
SE = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + x_Size - SWinCutSize, y_Pos + y_Size - SWinCutSize]
N2 = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + SWinCutSize, y_Pos]
W2 = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos, y_Pos + SWinCutSize]
S2 = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + SWinCutSize, y_Pos + y_Size - SWinCutSize]
E2 = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + x_Size - SWinCutSize, y_Pos + SWinCutSize]
CNT = myScene.add :image, :template => :MyWinTemp, :position => [x_Pos + SWinCutSize, y_Pos + SWinCutSize]
NW.change_animation :TypeNW
NE.change_animation :TypeNE
SW.change_animation :TypeSW
SE.change_animation :TypeSE
N2.change_animation :TypeN2
W2.change_animation :TypeW2
S2.change_animation :TypeS2
E2.change_animation :TypeE2
CNT.change_animation :TypeCNT
N2.set_dest_size x_Size - SWinCutSize * 2, SWinCutSize
W2.set_dest_size SWinCutSize, y_Size - SWinCutSize * 2
S2.set_dest_size x_Size - SWinCutSize * 2, SWinCutSize
E2.set_dest_size SWinCutSize, y_Size - SWinCutSize * 2
CNT.set_dest_size x_Size - SWinCutSize * 2, y_Size - SWinCutSize * 2
ArrWindow = [NW, NE, SW, SE, N2, W2, S2, E2, CNT]
end
## ウィンドウ表示用スプライトテンプレート ##
sprite_template :MyWinTemp do |st|
st.texture SWinWDI
st.src_size SWinCutSize, SWinCutSize
st.dest_size SWinCutSize, SWinCutSize
st.copy_rect 1, 1
st.animation :TypeNW do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [0, 0]
end
st.animation :TypeNE do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [2, 0]
end
st.animation :TypeSW do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [0, 2]
end
st.animation :TypeSE do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [2, 2]
end
st.animation :TypeN2 do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [1, 0]
end
st.animation :TypeW2 do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [0, 1]
end
st.animation :TypeS2 do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [1, 2]
end
st.animation :TypeE2 do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [2, 1]
end
st.animation :TypeCNT do |commands|
commands.loop false
commands.copy_rect :frame => 0, :src => [1, 1]
end
end
## SimpleWord ##
def SWor(myScene, myWord, myFontSize, x_Pos, y_Pos, x_Size, y_Size)
w1 = myScene.text :position => [x_Pos, y_Pos], :text => myWord
w1.set_text_area_size x_Size, y_Size
w1.set_font_point_size myFontSize
ArrWord = [w1]
end
## WindowPrint ##
def WPri(myScene, myWord, x_Pos, y_Pos, x_Size, y_Size)
SetPX = 16
SetPY = 16
A_SetPX = 32
A_SetPY = 32
myFontSize = 32
ArrWin = SWin(myScene, x_Pos, y_Pos, x_Size, y_Size)
ArrWor = SWor(myScene, myWord, myFontSize, x_Pos + SetPX, y_Pos + SetPY,
x_Size - (SetPX * 2), y_Size - (SetPY * 2))
ArrArr = myScene.add :image, :template => :T_Arrow,
:position => [x_Pos + x_Size - A_SetPX, y_Pos + y_Size - A_SetPY]
ArrWor.each do |item|
ArrWin.push(item)
end
ArrWin.push(ArrArr)
return ArrWin
end
## DeleteWindow*Word*WindowPrint(DW3P) ##
def DW3P(arrW)
arrW.each do |item|
item.delete
end
end
#### 簡単ウィンドウ表示関数 ####
## コピペここまで