Thaigraph

 

   

ค้นหา
Thaigraph หน้าฟอรั่ม Ren'Py [renpy] วิธีทำแสงแดดในเกมส์ แล ...
ดู: 2370|ตอบ: 5
go

[renpy] วิธีทำแสงแดดในเกมส์ และที่หน้า Main Menu

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 29-5-2013 02:08 |แสดงโพสต์ทั้งหมด
[renpy] วิธีทำแสงแดดในเกมส์ และที่หน้า Main Menu

แสงแดดที่ว่านี้ก็คือการสร้างภาพแสงแดดแต่ละภาพขึ้นมา ประมาณ 3-4 ภาพให้มีความแตกต่างกัน แล้วก็สั่งให้ภาพนั้นแสดงเป็นเข้ม - จาง เล่นวนสลับกันไปเรื่อยๆ นะค่ะ โดยมีการกำหนดระยะที่จะแสดง และซ่อนภาพไว้ด้วยค่ะ

ขั้นตอนที่ 1 (มีภาพสำเร็จให้ด้านล่างบทความ)
- แต่ก่อนที่จะมาลุยตัวโค๊ด เรามาดูวิธีการทำภาพแสงแดดกันก่อนดีกว่า โปรแกรมที่ทำแสงแดดนั้น เราสามารถทำได้ทั้งในโปรแกรม AI และ PS นะค่ะ เครื่องมือหลักที่ใช้ก็มีแค่ Gradient Tool ตัวเดียว

- สีหลักที่ใช้ทำแสงแดดก็คือ "สีขาว" หรือบางคนอาจจะให้มีสีฟ้าจางๆ หรือสีส้มจางๆ ผสมบ้างก็ได้ แต่ก่อนที่จะเริ่มไล่เฉดสีแสงแดด ขอแนะนำให้กำหนดเลเยอร์ล่างสุดเป็นพื้นสีดำค่ะ เพื่อที่เราจะได้มองเห็นทิศทางของแสงแดด ได้ง่ายขึ้น (เวลาจะเซฟเป็นสกุล . png ค่อย ปิดตาเลเยอร์พื้นสีดำ )



- เพื่อให้การไล่เฉดออกมาดูเหมือนแสงแดดของจริงมากที่สุด เราไม่ควรกำหนดให้ความเข้มของสีขาวมีค่าเป็น 100% เพราะเวลาที่แสดงภาพ มันจะพาดทับภาพฉากและภาพตัวละครเป็นสีขาวทึบ ไม่โปรงใสเหมือนแสงแดดของจริง  เพราะฉะนั้นส่วนที่เข้มที่สุดในแสง เราควรกำหนดค่าความเข้ม (Opacity) ไว้ที่ประมาณ 30% แค่นั้นพอ



- และเพื่อให้ขอบของลำแสงดูซอฟจางหายไปกับภาพพื้นหลัง เราควรกำหนดค่าความเข้ม(Opacity)ตรงบริเวณที่จางมากที่สุดให้เป็น 0% ค่ะ



- ให้สร้างแสงแดด แบ่งออกมาเป็นแต่ละเลเยอร์ ใน 1 เลเยอร์อาจมีลำแสงสัก 2-3 เส้น วางไว้ในตำแหน่งที่ไม่ซ้ำที่กัน (เลเยอร์ดวงอาทิตย์ ("sun") ไว้เลเยอร์บนสุด) แล้วก็ให้ปิดตาเลเยอร์พื้นที่เป็นสีดำไปซะ จากนั้นทยอยเซฟภาพทีละเลเยอร์ เท่านี้ก็เรียบร้อยแล้วค่ะสำหรับการทำภพแสดงแดด ^^



ขั้นตอนที่ 2

-  ให้นำโค๊ดด้านล่างนี้มาประยุกต์ใช้ค่ะ เราสามารถกำหนดระยะเวลาในการแสดงภาพ และระยเวลาในภาพซ่อนภาพได้ที่ ตัวเลขหลังคำสั่ง "linear" (หน่วยเวลาเป็น 1.0 วินาที)

- คำสั่ง "alpha" คือคำสั่งสำหรับให้กำหนดความเข้ม-จางในการแสดงภาพ โดยกำหนดได้ตั้งแต่ 0.0 - 1.0 ค่ะ ถ้ากำหนดเป็น 0.0 หมายถึงภาพจะหายไปทั้งหมด (ความเข้มภาพ = 0% )และถ้ากำหนดเป็น 1.0 จะหมายถึงให้แสดงภาพเต็มที่ (ความเข้มภาพ = 100%)

- คำสั่ง "repeat" คือคำสั่งสำหรับให้เล่นวนซ้ำไปเรื่อยๆ

  1. transform light1:
  2.     alpha 0.0
  3.     linear 3.0 alpha 1.0
  4.     linear 7.0 alpha 0.0
  5.     repeat
คัดลอกไปที่คลิปบอร์ด

ตัวอย่างการนำโค๊ดมาใช้ ในไฟล์ "script.rpy" :--- สร้างโค๊ดสำหรับกำหนดการแสดงลำแสงออกเป็น 3 แบบด้วยกัน ตามจำนวนภาพแสงแดดที่เราสร้างไว้
  1. #-----------------------------[ Character ]--------------------------------
  2. init:
  3.     $ v = Character("วิชชา", color="#00ff2a")
  4.    
  5. #-----------------------[ Image Light Sun ]--------------------------------

  6.     image sun = "cha/sun.png"
  7.     image light_1 = "cha/light_01.png"
  8.     image light_2 = "cha/light_02.png"
  9.     image light_3 = "cha/light_03.png"
  10.    
  11. #--------------------------[Image  Character ]------------------------------
  12.     image viccha_02 = "cha/viccha_02.png"
  13.    
  14. #--------------------------[ Time Light Sun]------------------------------
  15.     transform light1:
  16.         alpha 0.0
  17.         linear 3.0 alpha 1.0
  18.         linear 7.0 alpha 0.0
  19.         repeat
  20.             
  21.     transform light2:
  22.         alpha 1.0
  23.         linear 7.0 alpha 0.0
  24.         linear 3.0 alpha 1.0
  25.         repeat
  26.             
  27.     transform light3:
  28.         alpha 0.0
  29.         linear 15.0 alpha 0.0 #<----0.0 คือไม่แสดงภาพ/ 1.0 คือให้แสดงภาพ
  30.         linear 15.0 alpha 1.0 #<----- linear ใช้กำหนดระยะเวลาแสดงภาพและซ่อนภาพต่อวินาที)
  31.         repeat
  32. #---------------------------------[ Intro Start ]-----------------------------------------
  33. label start:
  34.     scene black
  35.     show viccha_02
  36.    
  37.     show sun
  38.     show light_1 at light1
  39.     show light_2 at light2
  40.     show light_3 at light3
  41.    
  42.     v "สวัสดีครับ....^^ "
  43. return
คัดลอกไปที่คลิปบอร์ด

(ตัวอย่าง.......... )


- บันทึกไฟล์และลองรันโปรแกรมดูผลลัพธ์ .....แสงแดดจะเล่นวนสลับกันไปเรื่อยๆ ถ้าเห็นว่ามัน วิว-วับๆๆ เร็วเกินไปก็ปรับเวลาใหม่ให้ช้าลงกว่านี้ก็ได้


-------------------------------------------------------------------


วิธีใส่ภาพแสดงแดดไว้ที่หน้า Main Menu
แล้วในกรณีที่เราอยากให้ภาพแสงแดดนี้มาแสดงที่หน้า Main Menu ด้วย ก็ทำได้ไม่ยากค่ะ แค่ใช้คำสั่ง "add" เพิ่มเข้าไปที่หน้าโค๊ดของ Main Menu เหมือนกับที่เคยอธิบายไว้ที่บทความตามลิงค์ข้างบน

ตัวอย่าง....โค๊ด
  1.     add "sun"
  2.     add "light_1" at light1
  3.     add "light_2" at light2
  4.     add "light_3" at light3
คัดลอกไปที่คลิปบอร์ด


(ตัวอย่าง...... วิธีแทรกโค๊ดคำสั่ง "add" เพิ่มภาพแสงแดดไว้ที่หน้า Main Menu)


- บันทึกไฟล์และลองรันโปรแกรมดูค่ะ .........  จะเห็นว่ามีแสงแดดมาแสดงที่หน้า Main Menu ด้วย




****ดูอีกบทความสำหรับเพิ่มลูกเล่นอนิเมชั่นให้กับภาพหน้า Main Menu ได้ที่นี้ค่ะ  
[renpy] วิธีใส่ Effect ดอกไม้ร่วง ที่หน้า Main Menu

บทความโดย NOOKFUFU2
(ขอสงวนสิทธิ์ให้เเผยแพร่เฉพาะในเว็บไทยกราฟเท่านั้น!!!)


*** ด้านล่างนี้เป็นภาพแสงแดด สำหรับใครที่ยังไม่ได้ทำไว้นะค่ะ (กดโหลดไปได้เลย) ที่เห็นเป็นสีขาวโล่งๆ เพราะแสงมันเป็นสีขาวจางๆ เลยดูกลืนไปกับสีพื้นหลังเว็บบอร์ด


ไฟล์แนบ: คุณจำเป็นต้องเข้าสู่ระบบก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีแอคเคานต์หรือยังไม่ได้เป็นสมาชิก กรุณาสมัครสมาชิก
บางบทความคุณจำเป็นต้องสมัครสมาชิกแบบ VIP และ SUPERVIP ถึงจะเข้าอ่านบทความได้

Rank: 1

โพสต์เมื่อ 30-5-2013 15:16 |แสดงโพสต์ทั้งหมด
ขอบคุณคุณ nook มากครับผม

จากบทความด้านบน ผมมีคำถามเพิ่มเติมนิดนึงครับ

อยากทราบ วิธีการใส่คำสั่งยังไงให้ effect แสง แสดงอยู่หน้าสุดของเลเยอร์ตลอดครับ
(ให้แสงทับตัวละครตลอดไม่ว่าจะใส่คำสั่งให้ตัวละครออกมาอีกกี่ตัวก็ตาม)

เพราะจากscript ด้านบน ที่ ตัวละคร โผล่มาก่อน effect นี้ตามโค้ด
   
    show cha01   

ซึ่งค่อยตามด้วย
   
    show sun
    show light_1 at light1
    show light_2 at light2
    show light_3 at light3)


ก็จะส่งผลให้effect แสงซึ่งใส่codeทีหลัง (อยู่บรรทัดล่างกว่าshowตัวละคร)

แสดงออกมาเป็นlayer หน้าสุด  (แสงทับตัวละคร)

ทีนี้ปัญหาคือ

แต่เมื่อหลังจากนั้น หากมีตัวละครตัวที่2 รึ 3โผล่ออกมา (show cha02   show cha03)

ตัวละครที่ออกมาจากการเขียนโค้นด้านใต้script  effect แสง ก็จะพบว่า ตัวละคร02 03  ได้มาอยู่เลเยอร์หน้าสุดแทน
กลายเป็นว่าตัวละคร ทับ effect แสงไป  


อยากทราบว่าปัญหานี้มีวิธีแก้ยังไง ที่จะให้ effect แสงอยู่ด้านหน้า"เสมอ"ครับ

Rank: 7Rank: 7Rank: 7

โพสต์เมื่อ 30-5-2013 20:07 |แสดงโพสต์ทั้งหมด
ตอบกระทู้ ruruner ตั้งกระทู้

วิธีที่ง่ายที่สุด ไม่ซับซ้อน คือให้ใช้คำสั่ง "behind" เอาค่ะ คำสั่งตัวนี้เคยทำเป็นบทความสอนให้ไปแล้วค่ะในบทความ [renpy] วิธีทำ Effect ดอกไม้ร่วง มันเป็นคำสั่งย้ายภาพ หรือ เอฟเฟกต์นั้นๆ ให้ไป "แสดงอยู่ที่ด้านหลังภาพที่เราต้องการ"

(***นอกจากนี้คำสั่ง "behind" ยังถูกนำมาใช้ในการจัดลำดับการแสดงภาพผลลัพธ์ที่หน้าจอเกมส์ เช่น ทำให้ภาพตัวละครไปแสดงอยู่ที่ด้านหลังของภาพพุ่มไม้ หรือด้านหลังของภาพรถยนต์ หรือด้านหลังของภาพผู้คนที่เดินพลุกพล่านอยู่กลางถนน เป็นต้น)

ตัวอย่างโค๊ดการใช้คำสั่ง:-

  1. label start:
  2.     scene black
  3.    
  4.     show viccha_02
  5.    
  6.     show sun
  7.     show light_1 at light1
  8.     show light_2 at light2
  9.     show light_3 at light3
  10.    
  11.     v "สวัสดีครับ....^^ "
  12.    
  13.     show viccha_01 at left  behind viccha_02
  14.     v "ไง... ไม่ได้เจอกันตั้งนาน"
  15.    
  16. return
คัดลอกไปที่คลิปบอร์ด
ความหมายของโค๊ดคำสั่ง....


....ผลลัพธ์ที่ได้ ภาพตัวละคร ภาพที่ 2 (ทางซ้าย) ก็จะถูกย้ายให้ไปแสดงอยู่ที่ด้านหลังภาพแรก(ภาพกลาง) และมีผลทำให้ effect ภาพแสงแดด กลายมาเป็นภาพแสดงผลหน้าสุดแทน




....ส่วนภาพตัวละครตัวอื่นๆ ก็ใช้คำสั่ง "behind" ทำแบบเดียวกันค่ะ


ส่วนในกรณีที่มีภาพตัวละครตัวเดียว แต่เปลี่ยนเป็นภาพท่าทางบุคลิกต่างๆบ่อยๆ ก็ให้สร้างภาพพื้นหลังเป็นภาพโปร่งใสโล่งๆ (ไม่ต้องทำอะไรในภาพนั้น) ขึ้นมา 1 ภาพ เซฟเป็นชื่อ blank.png ไว้(หรือชื่ออะไรก็ได้ แต่สกุลต้องเป็น .png ) และให้เขียนโค๊ดสั่งให้แสดงภาพนั้นก่อนภาพแสงแดด

ตัวอย่างการเขียนโค๊ด แบบใช้ภาพ blank :-
  1. label start:
  2.     scene p6
  3.     show blank #<-----ภาพเปล่าๆ โปร่งแสงขนาดเท่าหน้าจอโปรแกรม
  4.         
  5.     show sun
  6.     show light_1 at light1
  7.     show light_2 at light2
  8.     show light_3 at light3
  9.    
  10.     show viccha_02  behind blank
  11.    
  12.     v "สวัสดีครับ....^^ "
  13.    
  14.     hide viccha_02
  15.    
  16.     show viccha_01   behind blank
  17.     v "ไง... ไม่ได้เจอกันตั้งนาน"

  18.     hide viccha_01

  19. return
คัดลอกไปที่คลิปบอร์ด
ผลลัพธ์ที่ได้....

ไฟล์แนบ: คุณจำเป็นต้องเข้าสู่ระบบก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีแอคเคานต์หรือยังไม่ได้เป็นสมาชิก กรุณาสมัครสมาชิก
บางบทความคุณจำเป็นต้องสมัครสมาชิกแบบ VIP และ SUPERVIP ถึงจะเข้าอ่านบทความได้

Rank: 1

โพสต์เมื่อ 3-6-2013 17:38 |แสดงโพสต์ทั้งหมด
ขอบคุณมากครับ เคลียร์ เลย

Rank: 1

โพสต์เมื่อ 5-9-2013 11:16 |แสดงโพสต์ทั้งหมด
ขอบคุณค่ะ

Rank: 1

โพสต์เมื่อ 26-12-2015 05:17 |แสดงโพสต์ทั้งหมด
ขอบคุณครับ เป็นปะโยดมากเลย
คุณต้องเข้าสู่ระบบก่อนจึงจะสามารถตอบกลับ เข้าสู่ระบบ | สมัครสมาชิก


Thaigraph

GMT+7, 16-9-2019 09:57 , Processed in 0.096087 second(s), 20 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc. Thai Language by DiscuzThai! Team.

Top 10 Best Sellers in Clothing for 2017 Top 10 Best Sellers in Clothing Best Sellers in Clothing
Top 10 Best Sellers in Books reviewer 2017 Top 10 Best Sellers in Books Best Sellers in Books