irpg Community

Full Version: Auto-Scrolling FPS System V.1
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
ตามคำเรียกร้องที่มีตติ้งครั้งที่ 4

Auto-Scrolling FPS System

Download V.1
https://www.mediafire.com/?9xybu05ld6jiodw

ระบบนี้คือเกมแนว FPS หรือ First Person Shooting
ที่เราไม่สามารถบังคับตัวละครได้อย่างอิสระ
นอกจากขยับเพื่อเล็งปืนเท่านั้น
ส่วนการเดินและเลื่อนฉาก เกมจะเป็นตัวทำให้ทั้งหมด
เมื่อถึงจุดๆหนึ่งที่เกมกำหนด ก็จะหยุด และเริ่มมีศัตรูออกมา

ในระบบเบื้องต้นที่แจกนี้
จะยังไม่สามารถให้ศัตรูออกมากลางทางได้


ตัวอย่าง





ระบบนี้ทำงานอย่างไร
ระบบนี้จะแบ่งเป็นสองส่วนใหญ่ๆ คือส่วนของ
3D และส่วนระบบยิงศัตรู

3D-Auto Walking System
หรือก็คือช่วงแรกของเกม ที่ตัวเราเดินไปเรื่อยๆ

จริงๆเราไม่ได้เดินไปไหนครับ
ภาพที่เห็นเป็นแค่การแสดงภาพต่อเนื่อง
โดยการสร้างฉากและทำเป็ Movie ขึ้นมา ด้วยโปรแกรมทำ 3D อะไรก็ได้
ในตัวอย่างนี้ใช้ FPS Creator
ทำยังไงก็ได้ ให้ได้ออกมาเป็นรูปต่อเนื่อง และเฟรมเรทที่เหมาะสม
(จำนวนรูปต่อวินาที ต้องหาร 20 ลงตัว เช่น 2,4,5 ไม่ควรจะเกินนี้ไม่งั้นเกมจะหนักโดยไม่จำเป็น)

สคริปต์
Code:
=begin
Scene_Image_Movie
By OP_Jum_RPG
ใช้แสดงภาพต่อเนื่องกัน ไม่จำกัดจำนวนภาพ
ชื่อโฟลเดอร์ตั้งอะไรก็ได้ ใส่ใน Graphics
ชื่อไฟล์ตั้งให้เหมือนกันทั้งโฟลเดอร์ ตามด้วยลำดับภาพ ไม่ต้องเว้นวรรค

เวลาเรียกใช้ ก็
$scene = Scene_Movie.new("Folder name","Image Name",delay,maxframe)

ใส่เครื่องหมาย " ด้วย
ตรงชื่อภาพ ไม่ต้องใส่เลขภาพและนามสกุลไฟล์
ถ้าชื่อภาพมีแต่ตัวเลขให้เว้นว่างไว้

=end

class Scene_Movie
  def initialize(folder="",name="",delay=5,frame=0)
    @folder = folder
    @name = name
    @delay = delay
    @frame = frame
  end
  
  def main
    if @name == "" && @folder == ""
      $scene = Scene_Map.new
      return
    end
    @index = 1
    @count = 0
    @img = Sprite.new
    @img.bitmap = Bitmap.new(32,32)
    Graphics.transition
    
    loop do
      Graphics.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @img.dispose
  end
  
  def update
    if @count > 0
      @count -= 1
    else
      @count = @delay
      @img.bitmap.dispose
      @img.bitmap = Bitmap.new("Graphics\\"+@folder+"\\"+ @name+@index.to_s)
      @index += 1
      if @index > @frame
        $scene = Scene_Map.new
      end
    end
  end
end


เช่น ในตัวอย่างนี้
[Image: Test_FPS_1.jpg]
รูปอยู่ในโฟลเดอร์ชื่อ S1_1
และรูปชื่อ fgdhdhd
จำนวนรูป 94 รูป
เฟรมเรท 3 รูปต่อวินาที
หรือ Delay 7 เฟรม ต่อรูป

จึงเรียกใช้สคริปต์เป็น
Code:
$scene=Scene_Movie.new("S1_1","fgdhdhd",7,94)

สำคัญ มันเป็นบั๊ค
หลังจบคำสั่งนี้ ให้ใส่คำสั่งรอเวลา 1 เฟรมไว้ก่อนคำสั่งต่อไปด้วย

-----------------------------------------------------
จากนั้นให้เทเลพอร์ทไปแผนที่ใหม่เลยจะดีที่สุด
และจะเข้าสู่ช่วงที่เรายิงกับศัตรู

Common Event#1 [Shot]
- เช็คกดปุ่มยิง ด้วย
Code:
Input.trigger?(Input::C)
เพื่อป้องกันการกดแช่
- เช็คว่าเรามีกระสุนเหลือไหม
- ถ้ามี แสดงอนิเมชั่นยิงที่ตัวผู้เล่น (คุณวงกลมๆสีแดงนั่นแหละ) และกระสุน -1

Common Event#2 [Reload]
- เช็คกดปุ่ม Reload
- จำนวนกระสุน = Max

Event ที่ขอบด้านล่างและทางขวา เป็นแค่ Interface ขอไม่อธิบายนะครับ

Event#1
เปลี่ยนพาโนราม่าเป็นรูปสุดท้ายของ 3D เมื่อกี๊

Event#2
สั่งให้ศัตรูออกมา

Event#3
รอเวลา แล้วใส่เอฟเฟ็คต์ผู้เล่นโดนยิง

Event Enemy
เช็ค"กดคีย์" ลด HP ศัตรูตัวนั้น

ถ้าอยากให้ศัตรูออกมากลางทาง หรือเล่นต่อเนื่องโดยไม่ต้องเปลี่ยนแผนที่ (กำลังพัฒนา)
สิ่งที่ต้องทำ
1. เปลี่ยนจากโชว์รูป ไปเป็นพาโนราม่าแทน ไม่งั้นมันจะบังหมด
2. คำสั่งควบคุมศัตรู และการยิง ต้องทำงานตลอดเวลา
และศัตรูต้องหายไปเมื่อถึงเวลาที่กำหนด
3. ศัตรูต้องเลื่อนไปตามฉาก ซึ่งความจริงฉากมันอยู่ของมันเฉยๆ จะยากตรงนี้แหละ
4. ที่เหลือก็อยู่ที่การนับเฟรมแล้วล่ะ
เหมือนเกมส์ the house of the dead เลย
เดินเองและก็หยุดให้ยิง
โอ้วแหล่มมาก แต่เปลืองภาพไปนิด ถ้าทำเป็นเกมเล็กๆไม่ใหญ่มากก็โอคับ แมวเบิกบาน
เมพขริงๆ RMXP ทำได้ทุกอย่างจริงๆครับ Oh My God