โดยหลักๆการเขียน Scene ขึ้นมาใหม่จะมีส่วนสำคัญๆอยู่ 3 ตัวคือ
1.class -> ชื่อของ Scene ที่ต้องการ
2.main -> เป็นส่วนกำหนดว่าต้องการเรียกใช้ Window อะไรบ้าง
3.update-> เป็นส่วนให้กำหนดว่าเวลาเรากดคีย์ใดๆ แล้วจะเกิดอะไรขึ้น
ตัวอย่างการเขียน Scene ใหม่
Code:
class Scene_ชื่อที่ต้องการ #ชื่อ Scene ที่ต้องการ
def main
# กำหนดช้อยส์คอมมานที่จะให้เลือกว่ามีอะไรบ้าง โดยเพิ่มเลขหลัง s ไปเรื่อยๆ
s0 = "เนื้อหาที่จะโชว์ 1"
s1 = "เนื้อหาที่จะโชว์ 2"
s2 = "เนื้อหาที่จะโชว์ 3"
# 200คือความกว้างWindow ส่วนเลข s0-3 คือตัวหนังสือตามที่เรากำหนด
@command_window = Window_Command.new(200, [s0, s1, s2])
# ตำแหน่งแกน y ของ command_window
@command_window.y = 64 #เลือนกรอบลงมา 64พิคเซคเพื่อเหลือพื้นที่ใ้ห้ช่อง Help
# เรียกใช้หน้าต่าง help
@note_window = Window_Help.new
# เริ่มเรียกใช้ Scene และเรียก window ทั้งหมด
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
#ลบ window ต่างๆเมื่อออกจาก Scene
@command_window.dispose
@note_window.dispose
end #จบ main
#--------------------------------------------------------------------------
def update
# เมื่อตำแหน่ง เคอเซอร์อยู่ที่ when ใดก็ให้โชว์ข้อความนั้นๆที่ window help
case @command_window.index
when 0
@note_window.set_text("แสดงคำอธิบายเนื้อหา 1", 0)
when 1
@note_window.set_text("แสดงคำอธิบายเนื้อหา 2", 0)
when 2
@note_window.set_text("แสดงคำอธิบายเนื้อหา 3", 0)
end
#อัพเดทตำแหน่งเคอเซอร์
@command_window.update
# เมื่อกด X (ยกเลิก)
if Input.trigger?(Input::B)
# เรียกใช้เสียงเวลากด cancel
$game_system.se_play($data_system.cancel_se)
# ไปหน้าจอ
$scene = Scene_Map.new
# จบการเช็คเมื่อกด X
end
# เมื่อกด C (ตกลง)
if Input.trigger?(Input::C)
# เรียกใช้เสียงเวลากด ตกลง
$game_system.se_play($data_system.decision_se)
# เมื่อตำแหน่ง เคอเซอร์อยู่ที่ when ใดเวลากด C ก็ให้เกิดเหตุการณ์นั้นๆ
case @command_window.index
when 0
เหตุการณ์ 1
when 1
เหตุการณ์ 2
when 2
เหตุการณ์ 3
end
# ตรงนี้อาจมีการเรียกใช้ Scene นี้อีกครั้งเพื่ออัพเดทข้อมูลหลังจากกด C
$scene = Scene_ชื่อที่ต้องการ.new
end
end
end
loop ที่อยู่ด้านล่าง Graphics.transition เอาไว้สำหรับตรวจเช็คว่าหน้าเมนูนั้น ๆ ถูกโหลดขึ้นมาหรือยังน่ะครับ (ถ้าจำไม่ผิดนะ) ถ้ายังโหลดไม่ขึ้นก็จะลูปไปเรื่อย ๆ จนกว่าจะโหลดขึ้น ถึงออกจากลูป
การเรียกใช้ window ใดๆใน Scene นี้ จะไม่ยุ่งเกี่ยวกับ window เดียวกันในหน้าต่างอื่น
จึงสามารถกำหนด เพิ่ม/ลด window หรือตำแหน่งของ window ใน Scene นี้ได้เลย เช่น
Show ContentSpoiler:
กำหนดความโปร่งใส
Code:
ชื่อวินโดว์.opacity = 0 ถึง 255
ตำแหน่งแกน x
Code:
ชื่อวินโดว์.x = 0 ถึง 640
ตำแหน่งแกน y
Code:
ชื่อวินโดว์.y = 0 ถึง 480
ตำแหน่งแกน Z
Code:
ชื่อวินโดว์.z = เท่าไรก็ได้ แต่ยิ่งมากจะยิ่งงบังหน้าต่างอื่น
กว้างของวินโดว์
Code:
@status_window.width = 0 ถึง 640
ความสูงของวินโดว์
Code:
@status_window.height = 0 ถึง 480
โดยหลักๆคือใส่ต่อหลังจากเรียก window เรียบร้อยแล้ว
เช่นถ้าต้องการปรับความสูงของ Window_Help เป็น 64 ก็จะใส่ว่า
Code:
@note_window = Window_Help.new
@note_window.height = 64
การทำพื้นหลัง Scene แบบโปร่งใส่ (เห็นแม็บ)
Show ContentSpoiler:
ให้ก็อบ
Code:
@map = Spriteset_Map.new
ใส่ใต้
และ ก็อบ
ใส่ใต้
ก่อนถึง end
การใส่พื้นหลังให้ Scene
Show ContentSpoiler:
ให้ก็อบ
Code:
@ชื่อพื้นหลัง = Sprite.new
@ชื่อพื้นหลัง.bitmap = RPG::Cache.picture("ชื่อรูปในโฟลเดอร์ Pictures")
ใส่ใต้
ห้ามใส่ใต้วินโดว์อื่น เพราะรูปจะบังหน้าต่างนั้นได้ (โค๊ตจะอ่านไล่จากบนลงล่าง)
และ ก็อบ
Code:
@ชื่อพื้นหลัง.dispose
ใส่ใต้
ก่อนถึง end
การเรียกใช้ Scene
Show ContentSpoiler:
ใช้คำสั่งเรียกใช้สคริปแล้วเรียกว่า
Code:
$scene = Scene_ชื่อที่ต้องการ.new
ตย.การ เรียกใช้ Scene
ต.ย.เมนูเปลี่ยนฟอนท์ระหว่างเล่น
http://www.mediafire.com/?mxmn0xygixj
เครดิต : Shinryu
การทำพื้นหลังเลื่อนไว้บทในบทการอัพเดทวินโดว์ละกัน