<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[irpg Community - Ren'Py Engine School]]></title>
		<link>https://irpg.in.th/</link>
		<description><![CDATA[irpg Community - https://irpg.in.th]]></description>
		<pubDate>Thu, 30 Apr 2026 22:36:37 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Ren'Py สอนโชว์คะแนนแบบตัวเลขและหลอด]]></title>
			<link>https://irpg.in.th/thread-3441.html</link>
			<pubDate>Fri, 14 Feb 2020 17:17:03 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=3673">j2547</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3441.html</guid>
			<description><![CDATA[<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
เห็นยังไม่มีใครสอน วันนี้ผมเลยจะมาสอน การโชว์หลอดคะแนน และเลขคะแนน บนหน้าจอ<br />
จริงๆมันก็มีสอนอยู่แล้วครับ ในเกมตัวอย่างของเขา แต่มันไม่ได้ละเอียดมากนัก<br />
ผมไม่มีความรู้เกียวกับการเขียนสคิปเลยแม้แต่นิดเดียว แค่จำๆที่เขาสอนๆมานะครับ<br />
การใช้คำพูดของผมก็เลยอาจบ้านๆไปนิด 555+<br />
<br />
การทำเกมพวก simulator การจำลองใช้ชีวิต<br />
ก็ต้องมีหลอดพลังงานโชว์ให้ดู  มีการลดเมื่อทำกิจกรรม และมีการเติมให้เต็มเวลานอน <br />
<br />
<img src="https://i.imgur.com/dforolM.jpg" loading="lazy"  alt="[Image: dforolM.jpg]" class="mycode_img" /><br />
<br />
1.อย่างแรก หลอด HP (ผมเอามาจากในเกมตัวอย่างที่เขาสอนระบบ rpg )<br />
เอาโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>default player_hp = 50 # จำนวน hp เริ่มต้น<br />
default player_hp_max = 99 # จำนวน hp สูงสุด<br />
<br />
screen single_stat(hp, hp_max, xalign):<br />
    frame:<br />
        background Solid("#000000")<br />
        xalign 0.005 ypos 5              # ตำแน่งที่ว่าง<br />
        vbox:<br />
            spacing 5<br />
            hbox:<br />
                text _("{color=#FF0000}PW{/color}"):  # อักษรตัวหน้า และ ตำแน่งที่ว่าง<br />
                    min_width 40<br />
                    yalign 0.5<br />
                bar:<br />
                    xalign 0.1 ypos 5                    # ตำแหน่งหลอดhp<br />
                    value AnimatedValue(hp, hp_max, 1.0) <br />
                    xmaximum 180<br />
                    ysize 26<br />
                text " [hp]/[hp_max]":         # เลขที่จะแสดงจำนวนhp และ HP สูงสุด<br />
                    yalign 0.5<br />
<br />
screen stats():<br />
    use single_stat(player_hp, player_hp_max, 0.0)</code></div></div><br />
การใช้งาน จะให้เปิดโชว์ตอนไหนก็เอาโค้ดนี้ไปวาง<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>show screen stats  # เปิด<br />
hide screen stats  # ปิด</code></div></div><br />
<br />
2.ไอค่อนตัวเลขตามภาพตัวอย่างก็เหมือนๆกัน ครับ แค่ลบหลอดแสดงหลอดพลังออก<br />
ตัวอย่างตามรูปของผม ไอค่อนอาหาร และ ไอค่อนวันที่ <br />
เอาโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>default player_food = 20  #จำนวนอาหารเริ่มต้น<br />
default player_food_max = 400  #จำนวนอาหารสูงสุด<br />
default player_Day = 1  #จำนวนวันที่เริ่มต้น<br />
<br />
screen single_food(food, food_max, Day, xalign):<br />
    frame:<br />
        background Solid("#99000000")<br />
        xalign 0.005 ypos 55             # ตำแน่งที่ว่าง<br />
        vbox:<br />
            add "logo base"              # ชื่อรูปไอค่อน<br />
            text " {color=#00FF00}[Day]{/color}":  # ตัวเลขที่จะแสดง <br />
                yalign 0.5<br />
  <br />
    frame:<br />
        background Solid("#99000000")<br />
        xalign 0.18 ypos 55<br />
        vbox:<br />
            add "logo base2"<br />
            text " {color=#00FF00}[food]/[food_max]{/color}":<br />
                yalign 0.5<br />
<br />
<br />
screen food():<br />
    use single_food(player_food, player_food_max, player_Day, 0.0)</code></div></div><br />
การใช้งานก็เอาโค้ดนี้ไปวางตำแหน่งการใช้งาน มันก็จะแสดงไอค่อนให้เห็น<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>show screen food # เปิด<br />
hide screen food # ปิด</code></div></div><br />
สำหรับการเพิ่มและลดคะแนนพวกนี้ โดยที่มันจะต้องไม่เกินค่าที่เรากำหนดไว้<br />
ก็ทำง่ายครับใช้สองโค้ดด้านล่างก็พอแล้ว<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># หมายถึงเพิ่มhp 80 แต่รวมแล้วไม่เกิน 99<br />
&#36; player_hp += 80<br />
if  player_hp &gt;= 99:<br />
    &#36; player_hp = 99<br />
<br />
# หมายถึงลดhp 80 แต่รวมแล้วไม่ตำกว่า 0<br />
&#36; player_hp -= 80<br />
if  player_hp &lt;= 0:<br />
    &#36; player_hp = 0</code></div></div><br />
<br />
สำหรับการเช็คเงื่อนไข ตัวเลขพวกนี้นะครับ<br />
เช่น เราต้องการจะไปจีบสาว ใช้พลังงาน 90 หน่วย ก็จะได้ประมาณนี้<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>              if player_hp &lt;= 89: # ถ้าพลังไม่ถึง 89 จะโดนแจ้งเตือนว่าพลังไม่พอ<br />
                   e9 "พลังของคุณไม่เพียงพอ !"<br />
                   jump village<br />
<br />
               else:   # ถ้ามีพลัง 90 ขึ้นไปก็จะเริ่มจีบได้ และมีการลบ hp ออก 90 ด้วย<br />
                   &#36; player_hp -= 90<br />
                    if  player_hp &lt;= 0:<br />
                        &#36; player_hp = 0<br />
                   j "สวัสดี! "</code></div></div><br />
ตัวอย่างเกมการใช้โค้ด ที่ผมลองทำ <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>http://www.mediafire.com/file/nqjxj6qh0gbfxvp/HunterloveZ-1.0-pc.zip/file</code></div></div><br />
<img src="http://i.imgur.com/PjM6nbC.gif" alt="think" title="think" class="smilie smilie_75" />]]></description>
			<content:encoded><![CDATA[<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
เห็นยังไม่มีใครสอน วันนี้ผมเลยจะมาสอน การโชว์หลอดคะแนน และเลขคะแนน บนหน้าจอ<br />
จริงๆมันก็มีสอนอยู่แล้วครับ ในเกมตัวอย่างของเขา แต่มันไม่ได้ละเอียดมากนัก<br />
ผมไม่มีความรู้เกียวกับการเขียนสคิปเลยแม้แต่นิดเดียว แค่จำๆที่เขาสอนๆมานะครับ<br />
การใช้คำพูดของผมก็เลยอาจบ้านๆไปนิด 555+<br />
<br />
การทำเกมพวก simulator การจำลองใช้ชีวิต<br />
ก็ต้องมีหลอดพลังงานโชว์ให้ดู  มีการลดเมื่อทำกิจกรรม และมีการเติมให้เต็มเวลานอน <br />
<br />
<img src="https://i.imgur.com/dforolM.jpg" loading="lazy"  alt="[Image: dforolM.jpg]" class="mycode_img" /><br />
<br />
1.อย่างแรก หลอด HP (ผมเอามาจากในเกมตัวอย่างที่เขาสอนระบบ rpg )<br />
เอาโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>default player_hp = 50 # จำนวน hp เริ่มต้น<br />
default player_hp_max = 99 # จำนวน hp สูงสุด<br />
<br />
screen single_stat(hp, hp_max, xalign):<br />
    frame:<br />
        background Solid("#000000")<br />
        xalign 0.005 ypos 5              # ตำแน่งที่ว่าง<br />
        vbox:<br />
            spacing 5<br />
            hbox:<br />
                text _("{color=#FF0000}PW{/color}"):  # อักษรตัวหน้า และ ตำแน่งที่ว่าง<br />
                    min_width 40<br />
                    yalign 0.5<br />
                bar:<br />
                    xalign 0.1 ypos 5                    # ตำแหน่งหลอดhp<br />
                    value AnimatedValue(hp, hp_max, 1.0) <br />
                    xmaximum 180<br />
                    ysize 26<br />
                text " [hp]/[hp_max]":         # เลขที่จะแสดงจำนวนhp และ HP สูงสุด<br />
                    yalign 0.5<br />
<br />
screen stats():<br />
    use single_stat(player_hp, player_hp_max, 0.0)</code></div></div><br />
การใช้งาน จะให้เปิดโชว์ตอนไหนก็เอาโค้ดนี้ไปวาง<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>show screen stats  # เปิด<br />
hide screen stats  # ปิด</code></div></div><br />
<br />
2.ไอค่อนตัวเลขตามภาพตัวอย่างก็เหมือนๆกัน ครับ แค่ลบหลอดแสดงหลอดพลังออก<br />
ตัวอย่างตามรูปของผม ไอค่อนอาหาร และ ไอค่อนวันที่ <br />
เอาโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>default player_food = 20  #จำนวนอาหารเริ่มต้น<br />
default player_food_max = 400  #จำนวนอาหารสูงสุด<br />
default player_Day = 1  #จำนวนวันที่เริ่มต้น<br />
<br />
screen single_food(food, food_max, Day, xalign):<br />
    frame:<br />
        background Solid("#99000000")<br />
        xalign 0.005 ypos 55             # ตำแน่งที่ว่าง<br />
        vbox:<br />
            add "logo base"              # ชื่อรูปไอค่อน<br />
            text " {color=#00FF00}[Day]{/color}":  # ตัวเลขที่จะแสดง <br />
                yalign 0.5<br />
  <br />
    frame:<br />
        background Solid("#99000000")<br />
        xalign 0.18 ypos 55<br />
        vbox:<br />
            add "logo base2"<br />
            text " {color=#00FF00}[food]/[food_max]{/color}":<br />
                yalign 0.5<br />
<br />
<br />
screen food():<br />
    use single_food(player_food, player_food_max, player_Day, 0.0)</code></div></div><br />
การใช้งานก็เอาโค้ดนี้ไปวางตำแหน่งการใช้งาน มันก็จะแสดงไอค่อนให้เห็น<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>show screen food # เปิด<br />
hide screen food # ปิด</code></div></div><br />
สำหรับการเพิ่มและลดคะแนนพวกนี้ โดยที่มันจะต้องไม่เกินค่าที่เรากำหนดไว้<br />
ก็ทำง่ายครับใช้สองโค้ดด้านล่างก็พอแล้ว<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># หมายถึงเพิ่มhp 80 แต่รวมแล้วไม่เกิน 99<br />
&#36; player_hp += 80<br />
if  player_hp &gt;= 99:<br />
    &#36; player_hp = 99<br />
<br />
# หมายถึงลดhp 80 แต่รวมแล้วไม่ตำกว่า 0<br />
&#36; player_hp -= 80<br />
if  player_hp &lt;= 0:<br />
    &#36; player_hp = 0</code></div></div><br />
<br />
สำหรับการเช็คเงื่อนไข ตัวเลขพวกนี้นะครับ<br />
เช่น เราต้องการจะไปจีบสาว ใช้พลังงาน 90 หน่วย ก็จะได้ประมาณนี้<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>              if player_hp &lt;= 89: # ถ้าพลังไม่ถึง 89 จะโดนแจ้งเตือนว่าพลังไม่พอ<br />
                   e9 "พลังของคุณไม่เพียงพอ !"<br />
                   jump village<br />
<br />
               else:   # ถ้ามีพลัง 90 ขึ้นไปก็จะเริ่มจีบได้ และมีการลบ hp ออก 90 ด้วย<br />
                   &#36; player_hp -= 90<br />
                    if  player_hp &lt;= 0:<br />
                        &#36; player_hp = 0<br />
                   j "สวัสดี! "</code></div></div><br />
ตัวอย่างเกมการใช้โค้ด ที่ผมลองทำ <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>http://www.mediafire.com/file/nqjxj6qh0gbfxvp/HunterloveZ-1.0-pc.zip/file</code></div></div><br />
<img src="http://i.imgur.com/PjM6nbC.gif" alt="think" title="think" class="smilie smilie_75" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py สอนทำ  Imagemap แบบง่ายๆ]]></title>
			<link>https://irpg.in.th/thread-3438.html</link>
			<pubDate>Thu, 06 Feb 2020 11:34:35 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=3673">j2547</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3438.html</guid>
			<description><![CDATA[<img src="http://i.imgur.com/PU0tjwo.gif" alt="What" title="What" class="smilie smilie_49" /> <br />
<br />
จะมาสอนการทำ  Imagemap แบบง่ายๆ<br />
มันมีวิธีทำหลายอย่างนะครับ อันนี้เป็นแค่รูปแบบหนึ่งเท่านั้น อาจไม่ดีที่สุดแต่มันทำง่าย<br />
<br />
หลักการทำงานของมันก็คือ<br />
เราจะให้มันแสดงภาพแผนที่ และก็ให้แสดงไอค่อน สำหรับคลิกกระโดด ไปยังเหตุการณ์ต่างๆ<br />
<br />
1. ก่อนอื่นเราต้องเตรียมรูป ไอค่อน และ พื้นหลังไว้ก่อน<br />
โดยในตัวอย่างผมจะทำ บ้านกับโรงเรียน  ไอค่อนสองสี เวลาเราเอาเมาส์ไปชี้แล้วมันจะเปลียนสี<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://irpg.in.th/images/attachtypes/image.gif" title="JPG Image" style="height: 16px; width: 16px" border="0" alt=".jpg" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=512" target="_blank" title="">SnapCrab_NoName_2020-2-6_11-12-37_No-00.jpg</a> (Size: <span class="text-dark">29.89 KB</span> Downloads: <span class="text-dark">16)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
2. นำโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
    ในตัวอย่างผมจะทำไอค่อนแค่ 2 อัน ท่านสามารถเพิ่มเป็นหลายๆอันได้<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>screen simple_screen():<br />
    frame:<br />
        xalign 0.87 ypos 500 # ที่อยู่พิกัดของไอค่อน<br />
        imagebutton:<br />
            idle "home bw" # ชื่อของรูปอันแรก<br />
            hover "home base"  # ชื่อของรูปอันที่ 2<br />
            action Jump("home") alt "Home" # หัวข้อที่เราต้องการให้กระโดดไป<br />
    frame:<br />
        xalign 0.30 ypos 250<br />
        imagebutton:<br />
            idle "school bw"<br />
            hover "school base"<br />
            action Jump("school") alt "school"</code></div></div><br />
<br />
3. การใช้งาน หลักๆก็ให้มันแสดงภาพพื้นหลัง แสดงไอค่อน และเหตุการณ์ที่เราจะโดดไป<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>   scene v1001 #ให้แสดงภาพพื้นหลัง<br />
    call screen simple_screen #ให้แสดงไอค่อน<br />
<br />
<br />
    # เหตุการณ์ที่เราต้องการให้กระโดดไป.<br />
label home:<br />
    scene bg room<br />
    e "home."<br />
<br />
    return<br />
<br />
<br />
label school:<br />
    scene bg room<br />
    e "school."<br />
<br />
    return</code></div></div><br />
<br />
4. ก็จะได้ประมาณรูป ลองกันดูนะ <br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://irpg.in.th/images/attachtypes/image.gif" title="JPG Image" style="height: 16px; width: 16px" border="0" alt=".jpg" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=513" target="_blank" title="">78995447.jpg</a> (Size: <span class="text-dark">104.55 KB</span> Downloads: <span class="text-dark">47)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
<br />
เพิ่มเติมให้นิดครับ กรณีต้องการเปลียนสีกรอบของไอค่อน ก็ใส่โค้ดนี้ลงไป<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>background Solid("#FF00FF")</code></div></div><br />
<br />
ใส่แล้วจะได้ประมาณนี้<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>   frame:<br />
        background Solid("#FF00FF") # ใส่สีของกรอบไอค่อน<br />
        xalign 0.30 ypos 250<br />
        imagebutton:<br />
            idle "school bw"<br />
            hover "school base"<br />
            action Jump("school") alt "school"</code></div></div>้ถ้าจะให้โปร่งใส่ก็ใส่โคตรตัวนี้ก็ได้ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>background Solid("#99000000")</code></div></div><br />
หรือ ถ้าต้องการคลิกแล้วมีเสียง ก็เอาโค้ดนี้ไปใส่ บรรทัด ต่อจาก action Jump<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>activate_sound "audio/Door_Open.mp3"</code></div></div><br />
เอาเมาส์แตะแล้วมีเสียง ก็ใส่โค้ดนี้<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>hover_sound "audio/Door_Open.mp3"</code></div></div><br />
<br />
 <img src="http://i.imgur.com/Z7AX8c1.gif" alt="Trollface" title="Trollface" class="smilie smilie_50" />]]></description>
			<content:encoded><![CDATA[<img src="http://i.imgur.com/PU0tjwo.gif" alt="What" title="What" class="smilie smilie_49" /> <br />
<br />
จะมาสอนการทำ  Imagemap แบบง่ายๆ<br />
มันมีวิธีทำหลายอย่างนะครับ อันนี้เป็นแค่รูปแบบหนึ่งเท่านั้น อาจไม่ดีที่สุดแต่มันทำง่าย<br />
<br />
หลักการทำงานของมันก็คือ<br />
เราจะให้มันแสดงภาพแผนที่ และก็ให้แสดงไอค่อน สำหรับคลิกกระโดด ไปยังเหตุการณ์ต่างๆ<br />
<br />
1. ก่อนอื่นเราต้องเตรียมรูป ไอค่อน และ พื้นหลังไว้ก่อน<br />
โดยในตัวอย่างผมจะทำ บ้านกับโรงเรียน  ไอค่อนสองสี เวลาเราเอาเมาส์ไปชี้แล้วมันจะเปลียนสี<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://irpg.in.th/images/attachtypes/image.gif" title="JPG Image" style="height: 16px; width: 16px" border="0" alt=".jpg" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=512" target="_blank" title="">SnapCrab_NoName_2020-2-6_11-12-37_No-00.jpg</a> (Size: <span class="text-dark">29.89 KB</span> Downloads: <span class="text-dark">16)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
2. นำโค้ดนี้ไปวางไว้ ด้านบนหน้า script<br />
    ในตัวอย่างผมจะทำไอค่อนแค่ 2 อัน ท่านสามารถเพิ่มเป็นหลายๆอันได้<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>screen simple_screen():<br />
    frame:<br />
        xalign 0.87 ypos 500 # ที่อยู่พิกัดของไอค่อน<br />
        imagebutton:<br />
            idle "home bw" # ชื่อของรูปอันแรก<br />
            hover "home base"  # ชื่อของรูปอันที่ 2<br />
            action Jump("home") alt "Home" # หัวข้อที่เราต้องการให้กระโดดไป<br />
    frame:<br />
        xalign 0.30 ypos 250<br />
        imagebutton:<br />
            idle "school bw"<br />
            hover "school base"<br />
            action Jump("school") alt "school"</code></div></div><br />
<br />
3. การใช้งาน หลักๆก็ให้มันแสดงภาพพื้นหลัง แสดงไอค่อน และเหตุการณ์ที่เราจะโดดไป<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>   scene v1001 #ให้แสดงภาพพื้นหลัง<br />
    call screen simple_screen #ให้แสดงไอค่อน<br />
<br />
<br />
    # เหตุการณ์ที่เราต้องการให้กระโดดไป.<br />
label home:<br />
    scene bg room<br />
    e "home."<br />
<br />
    return<br />
<br />
<br />
label school:<br />
    scene bg room<br />
    e "school."<br />
<br />
    return</code></div></div><br />
<br />
4. ก็จะได้ประมาณรูป ลองกันดูนะ <br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://irpg.in.th/images/attachtypes/image.gif" title="JPG Image" style="height: 16px; width: 16px" border="0" alt=".jpg" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=513" target="_blank" title="">78995447.jpg</a> (Size: <span class="text-dark">104.55 KB</span> Downloads: <span class="text-dark">47)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
<br />
เพิ่มเติมให้นิดครับ กรณีต้องการเปลียนสีกรอบของไอค่อน ก็ใส่โค้ดนี้ลงไป<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>background Solid("#FF00FF")</code></div></div><br />
<br />
ใส่แล้วจะได้ประมาณนี้<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>   frame:<br />
        background Solid("#FF00FF") # ใส่สีของกรอบไอค่อน<br />
        xalign 0.30 ypos 250<br />
        imagebutton:<br />
            idle "school bw"<br />
            hover "school base"<br />
            action Jump("school") alt "school"</code></div></div>้ถ้าจะให้โปร่งใส่ก็ใส่โคตรตัวนี้ก็ได้ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>background Solid("#99000000")</code></div></div><br />
หรือ ถ้าต้องการคลิกแล้วมีเสียง ก็เอาโค้ดนี้ไปใส่ บรรทัด ต่อจาก action Jump<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>activate_sound "audio/Door_Open.mp3"</code></div></div><br />
เอาเมาส์แตะแล้วมีเสียง ก็ใส่โค้ดนี้<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>hover_sound "audio/Door_Open.mp3"</code></div></div><br />
<br />
 <img src="http://i.imgur.com/Z7AX8c1.gif" alt="Trollface" title="Trollface" class="smilie smilie_50" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py สอนการทำเกมหลายภาษา]]></title>
			<link>https://irpg.in.th/thread-3437.html</link>
			<pubDate>Wed, 05 Feb 2020 13:12:17 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=3673">j2547</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3437.html</guid>
			<description><![CDATA[<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
ผมก็พอทำได้ครับ ไม่ได้เก่งมาก พอมีความรู้นิดๆหน่อย<br />
ก็จะมาสอนการทำเกมหลายภาษา โดยมีภาษาไทยเป็นภาษาหลัก<br />
ก่อนอื่นเกมท่านต้องพิมพ์ภาษาไทยได้ก่อนนะครับ<br />
<br />
1.เปิดไฟล์ screens.rpy  ว่างโค้ดลงไปตามรูป  tahoma.ttf คือฟอนต์ที่ผมใช้ <br />
ถ้าท่านใช้ฟอนต์ไหนก็เปลียนชื่อตามนั้น<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#begin language_picker<br />
<br />
                vbox:<br />
                    style_prefix "radio"<br />
                    label _("Language")<br />
<br />
                    textbutton "ไทย" text_font "tahoma.ttf" action Language(None)<br />
                    textbutton "English" text_font "tahoma.ttf" action Language("English")<br />
<br />
<br />
#end language_picker</code></div></div><br />
<img src="https://i.imgur.com/Qth0UoX.jpg" loading="lazy"  alt="[Image: Qth0UoX.jpg]" class="mycode_img" /><br />
<br />
<br />
2. ให้เกมมันสร้างไฟล์ สำหรับการแปลภาษาของเราขึ้นมา ตามรูปด้านล่าง<br />
<br />
<img src="https://i.imgur.com/Qme6J5h.jpg" loading="lazy"  alt="[Image: Qme6J5h.jpg]" class="mycode_img" /><br />
<br />
<img src="https://i.imgur.com/l5PK1kU.jpg" loading="lazy"  alt="[Image: l5PK1kU.jpg]" class="mycode_img" /><br />
<br />
3. สร้างเสร็จแล้วจะอยู่ในโฟเดอร์ game\tl<br />
ถ้าท่านต้องการแก้ไขเมนู ก็เปิดไฟล์ พิมพ์คำแปลได้เลยครับ<br />
<br />
<img src="https://i.imgur.com/DtpWDze.jpg" loading="lazy"  alt="[Image: DtpWDze.jpg]" class="mycode_img" /><br />
<br />
4. สำหรับใครขี้เกียดแปล หรืออยากใช้เมนูภาษาอังกฤษ ก็ลบทิ้งไปเลยครับ<br />
เหลือแค่ script ตามรูป ผมลองแปล 2 ประโยคแล้ว<br />
<br />
<img src="https://i.imgur.com/6L7lPrd.jpg" loading="lazy"  alt="[Image: 6L7lPrd.jpg]" class="mycode_img" /><br />
<br />
5. เข้าเกม ก็จะพบเมนู เลือกภาษาเพิ่มเข้ามา ทดสอบกันดูครับ<br />
<br />
<img src="https://i.imgur.com/TsIAifi.jpg" loading="lazy"  alt="[Image: TsIAifi.jpg]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[<img src="http://i.imgur.com/svJQQqT.gif" alt="Derp" title="Derp" class="smilie smilie_40" /> <br />
ผมก็พอทำได้ครับ ไม่ได้เก่งมาก พอมีความรู้นิดๆหน่อย<br />
ก็จะมาสอนการทำเกมหลายภาษา โดยมีภาษาไทยเป็นภาษาหลัก<br />
ก่อนอื่นเกมท่านต้องพิมพ์ภาษาไทยได้ก่อนนะครับ<br />
<br />
1.เปิดไฟล์ screens.rpy  ว่างโค้ดลงไปตามรูป  tahoma.ttf คือฟอนต์ที่ผมใช้ <br />
ถ้าท่านใช้ฟอนต์ไหนก็เปลียนชื่อตามนั้น<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#begin language_picker<br />
<br />
                vbox:<br />
                    style_prefix "radio"<br />
                    label _("Language")<br />
<br />
                    textbutton "ไทย" text_font "tahoma.ttf" action Language(None)<br />
                    textbutton "English" text_font "tahoma.ttf" action Language("English")<br />
<br />
<br />
#end language_picker</code></div></div><br />
<img src="https://i.imgur.com/Qth0UoX.jpg" loading="lazy"  alt="[Image: Qth0UoX.jpg]" class="mycode_img" /><br />
<br />
<br />
2. ให้เกมมันสร้างไฟล์ สำหรับการแปลภาษาของเราขึ้นมา ตามรูปด้านล่าง<br />
<br />
<img src="https://i.imgur.com/Qme6J5h.jpg" loading="lazy"  alt="[Image: Qme6J5h.jpg]" class="mycode_img" /><br />
<br />
<img src="https://i.imgur.com/l5PK1kU.jpg" loading="lazy"  alt="[Image: l5PK1kU.jpg]" class="mycode_img" /><br />
<br />
3. สร้างเสร็จแล้วจะอยู่ในโฟเดอร์ game\tl<br />
ถ้าท่านต้องการแก้ไขเมนู ก็เปิดไฟล์ พิมพ์คำแปลได้เลยครับ<br />
<br />
<img src="https://i.imgur.com/DtpWDze.jpg" loading="lazy"  alt="[Image: DtpWDze.jpg]" class="mycode_img" /><br />
<br />
4. สำหรับใครขี้เกียดแปล หรืออยากใช้เมนูภาษาอังกฤษ ก็ลบทิ้งไปเลยครับ<br />
เหลือแค่ script ตามรูป ผมลองแปล 2 ประโยคแล้ว<br />
<br />
<img src="https://i.imgur.com/6L7lPrd.jpg" loading="lazy"  alt="[Image: 6L7lPrd.jpg]" class="mycode_img" /><br />
<br />
5. เข้าเกม ก็จะพบเมนู เลือกภาษาเพิ่มเข้ามา ทดสอบกันดูครับ<br />
<br />
<img src="https://i.imgur.com/TsIAifi.jpg" loading="lazy"  alt="[Image: TsIAifi.jpg]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 8 Animation and Transformation Language (ATL)]]></title>
			<link>https://irpg.in.th/thread-3410.html</link>
			<pubDate>Sat, 31 Aug 2019 12:45:48 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3410.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">จากบทที่แล้วเราได้เรียนการแสดงรูปและวิดีโอเบื้องตันแล้ว ในบทนี้จะมาใส่ลูกเล่นให้รูปมากขึ้นกว่าเดิม การใส่ลูกเล่นขั้นสูงต้องใช้ ATL (Animation and Transformation Language) ATL คือส่วนขยายจากคำสั่งอื่น อยู่ภายในบล็อกของคำสั่งอื่น คำสั่งแม่เพียงอย่างเดียวทำได้แค่ใช้งานพื้นฐานเท่านั้น สิ่งที่ขยายมาใน ATL คือลูกเล่น หรืออธิบายใหม่อย่างง่าย ๆ ว่า ATL ก็คือลูกเล่นนั่นเอง<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-MP2hh9yen8c/XWTtEWeV42I/AAAAAAAAAkY/dWXtSNLS-Gw1ZkBF9gZ9goXvlS2dQ5MHQCLcBGAs/s640/03.png" loading="lazy"  alt="[Image: 03.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">คำสั่งแม่ของ ATL</span></span><br />
<br />
ATL เป็นส่วนขยายของคำสั่งอื่น ต้องอยู่ภายในบล็อกของคำสั่งที่ไปขยาย คำสั่งที่ ATL สามารถขยายได้มีดังนี้<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Show และ Scene</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">show</span> และ <span style="font-style: italic;" class="mycode_i">scene</span> คือคำสั่งพื้นฐานสำหรับการแสดงรูป สองคำสั่งนี้จึงรองรับลูกเล่นของรูปโดยตรง ลูกเล่นจะแสดงเมื่อใช้คำสั่งเหล่านี้ ผู้เขียนแนะนำให้ใส่ ATL ทุกอย่างในคำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> เนื่องจากเข้าใจและใช้งานง่าย<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">show</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>show aiya underwear:<br />
     xalign 0.75   # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Image</span></span><br />
<span style="font-style: italic;" class="mycode_i"><br />
image</span> คือคำสั่งสำหรับประกาศตัวแปรรูป เราสามารถใส่ ATL ไปพร้อมกับการประกาศตัวแปรรูปได้ แต่เนื่องจาก <span style="font-style: italic;" class="mycode_i">image</span> เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น ทำให้ลูกเล่น ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">image</span> จึงแซงคิวคำสั่งอื่นตามไปด้วย<br />
<br />
อย่าลืมว่าคำสั่ง <span style="font-style: italic;" class="mycode_i">image</span> เป็นเพียงคำสั่งประกาศตัวแปรรูป ไม่ใช่คำสั่งแสดงรูป ถ้าต้องการแสดงรูปต้องใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> แล้วตามด้วยชื่อตัวแปรรูป<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">image</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>image a_angry:<br />
     "aiya underwear.png"   # บรรทัดนี้คือ ATL<br />
     xalign 0.75   # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Transform</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">transform</span> คือคำสั่งรูปที่เกี่ยวกับตำแหน่งรูป เช่น กำหนดให้รูปอยู่ฝั่งซ้ายของหน้าจอ สามารถใส่ ATL ที่เกี่ยวกับตำแหน่งรูปได้ แต่ผู้เขียนแนะนำให้ใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> แทนดีกว่า เนื่องจากสามารถรองรับลูกเล่นตำแหน่งรูปได้เหมือนกัน อีกทั้งยังใช้ง่ายและหลากหลายกว่าคำสั่ง <span style="font-style: italic;" class="mycode_i">transform</span> ด้วย<br />
<br />
<span style="font-style: italic;" class="mycode_i">tranform</span> เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น เหมาะสำหรับลูกเล่นที่ใช้ครั้งเดียว ถ้าไฟล์สคริปต์มีทั้งคำสั่ง <span style="font-style: italic;" class="mycode_i">image</span> และ <span style="font-style: italic;" class="mycode_i">transform</span> คำสั่ง <span style="font-style: italic;" class="mycode_i">transform</span> จะทำงานก่อน เนื่องจากมีลำดับขั้นที่สูงกว่า<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">transform</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>transform moveright:<br />
     linear 5.0 yalign 1.0     # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Align และ  Pos: กำหนดตำแหน่งรูป</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">คำสั่งชุด Align</span><br />
<span style="font-style: italic;" class="mycode_i">xalign</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวนอน โดย 0.0 คือซ้าย และ 1.0 คือขวา<br />
<span style="font-style: italic;" class="mycode_i">yalign</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวตั้ง โดย 0.0 คือบน และ 1.0 คือล่าง<br />
<br />
<span style="font-weight: bold;" class="mycode_b">คำสั่งชุด Pos</span><br />
<span style="font-style: italic;" class="mycode_i">xpos</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวนอน ระบุเป็นพิกเซล<br />
<span style="font-style: italic;" class="mycode_i">ypos</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวตั้ง ระบุเป็นพิกเซล<br />
<br />
คำสั่งชุด Align และ Pos ใช้สำหรับการแสดงรูปในตำแหน่งที่ระบุไว้ ต้องตามด้วยตัวเลข ความแตกต่างของคำสั่งสองชุดนี้อยู่ที่การเียกตำแหน่งบนหน้าจอ Align จะอ้างอิงจากอัตราส่วนหน้าจอ ค่าควรอยู่ระหว่าง 0.0 ถึง 1.0 ส่วนคำสั่งชุด Pos อ้างอิงจากพิกเซลจริง ในทางปฏิบัติคำสั่งสองชุดนี้ใช้ระบุตำแหน่งได้เหมือนกัน<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-Q8nA2Lq4s7Y/XWTf5EipdVI/AAAAAAAAAjw/lPw-wuhYRPgFyHF3yCBhxhCb0fiD3zy1QCEwYBhgL/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 8.1 เปรียบเทียบคำสั่งชุด Align และ Pos (จอขนาดมาตรฐาน)</div>
<span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการใช้คำสั่งชุด Pos</span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>show star:<br />
     xpos 275 ypos 100   # แสดงรูป star ที่ตำแหน่ง (275, 100)</blockquote>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-9uoNXLb02Nc/XWToecjpI7I/AAAAAAAAAkE/BpiA9QrYvf8COgM5sC__W5e-oN4_SffEwCLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 8.2 การใช้คำสั่งชุด Pos เพื่อแสดงรูปในตำแหน่งที่ต้องการ</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Linear: เคลื่อนที่รูป</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter08.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter08.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">จากบทที่แล้วเราได้เรียนการแสดงรูปและวิดีโอเบื้องตันแล้ว ในบทนี้จะมาใส่ลูกเล่นให้รูปมากขึ้นกว่าเดิม การใส่ลูกเล่นขั้นสูงต้องใช้ ATL (Animation and Transformation Language) ATL คือส่วนขยายจากคำสั่งอื่น อยู่ภายในบล็อกของคำสั่งอื่น คำสั่งแม่เพียงอย่างเดียวทำได้แค่ใช้งานพื้นฐานเท่านั้น สิ่งที่ขยายมาใน ATL คือลูกเล่น หรืออธิบายใหม่อย่างง่าย ๆ ว่า ATL ก็คือลูกเล่นนั่นเอง<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-MP2hh9yen8c/XWTtEWeV42I/AAAAAAAAAkY/dWXtSNLS-Gw1ZkBF9gZ9goXvlS2dQ5MHQCLcBGAs/s640/03.png" loading="lazy"  alt="[Image: 03.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">คำสั่งแม่ของ ATL</span></span><br />
<br />
ATL เป็นส่วนขยายของคำสั่งอื่น ต้องอยู่ภายในบล็อกของคำสั่งที่ไปขยาย คำสั่งที่ ATL สามารถขยายได้มีดังนี้<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Show และ Scene</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">show</span> และ <span style="font-style: italic;" class="mycode_i">scene</span> คือคำสั่งพื้นฐานสำหรับการแสดงรูป สองคำสั่งนี้จึงรองรับลูกเล่นของรูปโดยตรง ลูกเล่นจะแสดงเมื่อใช้คำสั่งเหล่านี้ ผู้เขียนแนะนำให้ใส่ ATL ทุกอย่างในคำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> เนื่องจากเข้าใจและใช้งานง่าย<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">show</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>show aiya underwear:<br />
     xalign 0.75   # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Image</span></span><br />
<span style="font-style: italic;" class="mycode_i"><br />
image</span> คือคำสั่งสำหรับประกาศตัวแปรรูป เราสามารถใส่ ATL ไปพร้อมกับการประกาศตัวแปรรูปได้ แต่เนื่องจาก <span style="font-style: italic;" class="mycode_i">image</span> เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น ทำให้ลูกเล่น ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">image</span> จึงแซงคิวคำสั่งอื่นตามไปด้วย<br />
<br />
อย่าลืมว่าคำสั่ง <span style="font-style: italic;" class="mycode_i">image</span> เป็นเพียงคำสั่งประกาศตัวแปรรูป ไม่ใช่คำสั่งแสดงรูป ถ้าต้องการแสดงรูปต้องใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> แล้วตามด้วยชื่อตัวแปรรูป<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">image</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>image a_angry:<br />
     "aiya underwear.png"   # บรรทัดนี้คือ ATL<br />
     xalign 0.75   # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Transform</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">transform</span> คือคำสั่งรูปที่เกี่ยวกับตำแหน่งรูป เช่น กำหนดให้รูปอยู่ฝั่งซ้ายของหน้าจอ สามารถใส่ ATL ที่เกี่ยวกับตำแหน่งรูปได้ แต่ผู้เขียนแนะนำให้ใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">show</span> หรือ <span style="font-style: italic;" class="mycode_i">scene</span> แทนดีกว่า เนื่องจากสามารถรองรับลูกเล่นตำแหน่งรูปได้เหมือนกัน อีกทั้งยังใช้ง่ายและหลากหลายกว่าคำสั่ง <span style="font-style: italic;" class="mycode_i">transform</span> ด้วย<br />
<br />
<span style="font-style: italic;" class="mycode_i">tranform</span> เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น เหมาะสำหรับลูกเล่นที่ใช้ครั้งเดียว ถ้าไฟล์สคริปต์มีทั้งคำสั่ง <span style="font-style: italic;" class="mycode_i">image</span> และ <span style="font-style: italic;" class="mycode_i">transform</span> คำสั่ง <span style="font-style: italic;" class="mycode_i">transform</span> จะทำงานก่อน เนื่องจากมีลำดับขั้นที่สูงกว่า<br />
<br />
ตัวอย่างการใส่ ATL ในบล็อก <span style="font-style: italic;" class="mycode_i">transform</span></span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>transform moveright:<br />
     linear 5.0 yalign 1.0     # บรรทัดนี้คือ ATL</blockquote>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Align และ  Pos: กำหนดตำแหน่งรูป</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">คำสั่งชุด Align</span><br />
<span style="font-style: italic;" class="mycode_i">xalign</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวนอน โดย 0.0 คือซ้าย และ 1.0 คือขวา<br />
<span style="font-style: italic;" class="mycode_i">yalign</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวตั้ง โดย 0.0 คือบน และ 1.0 คือล่าง<br />
<br />
<span style="font-weight: bold;" class="mycode_b">คำสั่งชุด Pos</span><br />
<span style="font-style: italic;" class="mycode_i">xpos</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวนอน ระบุเป็นพิกเซล<br />
<span style="font-style: italic;" class="mycode_i">ypos</span> คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวตั้ง ระบุเป็นพิกเซล<br />
<br />
คำสั่งชุด Align และ Pos ใช้สำหรับการแสดงรูปในตำแหน่งที่ระบุไว้ ต้องตามด้วยตัวเลข ความแตกต่างของคำสั่งสองชุดนี้อยู่ที่การเียกตำแหน่งบนหน้าจอ Align จะอ้างอิงจากอัตราส่วนหน้าจอ ค่าควรอยู่ระหว่าง 0.0 ถึง 1.0 ส่วนคำสั่งชุด Pos อ้างอิงจากพิกเซลจริง ในทางปฏิบัติคำสั่งสองชุดนี้ใช้ระบุตำแหน่งได้เหมือนกัน<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-Q8nA2Lq4s7Y/XWTf5EipdVI/AAAAAAAAAjw/lPw-wuhYRPgFyHF3yCBhxhCb0fiD3zy1QCEwYBhgL/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 8.1 เปรียบเทียบคำสั่งชุด Align และ Pos (จอขนาดมาตรฐาน)</div>
<span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการใช้คำสั่งชุด Pos</span><br />
<blockquote class="mycode_quote"><cite>Quote:</cite>show star:<br />
     xpos 275 ypos 100   # แสดงรูป star ที่ตำแหน่ง (275, 100)</blockquote>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-9uoNXLb02Nc/XWToecjpI7I/AAAAAAAAAkE/BpiA9QrYvf8COgM5sC__W5e-oN4_SffEwCLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 8.2 การใช้คำสั่งชุด Pos เพื่อแสดงรูปในตำแหน่งที่ต้องการ</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Linear: เคลื่อนที่รูป</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter08.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter08.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 7 รูปภาพและวิดีโอ]]></title>
			<link>https://irpg.in.th/thread-3405.html</link>
			<pubDate>Tue, 20 Aug 2019 23:46:08 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3405.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">โปรแกรม Ren'Py รองรับลูกเล่นกราฟฟิกมากมาย ในบทนี้จะเรียนการใส่รูปภาพและวิดีโอเบื้องต้นได้แก่แนวคิดพื้นฐาน การแสดงรูปและการเปิดวิดีโอ ส่วนลูกเล่นเพิ่มเติมต้องใช้ ATL (Animation and Transformation Language) ซึ่งจะเรียนกันในบทต่อไป<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-gms64hYMa-0/XVluw9kr81I/AAAAAAAAAig/v0lZ0AsDX3E2rzKjT-BSUqzivbOPjy9BACLcBGAs/s640/03.png" loading="lazy"  alt="[Image: 03.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Layer: ชั้นของรูป</span></span><br />
<br />
เลเยอร์ (Layer) คือชั้นที่รวมรูปที่กำลังแสดงอยู่ โปรแกรม Ren'Py มีหลายเลเยอร์เพื่อรองรับการแสดงรูปหลายรูปพร้อมกัน ภายในหนึ่งเลเยอร์สามารถแสดงหลายรูปพร้อมกันได้ เลเยอร์หลักที่ใช้คือเลเยอร์ Master ซึ่งแสดงรูปพื้นหลัง, รูปตัวละคร, และรูปอื่น ๆ ที่นักสร้างเกมใส่มา นอกจากนี้ท่านสามารถสร้างเลเยอร์ใหม่เองได้ แต่จะไม่อธิบายการสร้างเลเยอร์ใหม่ในบทความนี้ เนื่องจากเลเยอร์ Master ก็เพียงพอสำหรับการใช้งานทั่วไปและลูกเล่นต่าง ๆ แล้ว<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-2MFIUZJ8Yf8/XVlpO99cOkI/AAAAAAAAAhs/dYrPwl3gmpkMW8oSC1J7fxjAlZXu-1HDgCPcBGAYYCw/s400/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 7.1 การจัดเรียงเลเยอร์</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Tag and Attribute: แท็กและคุณสมบัติ</span></span><br />
<br />
รูปในโปรแกรม Ren'Py แตกต่างจากเสียงซึ่งสามารถตั้งชื่อไฟล์ได้ตามใจชอบ ชื่อของรูปประกอบด้วย 2 ส่วนได้แก่แท็ก (Tag) และคุณสมบัติ (Attribute) แท็กและคุณสมบัติแบ่งด้วยการเว้นวรรคภายในชื่อไฟล์รูป ส่วนซ้ายสุดคือแท็ก นอกจากนั้นเป็นคุณสมบัติที่ขยายแท็กนั้น (อยู่ทางขวาของแท็ก) จะมีคุณสมบัติเท่าไรก็ได้หรือไม่มีเลยก็ได้<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-zEDQvNM6oaM/XVlsQ77VWzI/AAAAAAAAAiE/sO5k6Yy8r7w6gWwladleeOZiS2sHhoewwCLcBGAs/s400/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 7.2 การแบ่งแท็กและคุณสมบัติจากชื่อไฟล์</div>
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>windy   # แท็กคือ windy ไม่มีคุณสมบัติ<br />
paeng happy   # แท็กคือ paeng มีคุณสมบัติ 1 ตัวคือ happy<br />
miki cheer night   # แท็กคือ miki มีคุณสมบัติ 2 ตัวคือ cheer และ night</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ไฟล์รูปที่โปรแกรม Ren'Py รองรับคือ .jpg และ .png ผู้เขียนแนะนำให้ใช้ .png เพราะสามารถทำให้พื้นหลังของตัวละครโปร่งใสได้ รูปต้องอยู่ในโฟลเดอร์ images โดยรูปสามารถอยู่ในโฟลเดอร์ย่อยในโฟลเดอร์ images อีกทีก็ได้ โปรแกรมจะมองเหมือนอยู่ในโฟลเดอร์ images ชื่อของรูปต้องเป็นตามรูปแบบข้างบนเท่านั้น คือแบ่งเป็นแท็กและคุณสมบัติ ตัวอังกฤษตัวใหญ่จะถูกมองเป็นตัวอังกฤษตัวเล็กเสมอ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># ไฟล์รูปข้างล่างนี้มีแท็กและคุณสมบัติเหมือนกันคือ nan smile<br />
# โปรแกรมจะเข้าใจว่าเป็นรูปเดียวกัน<br />
<br />
images&#92;nan smile.jpg<br />
images&#92;nan smile.png<br />
images&#92;NAN SMILE.png<br />
images&#92;characters&#92;nan smile.png</code></div></div><span style="color: #696969;" class="mycode_color"><br />
สรุปง่าย ๆ ว่าต้องตั้งชื่อรูปตามรูปแบบข้างบนเท่านั้น (แท็กและคุณสมบัติ) เว้นวรรคภายในชื่อเพื่อแบ่งแท็กและคุณสมบัติ ไม่สามารถตั้งชื่อรูปมั่ว ๆ ได้ ชื่อของรูปจะมีผลต่อการแสดงรูป<br />
<br />
การตั้งชื่อตัวละครที่แนะนำคือ ตั้งแท็กเป็นชื่อของตัวละคร ถ้าตัวละครตัวหนึ่งมีอารมณ์หรือใบหน้าหลายแบบ (หลายรูป) ให้ตั้งใบหน้าเหล่านั้นเป็นคุณสมบัติ เช่น emily happy, emily sad, emily tired เพื่อให้ง่ายต่อการใช้งาน (โดยเฉพาะคำสั่ง show) ถ้ามีตัวละครตัวหนึ่งมีใบหน้าเพียงแบบเดียวก็ไม่ต้องใส่คุณสมบัติ เช่น praew<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Image: ประกาศตัวแปรรูป</span></span><br />
<br />
เราสามารถเก็บข้อมูลรูปลงในตัวแปรได้ด้วยคำสั่ง image ข้อมูลที่เก็บส่วนใหญ่คือชื่อไฟล์พร้อมนามสกุล ไม่ต้องใส่ชื่อโฟลเดอร์ที่เก็บรูป (รูปต้องอยู่ในโฟลเดอร์ images) คำสั่ง image เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) คล้ายกับคำสั่ง define ซึ่งจะแซงคิวทุกคำสั่งในเกม รูปแบบของคำสั่ง image คือ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image ชื่อตัวแปรรูป = "ชื่อไฟล์พร้อมนามสกุล"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการใช้คำสั่ง image เช่น<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image ah = "aiya happy.png"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Show: แสดงรูป</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter07.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter07.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">โปรแกรม Ren'Py รองรับลูกเล่นกราฟฟิกมากมาย ในบทนี้จะเรียนการใส่รูปภาพและวิดีโอเบื้องต้นได้แก่แนวคิดพื้นฐาน การแสดงรูปและการเปิดวิดีโอ ส่วนลูกเล่นเพิ่มเติมต้องใช้ ATL (Animation and Transformation Language) ซึ่งจะเรียนกันในบทต่อไป<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-gms64hYMa-0/XVluw9kr81I/AAAAAAAAAig/v0lZ0AsDX3E2rzKjT-BSUqzivbOPjy9BACLcBGAs/s640/03.png" loading="lazy"  alt="[Image: 03.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Layer: ชั้นของรูป</span></span><br />
<br />
เลเยอร์ (Layer) คือชั้นที่รวมรูปที่กำลังแสดงอยู่ โปรแกรม Ren'Py มีหลายเลเยอร์เพื่อรองรับการแสดงรูปหลายรูปพร้อมกัน ภายในหนึ่งเลเยอร์สามารถแสดงหลายรูปพร้อมกันได้ เลเยอร์หลักที่ใช้คือเลเยอร์ Master ซึ่งแสดงรูปพื้นหลัง, รูปตัวละคร, และรูปอื่น ๆ ที่นักสร้างเกมใส่มา นอกจากนี้ท่านสามารถสร้างเลเยอร์ใหม่เองได้ แต่จะไม่อธิบายการสร้างเลเยอร์ใหม่ในบทความนี้ เนื่องจากเลเยอร์ Master ก็เพียงพอสำหรับการใช้งานทั่วไปและลูกเล่นต่าง ๆ แล้ว<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-2MFIUZJ8Yf8/XVlpO99cOkI/AAAAAAAAAhs/dYrPwl3gmpkMW8oSC1J7fxjAlZXu-1HDgCPcBGAYYCw/s400/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 7.1 การจัดเรียงเลเยอร์</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Tag and Attribute: แท็กและคุณสมบัติ</span></span><br />
<br />
รูปในโปรแกรม Ren'Py แตกต่างจากเสียงซึ่งสามารถตั้งชื่อไฟล์ได้ตามใจชอบ ชื่อของรูปประกอบด้วย 2 ส่วนได้แก่แท็ก (Tag) และคุณสมบัติ (Attribute) แท็กและคุณสมบัติแบ่งด้วยการเว้นวรรคภายในชื่อไฟล์รูป ส่วนซ้ายสุดคือแท็ก นอกจากนั้นเป็นคุณสมบัติที่ขยายแท็กนั้น (อยู่ทางขวาของแท็ก) จะมีคุณสมบัติเท่าไรก็ได้หรือไม่มีเลยก็ได้<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-zEDQvNM6oaM/XVlsQ77VWzI/AAAAAAAAAiE/sO5k6Yy8r7w6gWwladleeOZiS2sHhoewwCLcBGAs/s400/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 7.2 การแบ่งแท็กและคุณสมบัติจากชื่อไฟล์</div>
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>windy   # แท็กคือ windy ไม่มีคุณสมบัติ<br />
paeng happy   # แท็กคือ paeng มีคุณสมบัติ 1 ตัวคือ happy<br />
miki cheer night   # แท็กคือ miki มีคุณสมบัติ 2 ตัวคือ cheer และ night</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ไฟล์รูปที่โปรแกรม Ren'Py รองรับคือ .jpg และ .png ผู้เขียนแนะนำให้ใช้ .png เพราะสามารถทำให้พื้นหลังของตัวละครโปร่งใสได้ รูปต้องอยู่ในโฟลเดอร์ images โดยรูปสามารถอยู่ในโฟลเดอร์ย่อยในโฟลเดอร์ images อีกทีก็ได้ โปรแกรมจะมองเหมือนอยู่ในโฟลเดอร์ images ชื่อของรูปต้องเป็นตามรูปแบบข้างบนเท่านั้น คือแบ่งเป็นแท็กและคุณสมบัติ ตัวอังกฤษตัวใหญ่จะถูกมองเป็นตัวอังกฤษตัวเล็กเสมอ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># ไฟล์รูปข้างล่างนี้มีแท็กและคุณสมบัติเหมือนกันคือ nan smile<br />
# โปรแกรมจะเข้าใจว่าเป็นรูปเดียวกัน<br />
<br />
images&#92;nan smile.jpg<br />
images&#92;nan smile.png<br />
images&#92;NAN SMILE.png<br />
images&#92;characters&#92;nan smile.png</code></div></div><span style="color: #696969;" class="mycode_color"><br />
สรุปง่าย ๆ ว่าต้องตั้งชื่อรูปตามรูปแบบข้างบนเท่านั้น (แท็กและคุณสมบัติ) เว้นวรรคภายในชื่อเพื่อแบ่งแท็กและคุณสมบัติ ไม่สามารถตั้งชื่อรูปมั่ว ๆ ได้ ชื่อของรูปจะมีผลต่อการแสดงรูป<br />
<br />
การตั้งชื่อตัวละครที่แนะนำคือ ตั้งแท็กเป็นชื่อของตัวละคร ถ้าตัวละครตัวหนึ่งมีอารมณ์หรือใบหน้าหลายแบบ (หลายรูป) ให้ตั้งใบหน้าเหล่านั้นเป็นคุณสมบัติ เช่น emily happy, emily sad, emily tired เพื่อให้ง่ายต่อการใช้งาน (โดยเฉพาะคำสั่ง show) ถ้ามีตัวละครตัวหนึ่งมีใบหน้าเพียงแบบเดียวก็ไม่ต้องใส่คุณสมบัติ เช่น praew<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Image: ประกาศตัวแปรรูป</span></span><br />
<br />
เราสามารถเก็บข้อมูลรูปลงในตัวแปรได้ด้วยคำสั่ง image ข้อมูลที่เก็บส่วนใหญ่คือชื่อไฟล์พร้อมนามสกุล ไม่ต้องใส่ชื่อโฟลเดอร์ที่เก็บรูป (รูปต้องอยู่ในโฟลเดอร์ images) คำสั่ง image เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) คล้ายกับคำสั่ง define ซึ่งจะแซงคิวทุกคำสั่งในเกม รูปแบบของคำสั่ง image คือ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image ชื่อตัวแปรรูป = "ชื่อไฟล์พร้อมนามสกุล"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการใช้คำสั่ง image เช่น<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image ah = "aiya happy.png"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Show: แสดงรูป</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter07.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter07.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 6 เสียงประกอบเกม]]></title>
			<link>https://irpg.in.th/thread-3401.html</link>
			<pubDate>Wed, 14 Aug 2019 19:04:59 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3401.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color"><a href="https://planila.blogspot.com/search/label/Ren%27Py%20%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%90%E0%B8%B2%E0%B8%99" target="_blank" rel="noopener" class="mycode_url">5 บทก่อนหน้า</a>เราได้เรียนการสร้างเกมแนว Visual Novel ด้วยโปรแกรม Ren'Py ได้เรียนพื้นฐานมาครบถ้วนแล้ว? ใช่ เกมที่สร้างในบทก่อนหน้าก็ดูดีแล้ว แต่รู้สึกว่าขาดอะไรไปบางอย่างหรือเปล่า? เรายังไม่ได้ใส่เสียงในเกมเลย บทนี้จะมาเรียนกันเรื่องการใส่เสียงกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประเภทเสียง</span></span><br />
<br />
ไฟล์เสียงที่โปรแกรม Ren'Py รองรับได้แก่ .opus, .ogg, .mp3, และ .wav ไฟล์เสียงต้องอยู่ในโฟลเดอร์โปรเจ็กต์เกม (ชื่อโปรเจ็กต์\game)<br />
<br />
เสียงในโปรแกรม Ren'Py แบ่งเป็น 3 ประเภทได้แก่ Music, Sound, และ Voice เสียงทั้ง 3 ประเภทแบ่งตามการวนซ้ำและการเริ่มต้นดังตารางข้างล่าง ไม่จำเป็นต้องเป็นเสียงตามประเภทจริง ๆ ก็ได้ เช่น ถ้าต้องการเปิดเพลงครั้งเดียวจบ ไม่วนซ้ำ สามารถเปิดเพลงนั้นด้วยคำสั่งเปิดเสียงเอฟเฟกต์ได้ โปรแกรม Ren'Py สามารถเปิดหลายเสียงพร้อมกันได้ แต่ต้องไม่ใช่เสียงประเภทเดียวกัน (เปิดได้ประเภทละ 1 เสียง รวมเป็นเปิดได้พร้อมกัน 3 เสียง)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ความแตกต่างของประเภทเสียง</span><br />
<br />
<table border="0" cellspacing="1" cellpadding="3" class="tborder" style="width:95%;"><tr><th class="tcat" valign="middle"><strong></span><div style="text-align: center;" class="mycode_align">ประเภทเสียง</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">วนซ้ำ</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">เริ่มต้น</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">ระยะเวลาเปิดสียง</div>
<span style="color: #696969;" class="mycode_color"></strong></th></tr><tr><td class="trow1" valign="top" align="center">Music (เสียงเพลง)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #339933;" class="mycode_color">✔</span></span></td><td class="trow1" valign="top" align="center">เริ่มทันที</td><td class="trow1" valign="top" align="center">ไม่สิ้นสุดจนกว่าจะมีคำสั่งหยุดหรือเปลี่ยนเสียง</td></tr><tr><td class="trow1" valign="top" align="center">Sound (เสียงประกอบ)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #ff3333;" class="mycode_color">✘</span></span></td><td class="trow1" valign="top" align="center">เริ่มทันที</td><td class="trow1" valign="top" align="center">เปิดจนจบครั้งเดียว</td></tr><tr><td class="trow1" valign="top" align="center">Voice (เสียงพูด)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #ff0000;" class="mycode_color">✘</span></span></td><td class="trow1" valign="top" align="center">เริ่มพร้อมกล่องข้อความต่อไป</td><td class="trow1" valign="top" align="center">เปิดจนจบครั้งเดียวหรือเปิดจนกว่าเปลี่ยนกล่องข้อความ (ถ้ายังไม่จบ)</td></tr></table></span><br />
<span style="color: #696969;" class="mycode_color"><br />
นอกจากนี้โปรแกรม Ren'Py ยังมีเสียงประเภทพิเศษคือ Audio จุดเด่นของเสียงประเภทนี้คือสามารถเปิดหลายเสียงพร้อมกันได้ แม้ว่ากำลังเปิดเสียง Audio อื่นอยู่ก็ตาม แต่ Audio ค่อนข้างมีข้อจำกัดมากกว่าเสียง 3 ประเภทข้างต้น เช่น ไม่สามารถต่อคิวเสียงได้ ไม่สามารถหยุดเสียงได้ ถ้าไม่จำเป็นจริง ๆ ผู้เขียนไม่แนะนำให้ใช้เสียง Audio<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Play: เปิดเสียง</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">play</span> คือคำสั่งที่เปิดเสียง ถ้ามีเสียงในประเภทเดียวกันกำลังเปิดอยู่ จะหยุดเสียงเดิมและเปิดเสียงใหม่แทน (ยกเว้นเสียง Audio) รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> คือ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>play ประเภท "ชื่อไฟล์พร้อมนามสกุล"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
นอกจากนี้ยังสามารถเปิดเสียงโดยค่อย ๆ เพิ่มความดังเสียงได้ ท้ายบรรทัด <span style="font-style: italic;" class="mycode_i">play</span> ให้ใส่ส่วนขยาย <span style="font-style: italic;" class="mycode_i">fadein</span> ตามด้วยเวลาที่เพิ่มเสียง หน่วยเป็นวินาที เช่น ต่อท้ายด้วย <span style="font-style: italic;" class="mycode_i">fadein</span> 2.5 หมายถึงค่อย ๆ เพิ่มเสียงเป็นเวลา 2.5 วินาที หลังจากนั้นเปิดเสียงต่อตามปกติ<br />
<br />
ตัวอย่างการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> เช่น<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>play music "theme1.ogg"<br />
play music "theme2.ogg"   # หยุดเสียง Music เดิม (theme1.ogg) และเปิดเสียง theme2.ogg<br />
<br />
play music "theme3.ogg" fadein 2.0   # เปิดเสียง theme3.ogg โดยค่อย ๆ เพิ่มความดังเป็นเวลา 2.0 วินาที<br />
<br />
play sound "open.ogg"<br />
play sound "broken.ogg"   # ถ้าเสียง Sound เดิม (open.ogg) ยังไม่จบ จะหยุดเสียงเดิม<br />
<br />
# เสียง Audio เดิมจะไม่หยุดเมื่อเปิดเสียง Audio ใหม่<br />
play audio "sfx1.mp3"<br />
play audio "sfx2.mp3"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
สำหรับการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> กับเสียง Voice จะเป็นการเปิดเสียงทันที และจะหยุดเสียงเมื่อแสดงหรือเปลี่ยนกล่องข้อความ ซึ่งอาจเปิดและปิดเร็วมากจนฟังไม่ทัน และไม่เหมาะกับการใช้งานเท่าไร การเปิดเสียง Voice ผู้เขียนแนะนำให้ใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">voice</span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Stop: หยุดเสียง</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 49% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter06.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter06.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color"><a href="https://planila.blogspot.com/search/label/Ren%27Py%20%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%90%E0%B8%B2%E0%B8%99" target="_blank" rel="noopener" class="mycode_url">5 บทก่อนหน้า</a>เราได้เรียนการสร้างเกมแนว Visual Novel ด้วยโปรแกรม Ren'Py ได้เรียนพื้นฐานมาครบถ้วนแล้ว? ใช่ เกมที่สร้างในบทก่อนหน้าก็ดูดีแล้ว แต่รู้สึกว่าขาดอะไรไปบางอย่างหรือเปล่า? เรายังไม่ได้ใส่เสียงในเกมเลย บทนี้จะมาเรียนกันเรื่องการใส่เสียงกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประเภทเสียง</span></span><br />
<br />
ไฟล์เสียงที่โปรแกรม Ren'Py รองรับได้แก่ .opus, .ogg, .mp3, และ .wav ไฟล์เสียงต้องอยู่ในโฟลเดอร์โปรเจ็กต์เกม (ชื่อโปรเจ็กต์\game)<br />
<br />
เสียงในโปรแกรม Ren'Py แบ่งเป็น 3 ประเภทได้แก่ Music, Sound, และ Voice เสียงทั้ง 3 ประเภทแบ่งตามการวนซ้ำและการเริ่มต้นดังตารางข้างล่าง ไม่จำเป็นต้องเป็นเสียงตามประเภทจริง ๆ ก็ได้ เช่น ถ้าต้องการเปิดเพลงครั้งเดียวจบ ไม่วนซ้ำ สามารถเปิดเพลงนั้นด้วยคำสั่งเปิดเสียงเอฟเฟกต์ได้ โปรแกรม Ren'Py สามารถเปิดหลายเสียงพร้อมกันได้ แต่ต้องไม่ใช่เสียงประเภทเดียวกัน (เปิดได้ประเภทละ 1 เสียง รวมเป็นเปิดได้พร้อมกัน 3 เสียง)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ความแตกต่างของประเภทเสียง</span><br />
<br />
<table border="0" cellspacing="1" cellpadding="3" class="tborder" style="width:95%;"><tr><th class="tcat" valign="middle"><strong></span><div style="text-align: center;" class="mycode_align">ประเภทเสียง</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">วนซ้ำ</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">เริ่มต้น</div></strong></th><th class="tcat" valign="middle"><strong><div style="text-align: center;" class="mycode_align">ระยะเวลาเปิดสียง</div>
<span style="color: #696969;" class="mycode_color"></strong></th></tr><tr><td class="trow1" valign="top" align="center">Music (เสียงเพลง)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #339933;" class="mycode_color">✔</span></span></td><td class="trow1" valign="top" align="center">เริ่มทันที</td><td class="trow1" valign="top" align="center">ไม่สิ้นสุดจนกว่าจะมีคำสั่งหยุดหรือเปลี่ยนเสียง</td></tr><tr><td class="trow1" valign="top" align="center">Sound (เสียงประกอบ)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #ff3333;" class="mycode_color">✘</span></span></td><td class="trow1" valign="top" align="center">เริ่มทันที</td><td class="trow1" valign="top" align="center">เปิดจนจบครั้งเดียว</td></tr><tr><td class="trow1" valign="top" align="center">Voice (เสียงพูด)</td><td class="trow1" valign="top" align="center"><span style="font-weight: bold;" class="mycode_b"><span style="color: #ff0000;" class="mycode_color">✘</span></span></td><td class="trow1" valign="top" align="center">เริ่มพร้อมกล่องข้อความต่อไป</td><td class="trow1" valign="top" align="center">เปิดจนจบครั้งเดียวหรือเปิดจนกว่าเปลี่ยนกล่องข้อความ (ถ้ายังไม่จบ)</td></tr></table></span><br />
<span style="color: #696969;" class="mycode_color"><br />
นอกจากนี้โปรแกรม Ren'Py ยังมีเสียงประเภทพิเศษคือ Audio จุดเด่นของเสียงประเภทนี้คือสามารถเปิดหลายเสียงพร้อมกันได้ แม้ว่ากำลังเปิดเสียง Audio อื่นอยู่ก็ตาม แต่ Audio ค่อนข้างมีข้อจำกัดมากกว่าเสียง 3 ประเภทข้างต้น เช่น ไม่สามารถต่อคิวเสียงได้ ไม่สามารถหยุดเสียงได้ ถ้าไม่จำเป็นจริง ๆ ผู้เขียนไม่แนะนำให้ใช้เสียง Audio<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Play: เปิดเสียง</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">play</span> คือคำสั่งที่เปิดเสียง ถ้ามีเสียงในประเภทเดียวกันกำลังเปิดอยู่ จะหยุดเสียงเดิมและเปิดเสียงใหม่แทน (ยกเว้นเสียง Audio) รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> คือ<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>play ประเภท "ชื่อไฟล์พร้อมนามสกุล"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
นอกจากนี้ยังสามารถเปิดเสียงโดยค่อย ๆ เพิ่มความดังเสียงได้ ท้ายบรรทัด <span style="font-style: italic;" class="mycode_i">play</span> ให้ใส่ส่วนขยาย <span style="font-style: italic;" class="mycode_i">fadein</span> ตามด้วยเวลาที่เพิ่มเสียง หน่วยเป็นวินาที เช่น ต่อท้ายด้วย <span style="font-style: italic;" class="mycode_i">fadein</span> 2.5 หมายถึงค่อย ๆ เพิ่มเสียงเป็นเวลา 2.5 วินาที หลังจากนั้นเปิดเสียงต่อตามปกติ<br />
<br />
ตัวอย่างการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> เช่น<br />
</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>play music "theme1.ogg"<br />
play music "theme2.ogg"   # หยุดเสียง Music เดิม (theme1.ogg) และเปิดเสียง theme2.ogg<br />
<br />
play music "theme3.ogg" fadein 2.0   # เปิดเสียง theme3.ogg โดยค่อย ๆ เพิ่มความดังเป็นเวลา 2.0 วินาที<br />
<br />
play sound "open.ogg"<br />
play sound "broken.ogg"   # ถ้าเสียง Sound เดิม (open.ogg) ยังไม่จบ จะหยุดเสียงเดิม<br />
<br />
# เสียง Audio เดิมจะไม่หยุดเมื่อเปิดเสียง Audio ใหม่<br />
play audio "sfx1.mp3"<br />
play audio "sfx2.mp3"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
สำหรับการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">play</span> กับเสียง Voice จะเป็นการเปิดเสียงทันที และจะหยุดเสียงเมื่อแสดงหรือเปลี่ยนกล่องข้อความ ซึ่งอาจเปิดและปิดเร็วมากจนฟังไม่ทัน และไม่เหมาะกับการใช้งานเท่าไร การเปิดเสียง Voice ผู้เขียนแนะนำให้ใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">voice</span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Stop: หยุดเสียง</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 49% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter06.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter06.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 5 ตัวเลือกและทิศทางของเกม]]></title>
			<link>https://irpg.in.th/thread-3399.html</link>
			<pubDate>Wed, 07 Aug 2019 17:05:41 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3399.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">อะไรนะ! มีเกมแนว Visual Novel ที่ไหนไม่มีตัวเลือกให้ผู้เล่นบ้าง? ก็เกมแนว Visual Novel ที่สร้างกันในบทที่แล้วน่ะสิ สำหรับผู้อ่านที่ยังไม่ได้อ่านบทความชุด "Ren'Py พื้นฐาน" ตั้งแต่บทที่ 1 ถึงบทที่ 4 ผู้เขียนแนะนำให้ท่าน<a href="https://planila.blogspot.com/search/label/Ren%27Py%20%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%90%E0%B8%B2%E0%B8%99" target="_blank" rel="noopener" class="mycode_url">ย้อนกลับไป</a>ก่อนอ่านบทนี้ ในบทนี้ท่านจะได้เรียนเรื่องทิศทางการทำงานของเกมด้วยวิธีต่าง ๆ ได้แก่ การข้ามการทำงาน, การตรวจเงื่อนไข, การทำงานซ้ำ, และปิดท้ายบทนี้ด้วยการสร้างตัวเลือกให้เกมแนว Visual Novel ที่ผู้เล่นคุ้นเคยกัน</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-SMoxYjaDsVU/XUl6tEGyRQI/AAAAAAAAAgs/062hlkBHxk00v1XUpDvfNBSJfjGt5vK0gCLcBGAs/s640/05.png" loading="lazy"  alt="[Image: 05.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Block: เว้นวรรคหน้าคำสั่ง</span></span><br />
</span><br />
<span style="color: #696969;" class="mycode_color">ก่อนเรียนเรื่องใหม่ผู้เขียนต้องอธิบายเรื่องบล็อก (Block) ให้ท่านเข้าใจก่อน จะได้ไม่ต้องมาอธิบายเรื่องนี้ซ้ำบ่อย ๆ บล็อกคือกลุ่มของคำสั่งที่อยู่ในระดับเดียวกัน ผู้อ่านที่เคยเขียนโปรแกรมด้วยภาษา C หรือ Java คงจะคุ้นเคยกับเครื่องหมาย { } ที่ครอบคำสั่งหลายตัว นั่นคือการบอกว่าคำสั่งเหล่านี้อยู่ในบล็อกเดียวกันหรือระดับเดียวกัน (เช่น กลุ่มคำสั่งที่ต่อจาก <span style="font-style: italic;" class="mycode_i">if-else</span>, <span style="font-style: italic;" class="mycode_i">while</span>, <span style="font-style: italic;" class="mycode_i">function</span>)<br />
<br />
บล็อกคืออะไร? บล็อกคือกลุ่มคำสั่งที่จะทำงานเมื่ออยู่ในเงื่อนไขที่กำหนดเท่านั้น คำสั่งที่อยู่ในบล็อกเดียวกันจะมีระดับเดียวกัน เรื่องนี้อธิบายให้มือใหม่เข้าใจยาก เอาเป็นว่าบล็อกคืออะไรช่างมันก่อน เรียนวิธีใช้บล็อกกันไปก่อน แล้วค่อยทำความรู้จักบล็อกกันในหัวข้อที่ต้องใช้บล็อกกันอีกที<br />
<br />
ในภาษา Ren'Py ไม่ได้ใช้เครื่องหมาย { } ในการแบ่งบล็อก แต่จะใช้การเว้นวรรคหน้าคำสั่งเพื่อแบ่งบล็อก (ห้ามใช้ Tab แทนการเว้นวรรค อ่านรายละเอียดใน "ข้อระวังท้ายบท" ใน <a href="https://planila.blogspot.com/2019/07/renpy-chapter03.html" target="_blank" rel="noopener" class="mycode_url">Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ</a>) คำสั่งที่อยู่ในบล็อกเดียวกันต้องเว้นวรรคหน้าคำสั่งเท่ากัน การเว้นวรรคหน้าคำสั่งจะเว้นวรรคกี่ครั้งก็ได้ สำหรับบล็อกย่อยที่อยู่ภายในบล็อกใหญ่แล้ว บล็อกย่อยนั้นต้องมีจำนวนเว้นวรรคมากกว่าบล็อกใหญ่ ตัวอย่างเช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># บล็อกที่ 1 (คำสั่งที่ 1-1)<br />
# บล็อกที่ 1 (คำสั่งที่ 1-2)<br />
<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-1)<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-2)<br />
<br />
          # บล็อกที่ 3 (คำสั่งที่ 3-1)<br />
          # บล็อกที่ 3 (คำสั่งที่ 3-2)<br />
<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-3)<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-4)<br />
<br />
# บล็อกที่ 1 (คำสั่งที่ 1-3)</code></div></div><span style="color: #696969;" class="mycode_color"><br />
จากตัวอย่างข้างบนสังเกตว่าคำสั่งในบล็อกที่ 1 ไม่ได้เว้นวรรคหน้าคำสั่ง (หน้าบรรทัด) ถือว่าเป็นบล็อกที่ใหญ่ที่สุด บล็อกที่ 2 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 1 มีการเว้นวรรคหน้าบล็อกที่ 2 พอควร ต่อมาคือบล็อกที่ 3 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 2 อีกที สังเกตจากคำสั่งของบล็อกที่ 3 อยู่ต่อจากบล็อกที่ 2 และมีการเว้นวรรคมากกว่าบล็อกที่ 2<br />
<br />
ถ้ามีหลายบล็อกแล้วคำสั่งที่อยู่ในบล็อกที่ใหญ่ที่สุดจะทำงานเป็นลำดับแรก (ในตัวอย่างคือบล็อกที่ 1) ทำงานจากบรรทัดบนไปยังบรรทัดล่าง ส่วนบล็อกย่อยจะทำงานเมื่อตรงตามเงื่อนไขเท่านั้น เช่น ถ้าไม่ตรงเงื่อนไขของบล็อกที่ 2 เกมจะข้ามบล็อกที่ 2 ทั้งหมด รวมทั้งบล็อกที่ 3 ซึ่งอยู่ในบล็อกที่ 2 อีกทีด้วย หมายความว่าเกมจะทำงานแค่สองบรรทัดแรกและบรรทัดสุดท้ายเท่านั้น เพราะสามบรรทัดนี้อยู่ในบล็อกที่ 1 ส่วนบรรทัดอื่นเกมจะมองเหมือนว่าไม่มีตัวตนอยู่<br />
<br />
ถ้าผู้อ่านยังไม่เข้าใจตอนนี้ก็ไม่เป็นไร ขอให้จำง่าย ๆ ว่าคำสั่งที่อยู่ในบล็อกเดียวกันจะเว้นวรรคหน้าบรรทัดเท่ากัน (วิธีจำแบบนี้ไม่เป็นจริงเสมอไป แต่สำหรับมือใหม่จำแบบนี้ไปก่อน) เมื่อได้เรียนหัวข้ออื่นแล้วท่านจะเห็นภาพของบล็อกชัดเจนขึ้น ส่วนเงื่อนไขของบล็อกมีอะไรบ้าง เราจะเรียนกันในหัวข้อต่าง ๆ ในบทนี้<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Pass</span></span><br />
</span><br />
<span style="color: #696969;" class="mycode_color">ในกรณีที่ภาษา Ren'Py บังคับให้ใส่บล็อกย่อย แต่เราไม่มีคำสั่งที่ต้องการใส่ในบล็อกย่อยนั้น ภาษา Ren'Py ไม่อนุญาตให้ปล่อยเป็นบล็อกเปล่าได้ วิธีแก้คือใส่คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> ในบล็อกย่อยนั้น คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> เป็นคำสั่งที่ไม่ทำอะไรเลย ทำหน้าที่เป็น Pseudo Statement หลอกว่าในบล็อกย่อยมีคำสั่งแล้วทั้งที่จริงไม่มีคำสั่ง ตัวอย่างการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> คู่กับคำสั่ง <span style="font-style: italic;" class="mycode_i">if-else</span> เช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if i &gt; 10:<br />
     pass   #เราไม่ต้องการใส่คำสั่งในบล็อกนี้<br />
else:<br />
     "i มีค่าไม่เกิน 10 สินะ"   #บล็อกนี้คือบล็อกที่เราต้องการใส่คำสั่งจริง</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Label &amp; Jump: กำหนดเพื่อข้าม</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Label</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">label</span> คือคำสั่งที่ตั้งชื่อเฉพาะให้แก่บรรทัดนั้น (ตั้งชื่อให้บรรทัดตัวเอง) คำสั่งที่ตามหลัง <span style="font-style: italic;" class="mycode_i">label</span> จะเขียนเป็นบล็อกใหม่หรือบล็อกเดิมก็ได้ ไม่แตกต่างกัน รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label ชื่อเฉพาะ:</code></div></div><span style="color: #696969;" class="mycode_color"><br />
เช่น <span style="font-style: italic;" class="mycode_i">label </span>check: หมายถึงตั้งชื่อ check ให้แก่บรรทัดนั้น (บรรทัด <span style="font-style: italic;" class="mycode_i">label </span>check) คำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>ไม่มีประโยชน์เมื่อใช้งานเดี่ยว ๆ เพราะไม่มีความจำเป็นที่ต้องตั้งชื่อให้แก่คำสั่งที่ตั้งชื่อให้ตัวเอง เปลืองบรรทัดเปล่า ๆ คำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>จะใช้คู่กับคำสั่ง <span style="font-style: italic;" class="mycode_i">jump</span><br />
<br />
start คือชื่อเฉพาะที่โปรแกรม Ren'Py สงวนไว้ เกมจะเริ่มต้นทำงานที่ <span style="font-style: italic;" class="mycode_i">label </span>start: เป็นลำดับแรกเสมอ (เปรียบเหมือนฟังก์ชัน main ในภาษา C) ดังนั้นคำสั่งทุกอย่างในเกมต้องอยู่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>start: เสมอ เพื่อให้คำสั่งเหล่านั้นสามารถทำงานในเกมได้</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-lWKevnVqiiA/XUlMKVWS7aI/AAAAAAAAAfw/DycgNfX8IwM2_yAE9YkQ44PBEg27hNsrQCLcBGAs/s1600/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 5.1 การทำงานของคำสั่ง label และ jump</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Jump</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">jump </span>คือคำสั่งที่ข้ามไปทำงานบรรทัดที่มีชื่อเฉพาะ หมายความว่าเราต้องตั้งชื่อเฉพาะให้แก่บรรทัดเป้าหมายด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">label</span> ก่อน แล้วเราจึงสามารถข้ามไปยังบรรทัดเป้าหมายด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>ได้ เมื่อข้ามไปยังบรรทัดเป้าหมายแล้ว เกมจะทำงานต่อจากบรรทัดเป้าหมายไปเรื่อย ๆ ไม่กลับมาบรรทัดที่ต่อจากคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>อีก (เป็นการข้ามแบบถาวร) รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>jump ชื่อเฉพาะ</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการข้ามด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>เช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># บรรทัดนี้ทำงานเสมอ<br />
<br />
jump check<br />
# บรรทัดนี้จะไม่ทำงาน เพราะถูกข้ามไปยังบรรทัด label check:<br />
<br />
label check:<br />
     # บรรทัดนี้จะทำงาน<br />
<br />
label always:<br />
     # บรรทัดนี้ทำงานเสมอ แม้ว่าจะไม่ได้ข้ามมาบรรทัด label always: ก็ตาม<br />
<br />
# บรรทัดนี้ทำงานเสมอ</code></div></div><span style="color: #696969;" class="mycode_color"><br />
สิ่งที่ต้องระวังคือคำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>ต้องตามท้ายด้วยเครื่องหมาย : แต่คำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>ไม่มีเครื่องหมาย : ต่อท้าย อีกเรื่องที่ควรจำคือถ้าคำสั่งไม่ถูกข้าม เกมจะทำงานจากบรรทัดบนไปยังบรรทัดล่าง คำสั่งที่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>สามารถทำงานได้โดยไม่ต้องเรียกใช้ด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>(เช่น คำสั่งที่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>always: ในตัวอย่างข้างบน) นอกจากนี้ยังสามารถใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>เพื่อข้ามไปยังบรรทัดที่อยู่ในไฟล์สคริปต์อื่นได้อีกด้วย เนื่องจากโปรแกรม Ren'Py มองไฟล์สคริปต์ทุกไฟล์รวมเข้าด้วยกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">If-Else: ตรวจเงื่อนไข</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter05.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter05.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">อะไรนะ! มีเกมแนว Visual Novel ที่ไหนไม่มีตัวเลือกให้ผู้เล่นบ้าง? ก็เกมแนว Visual Novel ที่สร้างกันในบทที่แล้วน่ะสิ สำหรับผู้อ่านที่ยังไม่ได้อ่านบทความชุด "Ren'Py พื้นฐาน" ตั้งแต่บทที่ 1 ถึงบทที่ 4 ผู้เขียนแนะนำให้ท่าน<a href="https://planila.blogspot.com/search/label/Ren%27Py%20%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%90%E0%B8%B2%E0%B8%99" target="_blank" rel="noopener" class="mycode_url">ย้อนกลับไป</a>ก่อนอ่านบทนี้ ในบทนี้ท่านจะได้เรียนเรื่องทิศทางการทำงานของเกมด้วยวิธีต่าง ๆ ได้แก่ การข้ามการทำงาน, การตรวจเงื่อนไข, การทำงานซ้ำ, และปิดท้ายบทนี้ด้วยการสร้างตัวเลือกให้เกมแนว Visual Novel ที่ผู้เล่นคุ้นเคยกัน</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-SMoxYjaDsVU/XUl6tEGyRQI/AAAAAAAAAgs/062hlkBHxk00v1XUpDvfNBSJfjGt5vK0gCLcBGAs/s640/05.png" loading="lazy"  alt="[Image: 05.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Block: เว้นวรรคหน้าคำสั่ง</span></span><br />
</span><br />
<span style="color: #696969;" class="mycode_color">ก่อนเรียนเรื่องใหม่ผู้เขียนต้องอธิบายเรื่องบล็อก (Block) ให้ท่านเข้าใจก่อน จะได้ไม่ต้องมาอธิบายเรื่องนี้ซ้ำบ่อย ๆ บล็อกคือกลุ่มของคำสั่งที่อยู่ในระดับเดียวกัน ผู้อ่านที่เคยเขียนโปรแกรมด้วยภาษา C หรือ Java คงจะคุ้นเคยกับเครื่องหมาย { } ที่ครอบคำสั่งหลายตัว นั่นคือการบอกว่าคำสั่งเหล่านี้อยู่ในบล็อกเดียวกันหรือระดับเดียวกัน (เช่น กลุ่มคำสั่งที่ต่อจาก <span style="font-style: italic;" class="mycode_i">if-else</span>, <span style="font-style: italic;" class="mycode_i">while</span>, <span style="font-style: italic;" class="mycode_i">function</span>)<br />
<br />
บล็อกคืออะไร? บล็อกคือกลุ่มคำสั่งที่จะทำงานเมื่ออยู่ในเงื่อนไขที่กำหนดเท่านั้น คำสั่งที่อยู่ในบล็อกเดียวกันจะมีระดับเดียวกัน เรื่องนี้อธิบายให้มือใหม่เข้าใจยาก เอาเป็นว่าบล็อกคืออะไรช่างมันก่อน เรียนวิธีใช้บล็อกกันไปก่อน แล้วค่อยทำความรู้จักบล็อกกันในหัวข้อที่ต้องใช้บล็อกกันอีกที<br />
<br />
ในภาษา Ren'Py ไม่ได้ใช้เครื่องหมาย { } ในการแบ่งบล็อก แต่จะใช้การเว้นวรรคหน้าคำสั่งเพื่อแบ่งบล็อก (ห้ามใช้ Tab แทนการเว้นวรรค อ่านรายละเอียดใน "ข้อระวังท้ายบท" ใน <a href="https://planila.blogspot.com/2019/07/renpy-chapter03.html" target="_blank" rel="noopener" class="mycode_url">Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ</a>) คำสั่งที่อยู่ในบล็อกเดียวกันต้องเว้นวรรคหน้าคำสั่งเท่ากัน การเว้นวรรคหน้าคำสั่งจะเว้นวรรคกี่ครั้งก็ได้ สำหรับบล็อกย่อยที่อยู่ภายในบล็อกใหญ่แล้ว บล็อกย่อยนั้นต้องมีจำนวนเว้นวรรคมากกว่าบล็อกใหญ่ ตัวอย่างเช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># บล็อกที่ 1 (คำสั่งที่ 1-1)<br />
# บล็อกที่ 1 (คำสั่งที่ 1-2)<br />
<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-1)<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-2)<br />
<br />
          # บล็อกที่ 3 (คำสั่งที่ 3-1)<br />
          # บล็อกที่ 3 (คำสั่งที่ 3-2)<br />
<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-3)<br />
     # บล็อกที่ 2 (คำสั่งที่ 2-4)<br />
<br />
# บล็อกที่ 1 (คำสั่งที่ 1-3)</code></div></div><span style="color: #696969;" class="mycode_color"><br />
จากตัวอย่างข้างบนสังเกตว่าคำสั่งในบล็อกที่ 1 ไม่ได้เว้นวรรคหน้าคำสั่ง (หน้าบรรทัด) ถือว่าเป็นบล็อกที่ใหญ่ที่สุด บล็อกที่ 2 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 1 มีการเว้นวรรคหน้าบล็อกที่ 2 พอควร ต่อมาคือบล็อกที่ 3 เป็นบล็อกย่อยที่อยู่ในบล็อกที่ 2 อีกที สังเกตจากคำสั่งของบล็อกที่ 3 อยู่ต่อจากบล็อกที่ 2 และมีการเว้นวรรคมากกว่าบล็อกที่ 2<br />
<br />
ถ้ามีหลายบล็อกแล้วคำสั่งที่อยู่ในบล็อกที่ใหญ่ที่สุดจะทำงานเป็นลำดับแรก (ในตัวอย่างคือบล็อกที่ 1) ทำงานจากบรรทัดบนไปยังบรรทัดล่าง ส่วนบล็อกย่อยจะทำงานเมื่อตรงตามเงื่อนไขเท่านั้น เช่น ถ้าไม่ตรงเงื่อนไขของบล็อกที่ 2 เกมจะข้ามบล็อกที่ 2 ทั้งหมด รวมทั้งบล็อกที่ 3 ซึ่งอยู่ในบล็อกที่ 2 อีกทีด้วย หมายความว่าเกมจะทำงานแค่สองบรรทัดแรกและบรรทัดสุดท้ายเท่านั้น เพราะสามบรรทัดนี้อยู่ในบล็อกที่ 1 ส่วนบรรทัดอื่นเกมจะมองเหมือนว่าไม่มีตัวตนอยู่<br />
<br />
ถ้าผู้อ่านยังไม่เข้าใจตอนนี้ก็ไม่เป็นไร ขอให้จำง่าย ๆ ว่าคำสั่งที่อยู่ในบล็อกเดียวกันจะเว้นวรรคหน้าบรรทัดเท่ากัน (วิธีจำแบบนี้ไม่เป็นจริงเสมอไป แต่สำหรับมือใหม่จำแบบนี้ไปก่อน) เมื่อได้เรียนหัวข้ออื่นแล้วท่านจะเห็นภาพของบล็อกชัดเจนขึ้น ส่วนเงื่อนไขของบล็อกมีอะไรบ้าง เราจะเรียนกันในหัวข้อต่าง ๆ ในบทนี้<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Pass</span></span><br />
</span><br />
<span style="color: #696969;" class="mycode_color">ในกรณีที่ภาษา Ren'Py บังคับให้ใส่บล็อกย่อย แต่เราไม่มีคำสั่งที่ต้องการใส่ในบล็อกย่อยนั้น ภาษา Ren'Py ไม่อนุญาตให้ปล่อยเป็นบล็อกเปล่าได้ วิธีแก้คือใส่คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> ในบล็อกย่อยนั้น คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> เป็นคำสั่งที่ไม่ทำอะไรเลย ทำหน้าที่เป็น Pseudo Statement หลอกว่าในบล็อกย่อยมีคำสั่งแล้วทั้งที่จริงไม่มีคำสั่ง ตัวอย่างการใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">pass</span> คู่กับคำสั่ง <span style="font-style: italic;" class="mycode_i">if-else</span> เช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if i &gt; 10:<br />
     pass   #เราไม่ต้องการใส่คำสั่งในบล็อกนี้<br />
else:<br />
     "i มีค่าไม่เกิน 10 สินะ"   #บล็อกนี้คือบล็อกที่เราต้องการใส่คำสั่งจริง</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Label &amp; Jump: กำหนดเพื่อข้าม</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Label</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">label</span> คือคำสั่งที่ตั้งชื่อเฉพาะให้แก่บรรทัดนั้น (ตั้งชื่อให้บรรทัดตัวเอง) คำสั่งที่ตามหลัง <span style="font-style: italic;" class="mycode_i">label</span> จะเขียนเป็นบล็อกใหม่หรือบล็อกเดิมก็ได้ ไม่แตกต่างกัน รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label ชื่อเฉพาะ:</code></div></div><span style="color: #696969;" class="mycode_color"><br />
เช่น <span style="font-style: italic;" class="mycode_i">label </span>check: หมายถึงตั้งชื่อ check ให้แก่บรรทัดนั้น (บรรทัด <span style="font-style: italic;" class="mycode_i">label </span>check) คำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>ไม่มีประโยชน์เมื่อใช้งานเดี่ยว ๆ เพราะไม่มีความจำเป็นที่ต้องตั้งชื่อให้แก่คำสั่งที่ตั้งชื่อให้ตัวเอง เปลืองบรรทัดเปล่า ๆ คำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>จะใช้คู่กับคำสั่ง <span style="font-style: italic;" class="mycode_i">jump</span><br />
<br />
start คือชื่อเฉพาะที่โปรแกรม Ren'Py สงวนไว้ เกมจะเริ่มต้นทำงานที่ <span style="font-style: italic;" class="mycode_i">label </span>start: เป็นลำดับแรกเสมอ (เปรียบเหมือนฟังก์ชัน main ในภาษา C) ดังนั้นคำสั่งทุกอย่างในเกมต้องอยู่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>start: เสมอ เพื่อให้คำสั่งเหล่านั้นสามารถทำงานในเกมได้</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-lWKevnVqiiA/XUlMKVWS7aI/AAAAAAAAAfw/DycgNfX8IwM2_yAE9YkQ44PBEg27hNsrQCLcBGAs/s1600/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 5.1 การทำงานของคำสั่ง label และ jump</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Jump</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">jump </span>คือคำสั่งที่ข้ามไปทำงานบรรทัดที่มีชื่อเฉพาะ หมายความว่าเราต้องตั้งชื่อเฉพาะให้แก่บรรทัดเป้าหมายด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">label</span> ก่อน แล้วเราจึงสามารถข้ามไปยังบรรทัดเป้าหมายด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>ได้ เมื่อข้ามไปยังบรรทัดเป้าหมายแล้ว เกมจะทำงานต่อจากบรรทัดเป้าหมายไปเรื่อย ๆ ไม่กลับมาบรรทัดที่ต่อจากคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>อีก (เป็นการข้ามแบบถาวร) รูปแบบของคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>jump ชื่อเฉพาะ</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างการข้ามด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>เช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># บรรทัดนี้ทำงานเสมอ<br />
<br />
jump check<br />
# บรรทัดนี้จะไม่ทำงาน เพราะถูกข้ามไปยังบรรทัด label check:<br />
<br />
label check:<br />
     # บรรทัดนี้จะทำงาน<br />
<br />
label always:<br />
     # บรรทัดนี้ทำงานเสมอ แม้ว่าจะไม่ได้ข้ามมาบรรทัด label always: ก็ตาม<br />
<br />
# บรรทัดนี้ทำงานเสมอ</code></div></div><span style="color: #696969;" class="mycode_color"><br />
สิ่งที่ต้องระวังคือคำสั่ง <span style="font-style: italic;" class="mycode_i">label </span>ต้องตามท้ายด้วยเครื่องหมาย : แต่คำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>ไม่มีเครื่องหมาย : ต่อท้าย อีกเรื่องที่ควรจำคือถ้าคำสั่งไม่ถูกข้าม เกมจะทำงานจากบรรทัดบนไปยังบรรทัดล่าง คำสั่งที่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>สามารถทำงานได้โดยไม่ต้องเรียกใช้ด้วยคำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>(เช่น คำสั่งที่ต่อจากบรรทัด <span style="font-style: italic;" class="mycode_i">label </span>always: ในตัวอย่างข้างบน) นอกจากนี้ยังสามารถใช้คำสั่ง <span style="font-style: italic;" class="mycode_i">jump </span>เพื่อข้ามไปยังบรรทัดที่อยู่ในไฟล์สคริปต์อื่นได้อีกด้วย เนื่องจากโปรแกรม Ren'Py มองไฟล์สคริปต์ทุกไฟล์รวมเข้าด้วยกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">If-Else: ตรวจเงื่อนไข</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/08/renpy-chapter05.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/08/ren...ter05.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 4 ตัวแปรและตัวดำเนินการ]]></title>
			<link>https://irpg.in.th/thread-3398.html</link>
			<pubDate>Tue, 30 Jul 2019 20:14:32 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3398.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">บทนี้จะเป็นเนื้อหาเกี่ยวกับการเขียนโปรแกรม ผู้อ่านที่ไม่เคยเขียนโปรแกรมมาก่อนไม่ต้องกังวลไป โปรแกรม Ren'Py ใช้รูปแบบเดียวกับภาษา Python ซึ่งเข้าใจง่ายกว่าภาษาคอมพิวเตอร์หลายตัว (เช่น C, Java) จุดประสงค์ของบทนี้คือเพื่อให้ผู้อ่านใช้งานตัวแปรเบื้องต้นได้ ไม่ได้สอนภาษา Python เต็มตัว ผู้เขียนละเนื้อหาเชิงเทคนิคที่ซับซ้อนไว้ เพื่อให้นักสร้างเกมที่ไม่เคยเขียนโปรแกรมสามารถเข้าใจได้ง่าย ๆ สำหรับผู้อ่านที่ต้องการเขียนโปรแกรมเต็มตัวให้ศึกษาภาษา Python จากตำราสอนเขียนโปรแกรม<br />
<br />
คำสั่งของโปรแกรม Ren'Py ไม่มีตัวแปรใด ๆ เลย นั่นหมายความว่าเราไม่สามารถเก็บข้อมูลลงหน่วยความจำได้ แต่เกมแนว Visual Novel หลายเกมจำเป็นต้องเก็บข้อมูล เช่น เก็บค่าความรักของนางเอก, หรือเก็บตัวเลือกที่ผู้เล่นเคยเลือก เพื่อนำไปสู่ฉากจบที่แตกต่างกัน กรณีที่ต้องใช้ตัวแปรหรือเก็บข้อมูลแบบนี้ ถึงคราวที่ต้องใช้ภาษา Python แล้วล่ะ!<br />
<br />
เนื้อหาในบทนี้จะเป็นเนื้อหาทฤษฎี เราจะนำเนื้อหาในบทนี้ไปต่อยอด และลงมือปฏิบัติจริงกันในบทต่อไป</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-UBwZu9havuc/XT2vmZGlebI/AAAAAAAAAfE/x17LdShcaJsCco4Bm4ul-8YbJOlM4JbjQCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประเภทของตัวแปร</span></span><br />
<br />
ตัวแปร (Variable) คือสิ่งที่เก็บข้อมูล เมื่อเกมหรือโปรแกรมทำงานบางครั้งมีข้อมูลที่ต้องใช้งานต่อในอนาคต เราต้องเก็บข้อมูลนั้นไว้ สิ่งที่เก็บข้อมูลก็คือตัวแปร เมื่อถึงเวลาที่ต้องการก็เรียกใช้ข้อมูลจากตัวแปรนั้น<br />
<br />
(เชิงเทคนิค : ในทางทฤษฎีตัวแปรเป็นเพียงสิ่งที่สมมติขึ้น เพื่อใช้อ้างอิงตำแหน่งที่เก็บข้อมูลในหน่วยความจำ ตัวแปรไม่ได้เก็บข้อมูลจริง ๆ แต่ตามตำรามักสอนว่าตัวแปรเก็บข้อมูล เพื่อให้คนที่เพิ่งเรียนเขียนโปรแกรมเข้าใจง่าย)<br />
<br />
ตัวแปรที่ควรทราบในภาษา Python มี 2 ประเภทได้แก่</span><ul class="mycode_list"><li><span style="color: #696969;" class="mycode_color">ตัวแปรตัวเลข (Number) เก็บข้อมูลที่เป็นจำนวนเต็ม (Integer) หรือทศนิยม (Floating-Point) เช่น 0, -5, 91, -12.67</span><br />
</li>
<li><span style="color: #696969;" class="mycode_color">ตัวแปรข้อความ (String) เก็บข้อมูลที่เป็นตัวอักษรหรือข้อความ เช่น "A", "Planila Game Developer", 'Visual Novel'</span><br />
</li>
</ul>
<span style="color: #696969;" class="mycode_color">ภาษา Python แตกต่างจากหลายภาษา (เช่น C, Java) ตรงที่ตัวแปรจะถูกประกาศทันทีที่ใช้งาน ไม่ต้องประกาศตัวแปรล่วงหน้า และไม่ต้องระบุประเภทของตัวแปร วิธีใช้ตัวแปรเพียงแค่ใส่ชื่อของตัวแปร (Identifier) และกำหนดค่าให้ตัวแปร ถ้าตัวแปรนั้นไม่เคยมีมาก่อนจะถือว่าเป็นการประกาศตัวแปรโดยอัตโนมัติ และโปรแกรมจะเลือกประเภทของตัวแปรให้โดยอัตโนมัติ ตัวอย่างเช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; a = -3   # ประกาศตัวแปร a (ประเภท integer) และเก็บค่า -3<br />
&#36; relation = 12.65   # ประกาศตัวแปร relation (ประเภท floating-point) และเก็บค่า 12.65<br />
&#36; name = "Planila"   # ประกาศตัวแปร name (ประเภท string) และเก็บค่า "Planila"<br />
<br />
&#36; b = 3 * 5   # ประกาศตัวแปร b (ประเภท integer) และเก็บค่า 15<br />
&#36; a = 9 + 2   # เก็บค่า 11 | บรรทัดนี้ไม่ใช่การประกาศตัวแปร เพราะตัวแปร a เคยถูกประกาศแล้ว</code></div></div><br />
<span style="color: #696969;" class="mycode_color">ตัวแปรตัวเลขแบ่งย่อยเป็นตัวแปรจำนวนเต็ม (Integer) และตัวแปรทศนิยม (Floating-Point) ความแตกต่างคือการเก็บค่าทศนิยม เช่น x = 1 เป็นตัวแปรจำนวนเต็ม, แต่ y = 1.0 เป็นตัวแปรทศนิยม (สังเกตจากการใส่จุดทศนิยม ไม่สนใจว่าเลขหลังทศนิยมคือเลขอะไร)<br />
<br />
ข้อความหรือตัวอักษรที่ใส่ในตัวแปรข้อความต้องอยู่ในเครื่องหมาย ' ' หรือ " " เช่น name = 'Planila' หรือ name = "Planila" ก็มีค่าเหมือนกัน ภาษา Python ไม่มีตัวแปรตัวอักษร (Character) โดยเฉพาะเหมือนภาษา C ดังนั้นตัวแปรที่เก็บตัวอักษรเพียงตัวเดียวจะถูกจัดอยู่ในตัวแปรข้อความ<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Boolean คือส่วนหนึ่งของ Integer</span></span><br />
<br />
ภาษา Python ไม่มีตัวแปรตรรกศาสตร์ (Boolean) โดยเฉพาะเหมือนภาษา C หรือ Java แต่สามารถเก็บค่าทางตรรกศาสตร์ลงในตัวแปรจำนวนเต็มได้ (Boolean เป็นส่วนหนึ่งของ Integer) ผลลัพธ์ทางตรรกศาสตร์ในภาษา Python ได้แก่ 0 (และ 0.0) คือเท็จ (False) และนอกจากนั้นคือจริง (True) แต่โดยทั่วไปมักกำหนดให้จริงเท่ากับ 1 การกำหนดค่าตรรกศาสตร์ต้องใส่เป็นตัวเลขเท่านั้น เช่น love = 1 ไม่สามารถใส่เป็น True หรือ False ได้<br />
<br />
นอกจากนี้ภาษา Python ยังมีตัวแปรประเภทอื่น เช่น Lists, Tuple, Set ตัวแปรเหล่านี้สามารถใช้ในโปรแกรม Ren'Py ได้ แต่ผู้เขียนจะไม่สอนในบทความนี้ เนื่องจากเป็นเนื้อหาที่ลึกและไม่จำเป็นสำหรับนักสร้างเกมมือใหม่<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ตัวดำเนินการ (Operator)</span></span><br />
<br />
นอกจากตัวแปรสามารถเก็บข้อมูลตามหัวข้อที่แล้ว เรายังสามารถคำนวณหรือเปรียบเทียบค่าแล้วเก็บลงในตัวแปรได้ การคำนวณหรือเปรียบเทียบต้องใช้ตัวดำเนินการ ตัวดำเนินการที่ควรทราบในภาษา Python ได้แก่<br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter04.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter04.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">บทนี้จะเป็นเนื้อหาเกี่ยวกับการเขียนโปรแกรม ผู้อ่านที่ไม่เคยเขียนโปรแกรมมาก่อนไม่ต้องกังวลไป โปรแกรม Ren'Py ใช้รูปแบบเดียวกับภาษา Python ซึ่งเข้าใจง่ายกว่าภาษาคอมพิวเตอร์หลายตัว (เช่น C, Java) จุดประสงค์ของบทนี้คือเพื่อให้ผู้อ่านใช้งานตัวแปรเบื้องต้นได้ ไม่ได้สอนภาษา Python เต็มตัว ผู้เขียนละเนื้อหาเชิงเทคนิคที่ซับซ้อนไว้ เพื่อให้นักสร้างเกมที่ไม่เคยเขียนโปรแกรมสามารถเข้าใจได้ง่าย ๆ สำหรับผู้อ่านที่ต้องการเขียนโปรแกรมเต็มตัวให้ศึกษาภาษา Python จากตำราสอนเขียนโปรแกรม<br />
<br />
คำสั่งของโปรแกรม Ren'Py ไม่มีตัวแปรใด ๆ เลย นั่นหมายความว่าเราไม่สามารถเก็บข้อมูลลงหน่วยความจำได้ แต่เกมแนว Visual Novel หลายเกมจำเป็นต้องเก็บข้อมูล เช่น เก็บค่าความรักของนางเอก, หรือเก็บตัวเลือกที่ผู้เล่นเคยเลือก เพื่อนำไปสู่ฉากจบที่แตกต่างกัน กรณีที่ต้องใช้ตัวแปรหรือเก็บข้อมูลแบบนี้ ถึงคราวที่ต้องใช้ภาษา Python แล้วล่ะ!<br />
<br />
เนื้อหาในบทนี้จะเป็นเนื้อหาทฤษฎี เราจะนำเนื้อหาในบทนี้ไปต่อยอด และลงมือปฏิบัติจริงกันในบทต่อไป</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-UBwZu9havuc/XT2vmZGlebI/AAAAAAAAAfE/x17LdShcaJsCco4Bm4ul-8YbJOlM4JbjQCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประเภทของตัวแปร</span></span><br />
<br />
ตัวแปร (Variable) คือสิ่งที่เก็บข้อมูล เมื่อเกมหรือโปรแกรมทำงานบางครั้งมีข้อมูลที่ต้องใช้งานต่อในอนาคต เราต้องเก็บข้อมูลนั้นไว้ สิ่งที่เก็บข้อมูลก็คือตัวแปร เมื่อถึงเวลาที่ต้องการก็เรียกใช้ข้อมูลจากตัวแปรนั้น<br />
<br />
(เชิงเทคนิค : ในทางทฤษฎีตัวแปรเป็นเพียงสิ่งที่สมมติขึ้น เพื่อใช้อ้างอิงตำแหน่งที่เก็บข้อมูลในหน่วยความจำ ตัวแปรไม่ได้เก็บข้อมูลจริง ๆ แต่ตามตำรามักสอนว่าตัวแปรเก็บข้อมูล เพื่อให้คนที่เพิ่งเรียนเขียนโปรแกรมเข้าใจง่าย)<br />
<br />
ตัวแปรที่ควรทราบในภาษา Python มี 2 ประเภทได้แก่</span><ul class="mycode_list"><li><span style="color: #696969;" class="mycode_color">ตัวแปรตัวเลข (Number) เก็บข้อมูลที่เป็นจำนวนเต็ม (Integer) หรือทศนิยม (Floating-Point) เช่น 0, -5, 91, -12.67</span><br />
</li>
<li><span style="color: #696969;" class="mycode_color">ตัวแปรข้อความ (String) เก็บข้อมูลที่เป็นตัวอักษรหรือข้อความ เช่น "A", "Planila Game Developer", 'Visual Novel'</span><br />
</li>
</ul>
<span style="color: #696969;" class="mycode_color">ภาษา Python แตกต่างจากหลายภาษา (เช่น C, Java) ตรงที่ตัวแปรจะถูกประกาศทันทีที่ใช้งาน ไม่ต้องประกาศตัวแปรล่วงหน้า และไม่ต้องระบุประเภทของตัวแปร วิธีใช้ตัวแปรเพียงแค่ใส่ชื่อของตัวแปร (Identifier) และกำหนดค่าให้ตัวแปร ถ้าตัวแปรนั้นไม่เคยมีมาก่อนจะถือว่าเป็นการประกาศตัวแปรโดยอัตโนมัติ และโปรแกรมจะเลือกประเภทของตัวแปรให้โดยอัตโนมัติ ตัวอย่างเช่น</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; a = -3   # ประกาศตัวแปร a (ประเภท integer) และเก็บค่า -3<br />
&#36; relation = 12.65   # ประกาศตัวแปร relation (ประเภท floating-point) และเก็บค่า 12.65<br />
&#36; name = "Planila"   # ประกาศตัวแปร name (ประเภท string) และเก็บค่า "Planila"<br />
<br />
&#36; b = 3 * 5   # ประกาศตัวแปร b (ประเภท integer) และเก็บค่า 15<br />
&#36; a = 9 + 2   # เก็บค่า 11 | บรรทัดนี้ไม่ใช่การประกาศตัวแปร เพราะตัวแปร a เคยถูกประกาศแล้ว</code></div></div><br />
<span style="color: #696969;" class="mycode_color">ตัวแปรตัวเลขแบ่งย่อยเป็นตัวแปรจำนวนเต็ม (Integer) และตัวแปรทศนิยม (Floating-Point) ความแตกต่างคือการเก็บค่าทศนิยม เช่น x = 1 เป็นตัวแปรจำนวนเต็ม, แต่ y = 1.0 เป็นตัวแปรทศนิยม (สังเกตจากการใส่จุดทศนิยม ไม่สนใจว่าเลขหลังทศนิยมคือเลขอะไร)<br />
<br />
ข้อความหรือตัวอักษรที่ใส่ในตัวแปรข้อความต้องอยู่ในเครื่องหมาย ' ' หรือ " " เช่น name = 'Planila' หรือ name = "Planila" ก็มีค่าเหมือนกัน ภาษา Python ไม่มีตัวแปรตัวอักษร (Character) โดยเฉพาะเหมือนภาษา C ดังนั้นตัวแปรที่เก็บตัวอักษรเพียงตัวเดียวจะถูกจัดอยู่ในตัวแปรข้อความ<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Boolean คือส่วนหนึ่งของ Integer</span></span><br />
<br />
ภาษา Python ไม่มีตัวแปรตรรกศาสตร์ (Boolean) โดยเฉพาะเหมือนภาษา C หรือ Java แต่สามารถเก็บค่าทางตรรกศาสตร์ลงในตัวแปรจำนวนเต็มได้ (Boolean เป็นส่วนหนึ่งของ Integer) ผลลัพธ์ทางตรรกศาสตร์ในภาษา Python ได้แก่ 0 (และ 0.0) คือเท็จ (False) และนอกจากนั้นคือจริง (True) แต่โดยทั่วไปมักกำหนดให้จริงเท่ากับ 1 การกำหนดค่าตรรกศาสตร์ต้องใส่เป็นตัวเลขเท่านั้น เช่น love = 1 ไม่สามารถใส่เป็น True หรือ False ได้<br />
<br />
นอกจากนี้ภาษา Python ยังมีตัวแปรประเภทอื่น เช่น Lists, Tuple, Set ตัวแปรเหล่านี้สามารถใช้ในโปรแกรม Ren'Py ได้ แต่ผู้เขียนจะไม่สอนในบทความนี้ เนื่องจากเป็นเนื้อหาที่ลึกและไม่จำเป็นสำหรับนักสร้างเกมมือใหม่<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ตัวดำเนินการ (Operator)</span></span><br />
<br />
นอกจากตัวแปรสามารถเก็บข้อมูลตามหัวข้อที่แล้ว เรายังสามารถคำนวณหรือเปรียบเทียบค่าแล้วเก็บลงในตัวแปรได้ การคำนวณหรือเปรียบเทียบต้องใช้ตัวดำเนินการ ตัวดำเนินการที่ควรทราบในภาษา Python ได้แก่<br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter04.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter04.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ]]></title>
			<link>https://irpg.in.th/thread-3396.html</link>
			<pubDate>Tue, 23 Jul 2019 20:22:35 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3396.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">กล่องข้อความคือส่วนสำคัญในเกมแนว Visual Novel เนื่องจากเป็นส่วนที่แสดงคำพูดของตัวละคร โปรแกรมเกมเอนจิน Ren'Py มีลูกเล่นเกี่ยวกับกล่องข้อความมากมาย นักสร้างเกมสามารถสร้างกล่องข้อความสวย ๆ ได้อย่างง่ายดาย สำหรับผู้อ่านที่ต้องการใช้ภาษาไทยในโปรแกรม Ren'Py ให้ท่านเปลี่ยนฟอนต์ก่อนทดสอบเกม อ่านเพิ่มเติมได้ในหัวข้อ "เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)"<br />
<br />
กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py แบ่งเป็น 3 ส่วนดังรูปที่ 3.1 ได้แก่</span><ul class="mycode_list"><li>ส่วนที่ 1 ชื่อตัวละคร<br />
</li>
<li>ส่วนที่ 2 ข้อความหรือคำพูดตัวละคร<br />
</li>
<li>ส่วนที่ 3 พื้นหลังกล่องข้อความ<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-BJWazL0RPXk/XTWHuTlMTZI/AAAAAAAAAd8/-4EpTVBCPgsU844zKkoXWZuQiYtHL7zcgCLcBGAs/s640/04.png" loading="lazy"  alt="[Image: 04.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
คำสั่งที่แสดงข้อความในกล่องข้อความมี 2 รูปแบบ รูปแบบแรกมีสองส่วนคือส่วนชื่อตัวละครและส่วนคำพูดตัวละคร แต่ละส่วนอยู่ภายในเครื่องหมาย " " รูปแบบนี้เหมาะสำหรับคำพูดทั่วไป</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"ชื่อตัวละคร" "คำพูดตัวละคร"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
รูปแบบที่สองมีเพียงส่วนเดียวคือส่วนคำพูดตัวละครที่อยู่ในเครื่องหมาย " " คำสั่งรูปแบบนี้จะแสดงเฉพาะคำพูดตัวละคร ไม่แสดงชื่อตัวละคร รูปแบบนี้เหมาะสำหรับประโยคที่ตัวละครคิดในใจ หรือข้อความแจ้งเตือนจากเกม</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"คำพูดตัวละคร"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างคำสั่งที่ใช้แสดงข้อความในรูปที่ 3.1 คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"Aiya" "What are you doing? Why you don't knock the door!"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประกาศตัวแปรเก็บชื่อตัวละคร</span></span><br />
<br />
ก่อนเรียนเรื่องการใช้กล่องข้อความต่อ ผู้เขียนมีเทคนิคการใส่คำสั่งให้สั้นลง เกมแนว Visual Novel ต้องแสดงข้อความหรือคำพูดจำนวนมาก จึงต้องแสดงชื่อตัวละครเดิมซ้ำกันหลายครั้ง โปรแกรม Ren'Py มีเทคนิคที่จัดการกับชื่อตัวละคร แทนที่จะใส่ชื่อตัวละครเดิมซ้ำกันทุกครั้ง เราสามารถประกาศตัวแปรและใส่ชื่อตัวละครลงในตัวแปรแทนได้ในรูปแบบดังนี้</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>define ชื่อตัวแปร = Character('ชื่อตัวละคร')</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างเช่น ประกาศตัวแปร a แล้วใส่ชื่อตัวละคร Aiya ลงในตัวแปร a คำสั่งแสดงข้อความไม่ต้องใส่เครื่องหมาย " " ในส่วนชื่อตัวละครที่เป็นตัวแปร (ถ้าส่วนชื่อตัวละครไม่ใช่ตัวแปรจะต้องใส่เครื่องหมาย " " ทุกครั้ง) เราสามารถแสดงข้อความดังรูปที่ 3.1 ด้วยเทคนิคตัวแปรดังนี้</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>define a = Character('Aiya')<br />
a "What are you doing? Why you don't knock the door!"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
จากตัวอย่างข้างบนจะเห็นว่าใช้ตัวอักษรเพียงตัวเดียวคือ a เพื่อแสดงชื่อตัวละคร Aiya ซึ่งมีสี่ตัวอักษร ความสะดวกนี้จะเห็นได้ชัดเจนขึ้นเมื่อตัวละครมีชื่อยาว เช่น เก็บชื่อตัวละคร Princess Sofia de Lupier ลงตัวแปรชื่อ s แล้วเรียกใช้ชื่อตัวละครผ่านตัวแปร s ทำให้ไม่ต้องพิมพ์ชื่อยาว ๆ ทุกครั้งที่ใส่คำสั่งแสดงข้อความ การประกาศตัวแปรให้ประกาศเพียงครั้งเดียวก่อนใช้ จากนั้นสามารถใช้ตัวแปรนั้นได้ตลอดทั้งเกมโดยไม่ต้องประกาศตัวแปรใหม่ ถ้ามีตัวแปรที่เก็บชื่อตัวละครหลายตัวแปร ตัวแปรแต่ละตัวต้องมีชื่อที่ไม่ซ้ำกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ตัวอักษรพิเศษ</span></span><br />
<br />
ตัวอักษรพิเศษ (Escape Character) เป็นตัวอักษรที่ไม่สามารถแสดงในกล่องข้อความด้วยวิธีปกติได้ เช่น เครื่องหมาย " " หรือการขึ้นบรรทัดใหม่ เนื่องจากติดข้อจำกัดคำสั่งของโปรแกรม Ren'Py แต่โปรแกรม Ren'Py มีทางออกด้วยการใช้ตัวอักษรพิเศษแทนการใส่ตัวอักษรนั้นเข้าไปตรง ๆ ตัวอักษรพิเศษได้แก่</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><table border="0" cellspacing="1" cellpadding="3" class="tborder" style="width:95%;"><tr><th class="tcat" valign="middle"><strong>ตัวอักษรที่ต้องการ</strong></th><th class="tcat" valign="middle"><strong>ตัวอักษรพิเศษ</strong></th><th class="tcat" valign="middle"><strong>ตัวอย่าง</strong></th></tr><tr><td class="trow1" valign="top" align="center">\</td><td class="trow1" valign="top" align="center">\\</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Game was saved in C:\\Highstories Star\\game\\saves\\auto-1-LT1.save"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">"</td><td class="trow1" valign="top" align="center">\"</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">a "My name is \"Aiya\"."</div>
</td></tr><tr><td class="trow1" valign="top" align="center">'</td><td class="trow1" valign="top" align="center">\'</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Rika" "You love me or \'Aiya\'?"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">เว้นวรรคติดกัน</td><td class="trow1" valign="top" align="center">\  (backslash + space)</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Aiya" "JUMP \ JUMP \ JUMP"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">ขึ้นบรรทัดใหม่</td><td class="trow1" valign="top" align="center">\n</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">a "What are you doing?\nWhy you don't knock the door!"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">[</td><td class="trow1" valign="top" align="center">[[</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"[[Aiya's underwear is very sexy.]"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">{</td><td class="trow1" valign="top" align="center">{{</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"{{This room is too hot. Is not there an air-conditioner?}"</div>
</td></tr></table></div>
<span style="color: #696969;" class="mycode_color"><br />
การใช้ตัวอักษรพิเศษให้ใส่ในข้อความที่ต้องการ เช่น ใส่ตัวอักษรพิเศษ \" เพื่อแสดงเครื่องหมาย " ในกล่องข้อความ ส่วนเครื่องหมาย \ เป็นเพียงการบอกว่านี่เป็นตัวอักษรพิเศษ เครื่องหมาย \ จะไม่ถูกแสดงในกล่องข้อความ ถ้าผู้อ่านต้องการใช้ตัวอักษรในตารางข้างบน ท่านต้องใช้ตัวอักษรพิเศษเท่านั้น ไม่สามารถใส่ตัวอักษรที่ต้องการโดยตรงได้<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-CCANO1THItM/XTVg4-58TnI/AAAAAAAAAc4/SeHbM6Aa9DQAZxpysDllWOalheCJ7HhdQCLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 3.2 การใช้ตัวอักษรพิเศษ \n เพื่อขึ้นบรรทัดใหม่</div>
<span style="color: #696969;" class="mycode_color"><br />
โดยทั่วไปโปรแกรม Ren'Py จะมองเว้นวรรคที่อยู่ติดกันเป็นเว้นวรรคเดียว ถ้าต้องการเว้นวรรคหลายครั้ง ต้องนำหน้าเว้นวรรคด้วยเครื่องหมาย \ ต่อเว้นวรรคหนึ่งครั้ง เพื่อให้โปรแกรม Ren'Py มองแยกเป็นหลายเว้นวรรค การแสดงเครื่องหมาย [ และ { ให้ใส่เครื่องหมายนั้นสองตัวติดกันเป็น [[ และ {{ แต่เครื่องหมาย ] และ } สามารถใส่ได้โดยตรง ไม่ต้องใส่ซ้ำสองตัว<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter03.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter03.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">กล่องข้อความคือส่วนสำคัญในเกมแนว Visual Novel เนื่องจากเป็นส่วนที่แสดงคำพูดของตัวละคร โปรแกรมเกมเอนจิน Ren'Py มีลูกเล่นเกี่ยวกับกล่องข้อความมากมาย นักสร้างเกมสามารถสร้างกล่องข้อความสวย ๆ ได้อย่างง่ายดาย สำหรับผู้อ่านที่ต้องการใช้ภาษาไทยในโปรแกรม Ren'Py ให้ท่านเปลี่ยนฟอนต์ก่อนทดสอบเกม อ่านเพิ่มเติมได้ในหัวข้อ "เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)"<br />
<br />
กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py แบ่งเป็น 3 ส่วนดังรูปที่ 3.1 ได้แก่</span><ul class="mycode_list"><li>ส่วนที่ 1 ชื่อตัวละคร<br />
</li>
<li>ส่วนที่ 2 ข้อความหรือคำพูดตัวละคร<br />
</li>
<li>ส่วนที่ 3 พื้นหลังกล่องข้อความ<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-BJWazL0RPXk/XTWHuTlMTZI/AAAAAAAAAd8/-4EpTVBCPgsU844zKkoXWZuQiYtHL7zcgCLcBGAs/s640/04.png" loading="lazy"  alt="[Image: 04.png]" class="mycode_img" /></div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
คำสั่งที่แสดงข้อความในกล่องข้อความมี 2 รูปแบบ รูปแบบแรกมีสองส่วนคือส่วนชื่อตัวละครและส่วนคำพูดตัวละคร แต่ละส่วนอยู่ภายในเครื่องหมาย " " รูปแบบนี้เหมาะสำหรับคำพูดทั่วไป</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"ชื่อตัวละคร" "คำพูดตัวละคร"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
รูปแบบที่สองมีเพียงส่วนเดียวคือส่วนคำพูดตัวละครที่อยู่ในเครื่องหมาย " " คำสั่งรูปแบบนี้จะแสดงเฉพาะคำพูดตัวละคร ไม่แสดงชื่อตัวละคร รูปแบบนี้เหมาะสำหรับประโยคที่ตัวละครคิดในใจ หรือข้อความแจ้งเตือนจากเกม</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"คำพูดตัวละคร"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างคำสั่งที่ใช้แสดงข้อความในรูปที่ 3.1 คือ</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>"Aiya" "What are you doing? Why you don't knock the door!"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ประกาศตัวแปรเก็บชื่อตัวละคร</span></span><br />
<br />
ก่อนเรียนเรื่องการใช้กล่องข้อความต่อ ผู้เขียนมีเทคนิคการใส่คำสั่งให้สั้นลง เกมแนว Visual Novel ต้องแสดงข้อความหรือคำพูดจำนวนมาก จึงต้องแสดงชื่อตัวละครเดิมซ้ำกันหลายครั้ง โปรแกรม Ren'Py มีเทคนิคที่จัดการกับชื่อตัวละคร แทนที่จะใส่ชื่อตัวละครเดิมซ้ำกันทุกครั้ง เราสามารถประกาศตัวแปรและใส่ชื่อตัวละครลงในตัวแปรแทนได้ในรูปแบบดังนี้</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>define ชื่อตัวแปร = Character('ชื่อตัวละคร')</code></div></div><span style="color: #696969;" class="mycode_color"><br />
ตัวอย่างเช่น ประกาศตัวแปร a แล้วใส่ชื่อตัวละคร Aiya ลงในตัวแปร a คำสั่งแสดงข้อความไม่ต้องใส่เครื่องหมาย " " ในส่วนชื่อตัวละครที่เป็นตัวแปร (ถ้าส่วนชื่อตัวละครไม่ใช่ตัวแปรจะต้องใส่เครื่องหมาย " " ทุกครั้ง) เราสามารถแสดงข้อความดังรูปที่ 3.1 ด้วยเทคนิคตัวแปรดังนี้</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>define a = Character('Aiya')<br />
a "What are you doing? Why you don't knock the door!"</code></div></div><span style="color: #696969;" class="mycode_color"><br />
จากตัวอย่างข้างบนจะเห็นว่าใช้ตัวอักษรเพียงตัวเดียวคือ a เพื่อแสดงชื่อตัวละคร Aiya ซึ่งมีสี่ตัวอักษร ความสะดวกนี้จะเห็นได้ชัดเจนขึ้นเมื่อตัวละครมีชื่อยาว เช่น เก็บชื่อตัวละคร Princess Sofia de Lupier ลงตัวแปรชื่อ s แล้วเรียกใช้ชื่อตัวละครผ่านตัวแปร s ทำให้ไม่ต้องพิมพ์ชื่อยาว ๆ ทุกครั้งที่ใส่คำสั่งแสดงข้อความ การประกาศตัวแปรให้ประกาศเพียงครั้งเดียวก่อนใช้ จากนั้นสามารถใช้ตัวแปรนั้นได้ตลอดทั้งเกมโดยไม่ต้องประกาศตัวแปรใหม่ ถ้ามีตัวแปรที่เก็บชื่อตัวละครหลายตัวแปร ตัวแปรแต่ละตัวต้องมีชื่อที่ไม่ซ้ำกัน<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ตัวอักษรพิเศษ</span></span><br />
<br />
ตัวอักษรพิเศษ (Escape Character) เป็นตัวอักษรที่ไม่สามารถแสดงในกล่องข้อความด้วยวิธีปกติได้ เช่น เครื่องหมาย " " หรือการขึ้นบรรทัดใหม่ เนื่องจากติดข้อจำกัดคำสั่งของโปรแกรม Ren'Py แต่โปรแกรม Ren'Py มีทางออกด้วยการใช้ตัวอักษรพิเศษแทนการใส่ตัวอักษรนั้นเข้าไปตรง ๆ ตัวอักษรพิเศษได้แก่</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><table border="0" cellspacing="1" cellpadding="3" class="tborder" style="width:95%;"><tr><th class="tcat" valign="middle"><strong>ตัวอักษรที่ต้องการ</strong></th><th class="tcat" valign="middle"><strong>ตัวอักษรพิเศษ</strong></th><th class="tcat" valign="middle"><strong>ตัวอย่าง</strong></th></tr><tr><td class="trow1" valign="top" align="center">\</td><td class="trow1" valign="top" align="center">\\</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Game was saved in C:\\Highstories Star\\game\\saves\\auto-1-LT1.save"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">"</td><td class="trow1" valign="top" align="center">\"</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">a "My name is \"Aiya\"."</div>
</td></tr><tr><td class="trow1" valign="top" align="center">'</td><td class="trow1" valign="top" align="center">\'</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Rika" "You love me or \'Aiya\'?"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">เว้นวรรคติดกัน</td><td class="trow1" valign="top" align="center">\  (backslash + space)</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"Aiya" "JUMP \ JUMP \ JUMP"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">ขึ้นบรรทัดใหม่</td><td class="trow1" valign="top" align="center">\n</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">a "What are you doing?\nWhy you don't knock the door!"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">[</td><td class="trow1" valign="top" align="center">[[</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"[[Aiya's underwear is very sexy.]"</div>
</td></tr><tr><td class="trow1" valign="top" align="center">{</td><td class="trow1" valign="top" align="center">{{</td><td class="trow1" valign="top" align="center">
<div style="text-align: left;" class="mycode_align">"{{This room is too hot. Is not there an air-conditioner?}"</div>
</td></tr></table></div>
<span style="color: #696969;" class="mycode_color"><br />
การใช้ตัวอักษรพิเศษให้ใส่ในข้อความที่ต้องการ เช่น ใส่ตัวอักษรพิเศษ \" เพื่อแสดงเครื่องหมาย " ในกล่องข้อความ ส่วนเครื่องหมาย \ เป็นเพียงการบอกว่านี่เป็นตัวอักษรพิเศษ เครื่องหมาย \ จะไม่ถูกแสดงในกล่องข้อความ ถ้าผู้อ่านต้องการใช้ตัวอักษรในตารางข้างบน ท่านต้องใช้ตัวอักษรพิเศษเท่านั้น ไม่สามารถใส่ตัวอักษรที่ต้องการโดยตรงได้<br />
</span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-CCANO1THItM/XTVg4-58TnI/AAAAAAAAAc4/SeHbM6Aa9DQAZxpysDllWOalheCJ7HhdQCLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 3.2 การใช้ตัวอักษรพิเศษ \n เพื่อขึ้นบรรทัดใหม่</div>
<span style="color: #696969;" class="mycode_color"><br />
โดยทั่วไปโปรแกรม Ren'Py จะมองเว้นวรรคที่อยู่ติดกันเป็นเว้นวรรคเดียว ถ้าต้องการเว้นวรรคหลายครั้ง ต้องนำหน้าเว้นวรรคด้วยเครื่องหมาย \ ต่อเว้นวรรคหนึ่งครั้ง เพื่อให้โปรแกรม Ren'Py มองแยกเป็นหลายเว้นวรรค การแสดงเครื่องหมาย [ และ { ให้ใส่เครื่องหมายนั้นสองตัวติดกันเป็น [[ และ {{ แต่เครื่องหมาย ] และ } สามารถใส่ได้โดยตรง ไม่ต้องใส่ซ้ำสองตัว<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)</span></span><br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter03.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter03.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 2 เริ่มต้นกับ Ren'Py]]></title>
			<link>https://irpg.in.th/thread-3394.html</link>
			<pubDate>Tue, 16 Jul 2019 23:43:54 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3394.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">นักสร้างเกมหลายคนอยากสร้างเกมแรกเร็ว ๆ ผู้เขียนจึงพยายามยัดพื้นฐานการสร้างเกมด้วย Ren'Py ภายในบทเดียว เมื่ออ่านบทนี้จนจบผู้อ่านจะสามารถสร้างเกมอย่างง่ายด้วยโปรแกรม Ren'Py ได้ ในบทนี้เราจะเรียนกันเรื่องการสร้างโปรเจ็กต์ใหม่ การทดสอบเกม การแสดงคำพูด การแสดงรูปพื้นหลัง การแสดงรูปตัวละคร และการใส่คอมเมนต์<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">สร้างโปรเจ็กต์ใหม่ และทดสอบเกม</span></span><br />
<br />
หัวข้อนี้จะเรียนการสร้างโปรเจ็กต์เกมใหม่และการทดสอบเกม สาเหตุที่นำสองอย่างนี้มารวมในหัวข้อเดียวกันเพราะเป็นสิ่งที่ต้องใช้โปรแกรม Ren'Py จริง นอกจากนั้นจะเป็นการใส่คำสั่งด้วยโปรแกรมประเภท Text Editor นี่ฟังดูแปลก ถึงจะบอกว่าเป็นการสร้างเกมด้วยโปรแกรม Ren'Py แต่ส่วนใหญ่กลับไม่ได้ใช้โปรแกรม Ren'Py ในการสร้างเกม</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-0ITmJpK17X4/XSUIh5ecfsI/AAAAAAAAAXw/WM2OQuhCO-M__Pdii0kIHjNErnUsfXUrwCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 2.1 หน้าต่างโปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">การสร้างโปรเจ็กต์ใหม่</span></span><br />
<br />
1. คลิก <span style="font-style: italic;" class="mycode_i">Create New Project</span> ด้านซ้ายของโปรแกรม (ดูรูปที่ 2.1)<br />
2. โปรแกรมจะแสดงข้อความ Information ให้คลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
3. ตั้งชื่อโปรเจ็กต์ (ตัวอักษรอังกฤษหรือตัวเลขเท่านั้น) จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
4. เลือกขนาดหน้าต่างเกม แนะนำให้เลือกขนาด 1280 x 720 จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
5. เลือกสีหลักของเกม การแสดงแบบเต็มจอหรือหน้าต่าง และความเร็วตัวอักษรในเกม จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span></span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-QG-xJp_IXAs/XSUMHcnhXhI/AAAAAAAAAYE/CzXaXHx41pQ5l9pUyWS9lwhyoh9S2X-QACLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 2.2 เลือกสีและตั้งค่าได้ตามใจชอบ</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter02.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter02.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">นักสร้างเกมหลายคนอยากสร้างเกมแรกเร็ว ๆ ผู้เขียนจึงพยายามยัดพื้นฐานการสร้างเกมด้วย Ren'Py ภายในบทเดียว เมื่ออ่านบทนี้จนจบผู้อ่านจะสามารถสร้างเกมอย่างง่ายด้วยโปรแกรม Ren'Py ได้ ในบทนี้เราจะเรียนกันเรื่องการสร้างโปรเจ็กต์ใหม่ การทดสอบเกม การแสดงคำพูด การแสดงรูปพื้นหลัง การแสดงรูปตัวละคร และการใส่คอมเมนต์<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">สร้างโปรเจ็กต์ใหม่ และทดสอบเกม</span></span><br />
<br />
หัวข้อนี้จะเรียนการสร้างโปรเจ็กต์เกมใหม่และการทดสอบเกม สาเหตุที่นำสองอย่างนี้มารวมในหัวข้อเดียวกันเพราะเป็นสิ่งที่ต้องใช้โปรแกรม Ren'Py จริง นอกจากนั้นจะเป็นการใส่คำสั่งด้วยโปรแกรมประเภท Text Editor นี่ฟังดูแปลก ถึงจะบอกว่าเป็นการสร้างเกมด้วยโปรแกรม Ren'Py แต่ส่วนใหญ่กลับไม่ได้ใช้โปรแกรม Ren'Py ในการสร้างเกม</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-0ITmJpK17X4/XSUIh5ecfsI/AAAAAAAAAXw/WM2OQuhCO-M__Pdii0kIHjNErnUsfXUrwCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 2.1 หน้าต่างโปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">การสร้างโปรเจ็กต์ใหม่</span></span><br />
<br />
1. คลิก <span style="font-style: italic;" class="mycode_i">Create New Project</span> ด้านซ้ายของโปรแกรม (ดูรูปที่ 2.1)<br />
2. โปรแกรมจะแสดงข้อความ Information ให้คลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
3. ตั้งชื่อโปรเจ็กต์ (ตัวอักษรอังกฤษหรือตัวเลขเท่านั้น) จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
4. เลือกขนาดหน้าต่างเกม แนะนำให้เลือกขนาด 1280 x 720 จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span><br />
5. เลือกสีหลักของเกม การแสดงแบบเต็มจอหรือหน้าต่าง และความเร็วตัวอักษรในเกม จากนั้นคลิก <span style="font-style: italic;" class="mycode_i">Continue</span></span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-QG-xJp_IXAs/XSUMHcnhXhI/AAAAAAAAAYE/CzXaXHx41pQ5l9pUyWS9lwhyoh9S2X-QACLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 2.2 เลือกสีและตั้งค่าได้ตามใจชอบ</div>
<span style="color: #696969;" class="mycode_color"><br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 35% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter02.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter02.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ren'Py พื้นฐาน | บทที่ 1 สร้างเกม Visual Novel ด้วย Ren'Py]]></title>
			<link>https://irpg.in.th/thread-3393.html</link>
			<pubDate>Tue, 09 Jul 2019 06:45:45 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=4093">Mikichan</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-3393.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เกมแนว Visual Novel หรือที่คุ้นเคยว่าเกมจีบสาว/เกมจีบหนุ่มเป็นเกมอีกแนวที่ได้รับความนิยม ตัวเกมแนว Visual Novel สร้างง่ายกว่าเกมแนวอื่น เพียงแค่ใส่ภาพ เสียง และตัวอักษรก็ได้เป็นเกมแล้ว จริง ๆ แล้วเกม Visual Novel ไม่จำเป็นต้องเป็นเกมจีบสาวหรือเกมจีบหนุ่มเท่านั้น แนวคิดของเกม Visual Novel คือนิยายที่นำเสนอออกมาเป็นภาพให้ผู้อ่านเข้าใจเนื้อเรื่องได้ จะเป็นนิยายต่อสู้ แฟนตาซี หรือว่าอะไรก็ได้ เพียงแค่นิยายจีบสาวหรือจีบหนุ่มได้รับความนิยมสร้างเป็นเกม Visual Novel มากกว่าเนื้อเรื่องแบบอื่นเท่านั้นเอง<br />
<br />
บทความ "Ren'Py พื้นฐาน" ชุดนี้จะสอนสร้างเกมแนว Visual Novel ด้วยโปรแกรมเกมเอนจิน Ren'Py ผู้เขียนแนะนำให้ใช้โปรแกรม Ren'Py เนื่องจากเป็นโปรแกรมฟรี คุณภาพดี ได้รับความนิยม และมีเกม Visual Novel หลายเกมที่สร้างด้วยโปรแกรม Ren'Py ส่วนโปรแกรมเกมเอนจินตัวอื่นที่เสียเงินซื้อผู้เขียนลองดูแล้วสามารถสร้างเกม Visual Novel ได้ไม่แตกต่างจากเกมที่สร้างด้วย Ren'Py นักเท่าไร คงเป็นเพราะเกมแนว Visual Novel ไม่ได้มีลูกเล่นอะไรมากอยู่แล้ว ดังนั้นผู้เขียนจึงแนะนำให้ใช้โปรแกรม Ren'Py ซึ่งเป็นโปรแกรมฟรีจะดีกว่า</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-3abwJYrT2jw/XSOIEGmrcnI/AAAAAAAAAVc/rd_BywdKLWkkjMRK0IBTjL4bkTQ_VBq4gCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 1.1 เกมแนว Visual Novel ที่สร้างด้วยโปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
<span style="font-weight: bold;" class="mycode_b">บทความที่เกี่ยวข้อง</span><br />
<a href="https://planila.blogspot.com/2017/04/2-game-engine.html" target="_blank" rel="noopener" class="mycode_url">เกมเอนจิน (Game Engine) คืออะไร?</a><br />
<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">แนะนำโปรแกรม Ren'Py</span></span><br />
<br />
Ren'Py คือโปรแกรมเกมเอนจินสำหรับสร้างเกมแนว Visual Novel (VN) วิธีสร้างเกมด้วยโปรแกรม Ren'Py คือการใส่คำสั่ง (Code) ลงในไฟล์สคริปต์ของเกมด้วยโปรแกรมประเภท Text Editor (เช่น Notepad) จากนั้นจึงแปลคำสั่ง (Compile) ด้วยโปรแกรม Ren'Py เพื่อให้ได้ออกมาเป็นเกม<br />
<br />
โปรแกรม Ren'Py แตกต่างจากโปรแกรมเกมเอนจินสำหรับสร้าง Visual Novel ตัวอื่นตรงที่ต้องใช้งานคู่กับโปรแกรมอื่น (ซึ่งหมายถึง Text Editor) ไม่ได้สร้างเกมด้วยการคลิกปุ่มต่าง ๆ จนออกมาเป็นเกม ส่วนนี้อาจทำให้นักสร้างเกมที่ไม่ชอบการเขียนโปรแกรมไม่ชอบโปรแกรมนี้ แต่ไม่ต้องกังวลไป ถ้าเทียบกับการเขียนโปรแกรมอย่าง Java หรือ Visual Basic แล้ว คำสั่งของโปรแกรม Ren'Py นั้นเข้าใจง่ายและเรียนรู้ง่ายกว่ากันเยอะเลย ผู้เขียนได้เลือกโปรแกรมมาให้เหมาะสำหรับนักสร้างเกมมือใหม่แล้ว</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-CDCWHH592jk/XSOOaQXIB9I/AAAAAAAAAVw/wVFk5uAZMTYDJvvudHikQHVkM1k9UvrLACLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 1.2 โปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
หน้าต่างของโปรแกรม Ren'Py นั้นไม่มีอะไรมาก โปรแกรมมีลักษณะดังรูปที่ 1.2 ฝั่งซ้ายของโปรแกรมคือส่วนจัดการโปรเจ็กต์เกม เช่น สร้างโปรเจ็กต์ใหม่ หรือเปิดโปรเจ็กต์เดิม ฝั่งขวาคือส่วนจัดการไฟล์ต่าง ๆ ของเกม รวมถึงเครื่องมือต่าง ๆ ในการพัฒนาเกม ปุ่ม <span style="font-style: italic;" class="mycode_i">Launch Project</span> ด้านล่างขวาคือปุ่มที่ใช้สำหรับทดสอบเกม ด้านล่างเป็นส่วนข้อมูลต่าง ๆ ของโปรแกรม Ren'Py<br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter01.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter01.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="color: #ff6633;" class="mycode_color">ติดตามเราได้ที่ <a href="https://www.facebook.com/PlanilaGameDeveloper" target="_blank" rel="noopener" class="mycode_url">Facebook ชื่อเพจ Planila Game Developer</a></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เกมแนว Visual Novel หรือที่คุ้นเคยว่าเกมจีบสาว/เกมจีบหนุ่มเป็นเกมอีกแนวที่ได้รับความนิยม ตัวเกมแนว Visual Novel สร้างง่ายกว่าเกมแนวอื่น เพียงแค่ใส่ภาพ เสียง และตัวอักษรก็ได้เป็นเกมแล้ว จริง ๆ แล้วเกม Visual Novel ไม่จำเป็นต้องเป็นเกมจีบสาวหรือเกมจีบหนุ่มเท่านั้น แนวคิดของเกม Visual Novel คือนิยายที่นำเสนอออกมาเป็นภาพให้ผู้อ่านเข้าใจเนื้อเรื่องได้ จะเป็นนิยายต่อสู้ แฟนตาซี หรือว่าอะไรก็ได้ เพียงแค่นิยายจีบสาวหรือจีบหนุ่มได้รับความนิยมสร้างเป็นเกม Visual Novel มากกว่าเนื้อเรื่องแบบอื่นเท่านั้นเอง<br />
<br />
บทความ "Ren'Py พื้นฐาน" ชุดนี้จะสอนสร้างเกมแนว Visual Novel ด้วยโปรแกรมเกมเอนจิน Ren'Py ผู้เขียนแนะนำให้ใช้โปรแกรม Ren'Py เนื่องจากเป็นโปรแกรมฟรี คุณภาพดี ได้รับความนิยม และมีเกม Visual Novel หลายเกมที่สร้างด้วยโปรแกรม Ren'Py ส่วนโปรแกรมเกมเอนจินตัวอื่นที่เสียเงินซื้อผู้เขียนลองดูแล้วสามารถสร้างเกม Visual Novel ได้ไม่แตกต่างจากเกมที่สร้างด้วย Ren'Py นักเท่าไร คงเป็นเพราะเกมแนว Visual Novel ไม่ได้มีลูกเล่นอะไรมากอยู่แล้ว ดังนั้นผู้เขียนจึงแนะนำให้ใช้โปรแกรม Ren'Py ซึ่งเป็นโปรแกรมฟรีจะดีกว่า</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-3abwJYrT2jw/XSOIEGmrcnI/AAAAAAAAAVc/rd_BywdKLWkkjMRK0IBTjL4bkTQ_VBq4gCLcBGAs/s640/01.png" loading="lazy"  alt="[Image: 01.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 1.1 เกมแนว Visual Novel ที่สร้างด้วยโปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
<span style="font-weight: bold;" class="mycode_b">บทความที่เกี่ยวข้อง</span><br />
<a href="https://planila.blogspot.com/2017/04/2-game-engine.html" target="_blank" rel="noopener" class="mycode_url">เกมเอนจิน (Game Engine) คืออะไร?</a><br />
<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">แนะนำโปรแกรม Ren'Py</span></span><br />
<br />
Ren'Py คือโปรแกรมเกมเอนจินสำหรับสร้างเกมแนว Visual Novel (VN) วิธีสร้างเกมด้วยโปรแกรม Ren'Py คือการใส่คำสั่ง (Code) ลงในไฟล์สคริปต์ของเกมด้วยโปรแกรมประเภท Text Editor (เช่น Notepad) จากนั้นจึงแปลคำสั่ง (Compile) ด้วยโปรแกรม Ren'Py เพื่อให้ได้ออกมาเป็นเกม<br />
<br />
โปรแกรม Ren'Py แตกต่างจากโปรแกรมเกมเอนจินสำหรับสร้าง Visual Novel ตัวอื่นตรงที่ต้องใช้งานคู่กับโปรแกรมอื่น (ซึ่งหมายถึง Text Editor) ไม่ได้สร้างเกมด้วยการคลิกปุ่มต่าง ๆ จนออกมาเป็นเกม ส่วนนี้อาจทำให้นักสร้างเกมที่ไม่ชอบการเขียนโปรแกรมไม่ชอบโปรแกรมนี้ แต่ไม่ต้องกังวลไป ถ้าเทียบกับการเขียนโปรแกรมอย่าง Java หรือ Visual Basic แล้ว คำสั่งของโปรแกรม Ren'Py นั้นเข้าใจง่ายและเรียนรู้ง่ายกว่ากันเยอะเลย ผู้เขียนได้เลือกโปรแกรมมาให้เหมาะสำหรับนักสร้างเกมมือใหม่แล้ว</span><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://1.bp.blogspot.com/-CDCWHH592jk/XSOOaQXIB9I/AAAAAAAAAVw/wVFk5uAZMTYDJvvudHikQHVkM1k9UvrLACLcBGAs/s640/02.png" loading="lazy"  alt="[Image: 02.png]" class="mycode_img" /></div>
<div style="text-align: center;" class="mycode_align">รูปที่ 1.2 โปรแกรม Ren'Py</div>
<span style="color: #696969;" class="mycode_color"><br />
หน้าต่างของโปรแกรม Ren'Py นั้นไม่มีอะไรมาก โปรแกรมมีลักษณะดังรูปที่ 1.2 ฝั่งซ้ายของโปรแกรมคือส่วนจัดการโปรเจ็กต์เกม เช่น สร้างโปรเจ็กต์ใหม่ หรือเปิดโปรเจ็กต์เดิม ฝั่งขวาคือส่วนจัดการไฟล์ต่าง ๆ ของเกม รวมถึงเครื่องมือต่าง ๆ ในการพัฒนาเกม ปุ่ม <span style="font-style: italic;" class="mycode_i">Launch Project</span> ด้านล่างขวาคือปุ่มที่ใช้สำหรับทดสอบเกม ด้านล่างเป็นส่วนข้อมูลต่าง ๆ ของโปรแกรม Ren'Py<br />
<br />
<br />
......<br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">นี่เพิ่งแค่ 39% ของบทความนี้เท่านั้น บทความฉบับเต็มมีเยอะกว่านี้อีก!</span></span></span><br />
<br />
<br />
<span style="color: #696969;" class="mycode_color">เนื่องจากติดปัญหาเรื่องนโยบายการเผยแพร่บทความ ทำให้เราไม่สามารถเผยแพร่บทความฉบับเต็มลงในเว็บนี้ได้ อ่านฉบับเต็มได้ที่บทความต้นฉบับ (ไม่มีค่าใช้จ่าย)</span><br />
<br />
<span style="color: #ff6633;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">บทความต้นฉบับ</span> <a href="https://planila.blogspot.com/2019/07/renpy-chapter01.html" target="_blank" rel="noopener" class="mycode_url">https://planila.blogspot.com/2019/07/ren...ter01.html</a></span></span><br />
<br />
<a href="https://planila.blogspot.com" target="_blank" rel="noopener" class="mycode_url"><img src="https://1.bp.blogspot.com/-_c9ZVu7xIrY/XTENAwClQsI/AAAAAAAAAcQ/0-BqKQzGcPsYp9iSfpf1VfFizjZqVv-swCLcBGAs/s1600/%25E0%25B8%259A%25E0%25B8%2597%25E0%25B8%2584%25E0%25B8%25A7%25E0%25B8%25B2%25E0%25B8%25A1%25E0%25B8%2599%25E0%25B8%25B5%25E0%25B9%2589%25E0%25B8%2596%25E0%25B8%25B9%25E0%25B8%2581%25E0%25B8%2588%25E0%25B8%25B3%25E0%25B8%2581%25E0%25B8%25B1%25E0%25B8%2594%25E0%25B8%2581%25E0%25B8%25B2%25E0%25B8%25A3%25E0%25B9%2580%25E0%25B8%259C%25E0%25B8%25A2%25E0%25B9%2581%25E0%25B8%259E%25E0%25B8%25A3%25E0%25B9%2588.png" loading="lazy"  alt="[Image: %25E0%25B8%259A%25E0%25B8%2597%25E0%25B8...9%2588.png]" class="mycode_img" /></a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[มีปัญหาในการใช้ครับ]]></title>
			<link>https://irpg.in.th/thread-2277.html</link>
			<pubDate>Wed, 11 Mar 2015 22:13:20 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=1896">superowas</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-2277.html</guid>
			<description><![CDATA[ตอนผมติดตั้ง jedit ใหม่อีกรอบหลังerror ผมคลิกเข้าไปแก้สคริปไม่ได้อ่ะครับ คลิกรัวแล้วรอก็ยังไม่ขึ้นจนงงว่ามีปัญหาอะไรรึเปล่าอ่ะครับ<br />
<a href="http://imgur.com/6Cg2knQ" target="_blank" rel="noopener" class="mycode_url"><img src="http://i.imgur.com/6Cg2knQ.png" loading="lazy"  alt="[Image: 6Cg2knQ.png]" class="mycode_img" /></a><br />
<br />
ในจุดที่วงไว้ผมคลิกเข้าไปเพื่อจะไปแก้สคริปครับ แต่ผลคือกดแล้วไม่ขึ้นครับ<br />
ผมเลยลองคลิกอีกหลายๆรอบ แต่สุดท้ายก็ไม่ขึ้น แบบนี้ให้ทำยังไงเหรอครับ]]></description>
			<content:encoded><![CDATA[ตอนผมติดตั้ง jedit ใหม่อีกรอบหลังerror ผมคลิกเข้าไปแก้สคริปไม่ได้อ่ะครับ คลิกรัวแล้วรอก็ยังไม่ขึ้นจนงงว่ามีปัญหาอะไรรึเปล่าอ่ะครับ<br />
<a href="http://imgur.com/6Cg2knQ" target="_blank" rel="noopener" class="mycode_url"><img src="http://i.imgur.com/6Cg2knQ.png" loading="lazy"  alt="[Image: 6Cg2knQ.png]" class="mycode_img" /></a><br />
<br />
ในจุดที่วงไว้ผมคลิกเข้าไปเพื่อจะไปแก้สคริปครับ แต่ผลคือกดแล้วไม่ขึ้นครับ<br />
ผมเลยลองคลิกอีกหลายๆรอบ แต่สุดท้ายก็ไม่ขึ้น แบบนี้ให้ทำยังไงเหรอครับ]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[ renpy ] มีคำถามสอบถามครับ รบกวนหน่อยครับ]]></title>
			<link>https://irpg.in.th/thread-1797.html</link>
			<pubDate>Mon, 21 Apr 2014 00:56:21 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=1270">jin</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1797.html</guid>
			<description><![CDATA[เกี่ยวกับคำสั่งต่างๆ ใน Renpy<br />
<br />
ถ้าต้องการให้มีตัวละคร2ตัว ใน 1 ฉาก ต้องกำหนดจุดตัวละครอย่างไร <br />
เช่นต้องการให้ a1 อยู่ด้านซ้ายของฉาก ฟ2 อยู่ด้านขวาของฉาก<br />
<br />
<a href="http://upic.me/show/50648801" target="_blank" rel="noopener" class="mycode_url"><img src="http://upic.me/i/v4/0newcanvas.png" loading="lazy"  alt="[Image: 0newcanvas.png]" class="mycode_img" /></a><br />
<br />
ถ้าต้องการให้ แบ็คกราว เคลื่อนต้องใช้คำสั่งอย่างไร เช่นฉากเดิน <br />
<br />
การสร้างตัวเลือกตอบคำถาม ต้องใช้คำสั่งใด <br />
เช่นสร้างตัวเลือก3-4ข้อ แล้่วตอบคำถาม<br />
<br />
รบกวนผู้ที่รู้ ช่วยตอบคำถามผมทีครับ ขอบคุณมากๆครับผม]]></description>
			<content:encoded><![CDATA[เกี่ยวกับคำสั่งต่างๆ ใน Renpy<br />
<br />
ถ้าต้องการให้มีตัวละคร2ตัว ใน 1 ฉาก ต้องกำหนดจุดตัวละครอย่างไร <br />
เช่นต้องการให้ a1 อยู่ด้านซ้ายของฉาก ฟ2 อยู่ด้านขวาของฉาก<br />
<br />
<a href="http://upic.me/show/50648801" target="_blank" rel="noopener" class="mycode_url"><img src="http://upic.me/i/v4/0newcanvas.png" loading="lazy"  alt="[Image: 0newcanvas.png]" class="mycode_img" /></a><br />
<br />
ถ้าต้องการให้ แบ็คกราว เคลื่อนต้องใช้คำสั่งอย่างไร เช่นฉากเดิน <br />
<br />
การสร้างตัวเลือกตอบคำถาม ต้องใช้คำสั่งใด <br />
เช่นสร้างตัวเลือก3-4ข้อ แล้่วตอบคำถาม<br />
<br />
รบกวนผู้ที่รู้ ช่วยตอบคำถามผมทีครับ ขอบคุณมากๆครับผม]]></content:encoded>
		</item>
	</channel>
</rss>