Thread Rating:
  • 2 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RGSS1 การเขียน Script อย่างง่ายๆ บทที่ 3 การเขียน Scene เมนูต่างๆ
#1
[Image: ss-sc-1.png]

โดยหลักๆการเขียน 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:
การทำพื้นหลัง Scene แบบโปร่งใส่ (เห็นแม็บ)
Show ContentSpoiler:
การใส่พื้นหลังให้ Scene
Show ContentSpoiler:
การเรียกใช้ Scene
Show ContentSpoiler:

ตย.การ เรียกใช้ Scene
ต.ย.เมนูเปลี่ยนฟอนท์ระหว่างเล่น
[Image: ss-sc-1.png][Image: ss-sc-2.png][Image: ss-sc-3.png]
http://www.mediafire.com/?mxmn0xygixj

เครดิต : Shinryu


การทำพื้นหลังเลื่อนไว้บทในบทการอัพเดทวินโดว์ละกัน
[Image: 7f7cb68ce0.png][Image: rlogo.png]
Show ContentSpoiler:
[-] The following 4 users say Thank You to Shinryu for this post:
  • ACSII, Jirayu, LuZi, Muge9thD
Reply
#2
การใส่พื้นหลังให้ Scene นี่คือ การใส่ภาพลงไปสินะฮะ?

แบบนี่ถ้าเราทำภาพแบบเหมือนกรอบเมนูแล้วโชว์เป็นพื้นหลัง แล้วปรับOpacity ของวินโดวสกินให้เหลือ 0 หรือไม่มีวินโดวสกิน
ก็จะได้เมนูแบบพื้นหลังเป็นภาพได้ใช่มั้ยฮะ? ส่วนตัวอยากได้วิธีทำของRGSS3 ในVX Ace ด้วย TwT


Reply
#3
เยี่ยมยอด!! นี่คือความรู้ที่หลายๆคนต้องการ!!!

* Muge9thD ลืมวิธีทำให้เมนูเห็นแม็บ ทำหน้าเหยาหมิง ขอบคุณมากๆเลยนะท่าน m(_ _)m
[-] The following 1 user says Thank You to Muge9thD for this post:
  • TheMoo2000
Reply
#4
@LuZi + @Muge9thD

ส่วนนี้น้อ การทำพื้นหลัง Scene แบบโปร่งใส่ (เห็นแม็บ)

ถ้าแค่ปรับ Opacity เป็น 0 มันจะเป็นแค่หน้าจอดำๆ ดูในตัวอย่างก็ได้
[Image: 7f7cb68ce0.png][Image: rlogo.png]
Show ContentSpoiler:
[-] The following 1 user says Thank You to Shinryu for this post:
  • TheMoo2000
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)