<?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 - The Great Ren'Py Library]]></title>
		<link>https://irpg.in.th/</link>
		<description><![CDATA[irpg Community - https://irpg.in.th]]></description>
		<pubDate>Thu, 30 Apr 2026 13:57:23 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[(RenPy6.99) แม่แบบเมนูภาษาไทย]]></title>
			<link>https://irpg.in.th/thread-2700.html</link>
			<pubDate>Mon, 21 Dec 2015 23:44:50 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=3578">hobbit2008</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-2700.html</guid>
			<description><![CDATA[<!-- 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="PNG Image" style="height: 16px; width: 16px" border="0" alt=".png" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=391" target="_blank" title="">Noname01.png</a> (Size: <span class="text-dark">339.3 KB</span> Downloads: <span class="text-dark">31)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><!-- 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="PNG Image" style="height: 16px; width: 16px" border="0" alt=".png" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=392" target="_blank" title="">Noname02.png</a> (Size: <span class="text-dark">69.11 KB</span> Downloads: <span class="text-dark">45)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
เป็นแม่แบบเมนูภาษาไทยนะครับและมีเมนูย่อยการเปลี่ยนภาษาสำรองไว้ให้ด้วย<br />
ผมแปลได้ไม่หมดแต่ก็น่าจะช่วยเพื่อนๆผู้เริ่มต้นได้บ้าง<br />
<a href="http://www.4shared.com/rar/cu0ukLr5ba/thai.html" target="_blank" rel="noopener" class="mycode_url">(โหลดที่นี่)</a><br />
เมื่อโหลดเสร็จให้แตกไฟล์ไปไว้ที่ renpy-6.99.7-sdk&gt;templates นะครับ]]></description>
			<content:encoded><![CDATA[<!-- 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="PNG Image" style="height: 16px; width: 16px" border="0" alt=".png" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=391" target="_blank" title="">Noname01.png</a> (Size: <span class="text-dark">339.3 KB</span> Downloads: <span class="text-dark">31)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><!-- 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="PNG Image" style="height: 16px; width: 16px" border="0" alt=".png" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=392" target="_blank" title="">Noname02.png</a> (Size: <span class="text-dark">69.11 KB</span> Downloads: <span class="text-dark">45)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment --><br />
เป็นแม่แบบเมนูภาษาไทยนะครับและมีเมนูย่อยการเปลี่ยนภาษาสำรองไว้ให้ด้วย<br />
ผมแปลได้ไม่หมดแต่ก็น่าจะช่วยเพื่อนๆผู้เริ่มต้นได้บ้าง<br />
<a href="http://www.4shared.com/rar/cu0ukLr5ba/thai.html" target="_blank" rel="noopener" class="mycode_url">(โหลดที่นี่)</a><br />
เมื่อโหลดเสร็จให้แตกไฟล์ไปไว้ที่ renpy-6.99.7-sdk&gt;templates นะครับ]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Ren'Py] ระบบต่อสู้จากเกม Guardian Tales - The Behind of Light]]></title>
			<link>https://irpg.in.th/thread-2002.html</link>
			<pubDate>Mon, 07 Jul 2014 10:45:38 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=1277">dreamknight</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-2002.html</guid>
			<description><![CDATA[;3<br />
<br />
สวัสดีครับทุกท่าน พอดีมีผู้สนใจวิธีการทำระบบสู้ในเกม Guardian Tales - The Behind of Light แล้วระบบก็ไม่ได้ยากอะไร ผมก็เลยจะมาอธิบายวิธีเขียนให้ทุกท่านที่สนใจอ่านกันครับ<br />
<br />
แปะมู้เกมกันเสียเล็กน้อย <a href="http://irpg.in.th/thread-1642.html" target="_blank" rel="noopener" class="mycode_url">http://irpg.in.th/thread-1642.html</a> <img src="https://i.imgur.com/FdBMCEl.png" alt="Y me gusta mucho" title="Y me gusta mucho" class="smilie smilie_162" /> <br />
<br />
ขอออกตัวก่อนว่าอันที่จริงผมไม่ได้คิดเองหมด ผมประยุกต์เอาเสียมากกว่า ทุกท่านที่ได้ศึกษา Renpy มาคงได้เข้าไปศึกษาที่เว็บ thaigraph กันใช่ไหมครับ ผมก็เอามาจากที่นั้นแหละ แหะๆ ยังไงก็ขอขอบคุณท่าน NOOKFUFU2 จาก thaigraph ที่มีบทความดีๆ ให้ผมได้ศึกษาครับ ;w;<br />
<br />
ช่วงที่พัฒนาขึ้นมานั้น ผมมีเวลาสร้างเกมจำกัดอาจจะเขียนระบบไว้ไม่ดีนัก ทุกท่านก็ลองเอาไปประยุกต์ให้ดีขึ้นแล้วกันครับ <img src="http://irpg.in.th/images/smilies/irpg/_mr.gif" alt="แมวร้อง" title="แมวร้อง" class="smilie smilie_22" /><br />
<br />
พูดเยอะไปและ เข้าเรื่องดีกว่า. . . อาโน. . พูดเรื่องไรก่อนดีอ่ะ // โดนถีบ <img src="http://i.imgur.com/8BRLEJQ.gif" alt="Sparta #1" title="Sparta #1" class="smilie smilie_94" /><br />
<br />
<br />
<span style="color: #32CD32;" class="mycode_color"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">หลอดพลังของตัวละคร</span></span></span><br />
หลอดพลังของทั้งของตัวเอกและของมอน ผมประยุกต์มาจากบทความนี้ครับ <a href="http://www.thaigraph.com/thread-2561-1-2.html" target="_blank" rel="noopener" class="mycode_url">วิธีทำ label Fight RPG</a> <br />
<br />
แต่ในเกมผมจะเอาแค่หลอดพลังเท่านั้น ก็เอาแต่ ui.bar มาใช้ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>init:<br />
&nbsp;&nbsp;&nbsp;&nbsp;python hide:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def score_honor():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if show_score:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui.bar(max_score_honor, score_honor,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmaximum=312,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ymaximum=35,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left_bar=Frame("honorgate_full.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right_bar=Frame("honorgate_empty.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb=None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb_shadow=None)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.overlay_functions.append(score_honor)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def mon_hp():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if show_mon:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui.bar(mon_max_hp, mon_hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmaximum=312,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ymaximum=21,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left_bar=Frame("mongate_full.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right_bar=Frame("mongate_empty.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb=None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb_shadow=None)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.overlay_functions.append(mon_hp)</code></div></div><br />
นำ code ด้านบน วางไว้ในไฟล์ .rpy ไฟล์ใดก็ได้ แต่ต้องไม่อยู่ภายใน label screen หรือ init python ใดๆ ส่วนของผมวางไว้ล่างสุดของไฟล์ options.rpy ส่วนรูปหลอดพลังให้หาหรือสร้างเอาเองนะครับ <br />
<br />
ui.bar() เป็นฟังก์ชันสร้าง bar ของ Renpy  <a href="http://www.renpy.org/wiki/renpy/doc/reference/functions/ui.bar" target="_blank" rel="noopener" class="mycode_url">รายละเอียด คลิ๊ก</a> <br />
<br />
และมีตัวแปรควบคุมการซ่อน/แสดง หลอดพลังด้วย show_score, show_mon<br />
<br />
<span style="font-weight: bold;" class="mycode_b">วิธีใช้</span><br />
ที่ไฟล์ script.rpy ประการตัวแปร max_hp และ hp ณ ปัจจุบัน สำหรับใช้ใน ui.bar เอาไว้บนสุดของไฟล์ หรือที่เดียวกับตัวแปรพวกตัวละคร(Character) และตัวแปร show_score, show_mon เป็น false เพื่อซ่อนไว้ ไม่ให้เห็นตั้งแต่เริ่มเกม (เวลาแสดงก็แค่เขียน &#36; show_score = True เวลาซ่อนก็เขียน &#36; show_score = False)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; show_score = False<br />
&#36; show_mon = False<br />
&#36; max_score_honor = 100<br />
&#36; score_honor = 0 <br />
&#36; mon_max_hp = 100<br />
&#36; mon_hp = 0</code></div></div><br />
จะลดพลังของมอน ก็เขียน &#36; mon_hp -= 5 หรือจะเพิ่มพลังก็เขียน &#36; mon_hp += 5 ลงไป (&#36; mon_hp -= 5 กับ &#36; mon_hp = &#36; mon_hp - 5 มีความหมายเดียวกัน)<br />
<span style="color: #FF0000;" class="mycode_color">*เกมของผมพระเอกไม่ได้มีหลอดพลัง แต่เป็นแต้มเพิ่มไปเรื่อยๆ จนถึง ค่า max</span><br />
<br />
<br />
<span style="color: #32CD32;" class="mycode_color"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">ระบบสู้</span></span></span><br />
ตัวอย่าง code ระบบสู้ภายในเกม พร้อมเขียนอธิบายไว้ในบรรทัด<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; show_score = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_mon = True&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_max_hp = 100&nbsp;&nbsp;# เลือดทั้งหมดของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = 100 # เลือด ณ ปัจจุบันของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; actor_attack_point&nbsp;&nbsp;= 1.0 # พลังโจมตีของตัวเอก<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; actor_cri_point&nbsp;&nbsp;= 2.0 # พลังโจมตีติดคริของตัวเอก<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_attack_point&nbsp;&nbsp;= 5 # พลังโจมตีของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_cri_point&nbsp;&nbsp;= 9 # พลังโจมตีติดคริของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;speaker "FIGHT !!"&nbsp;&nbsp;# โชว์ข้อความก่อนเข้าลูปสู้<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while mon_hp &gt; 0:&nbsp;&nbsp;# วนลูปไปเรื่อยๆ จนกว่าพลังมอนจะเหลือ 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = False # ซ่อนหลอดพลังไว้หรือไม่อยากซ่อนก็เอาออกไป<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if miss: # อันนี้เขียนเงื่อนไขดักไว้กรณีเรากดปุ่ม HIT ไม่ทันหรือกดไม่โดน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call expression renpy.random.choice(["mon_hit", "mon_cri"])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# call expression เป็นการใช้เรียกใช้เหตุการณ์ ซึ่งจะไม่เหมือน jump ตรงที่หลังจากจบเหตุการณ์ที่เรียกมาใช้แล้ว จะกลับมารันเหตุการณ์เดิมต่อไป ซึ่งถ้าเป็น jump พอไปอีกเหตุการณ์หนึ่ง ก็จะจบเกมทันที <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# renpy.random.choice() ฟังก์ชั่นแรนดอมของ Renpy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show screen btnHit(renpy.random.randint(1, 10))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# เข้า screen btnHit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# renpy.random.randint() เป็นฟังก์ชั่นแรนดอมตัวเลขของ Renpy ในที่นี้แรนดอมเลข 1 ถึง 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show wyvern_pic at center<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with Pause(1.0) # หยุดรอให้เวลาเรากดปุ่ม Hit ที่นี่ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide screen btnHit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if hit == False: # เข้าเงื่อนไขถ้าผู้เล่นกด Hit ไม่ทันหรือกดไม่โดน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/dragonsnarl.mp3"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wyvern "! ! ! ! ! ! ! !"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop sound fadeout 0.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;# End while&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = True&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;wyvern ". . . . . . . . . . . . . . ."</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">การทำปุ่ม Hit</span><br />
ปุ่ม Hit หรือ Critical ผมเขียนคล้ายฟังก์ชั่นเอาไว้ ให้ง่ายต่อการใช้ <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>screen btnHit(damage):&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if damage &lt;= 7: # เงื่อนไขถ้าน้อยกว่าหรือเท่ากับ 7 ให้โชว์ปุ่ม Hit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbox:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area (renpy.random.randint(10, 650), renpy.random.randint(10, 300), 1.0, 75)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imagebutton:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idle "hit_damage.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hover "hit_damage_hover.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action ui.callsinnewcontext("actor_hit")<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbox:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area (renpy.random.randint(15, 650), renpy.random.randint(10, 300), 1.0, 75)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imagebutton:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idle "menu/cri_damage.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hover "menu/cri_damage_hover.png"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action ui.callsinnewcontext("actor_cri")&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
label actor_hit:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with wflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/attack3.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = mon_hp - actor_attack_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor += actor_attack_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
<br />
label actor_cri:<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with wflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/battle3.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = mon_hp - actor_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor += actor_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return</code></div></div><br />
ui.callsinnewcontext() เอาไว้เรียกใช้ฟังก์ชั่น(เป็น Label) อีกทีหนึ่ง <a href="http://www.renpy.org/wiki/renpy/doc/reference/functions/ui.callsinnewcontext" target="_blank" rel="noopener" class="mycode_url">รายละเอียด คลิ๊ก</a><br />
<br />
ส่วน code การโจมตีของมอน ก็เขียนเป็น label แยกไว้แบบตีธรรมดากับตีคริ ตรงนี้ผมไม่อธิบายแล้วกันฮะ เพราะน่าจะเข้าใจกัน<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label mon_hit:<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with rflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/damage4.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if score_honor &gt;= 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = score_honor - mon_attack_point&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = 1&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
 <br />
label mon_cri: <br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with rflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/battle1.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if score_honor &gt;= 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = score_honor - mon_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = 1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return</code></div></div><br />
การเขียนระบบสู้ของผมก็มีเพียงเท่านี้ครับ ลองประยุกต์กันดูนะครับ <img src="https://i.imgur.com/t8Hw0Kr.gif" alt="ตายแปป" title="ตายแปป" class="smilie smilie_145" />. .]]></description>
			<content:encoded><![CDATA[;3<br />
<br />
สวัสดีครับทุกท่าน พอดีมีผู้สนใจวิธีการทำระบบสู้ในเกม Guardian Tales - The Behind of Light แล้วระบบก็ไม่ได้ยากอะไร ผมก็เลยจะมาอธิบายวิธีเขียนให้ทุกท่านที่สนใจอ่านกันครับ<br />
<br />
แปะมู้เกมกันเสียเล็กน้อย <a href="http://irpg.in.th/thread-1642.html" target="_blank" rel="noopener" class="mycode_url">http://irpg.in.th/thread-1642.html</a> <img src="https://i.imgur.com/FdBMCEl.png" alt="Y me gusta mucho" title="Y me gusta mucho" class="smilie smilie_162" /> <br />
<br />
ขอออกตัวก่อนว่าอันที่จริงผมไม่ได้คิดเองหมด ผมประยุกต์เอาเสียมากกว่า ทุกท่านที่ได้ศึกษา Renpy มาคงได้เข้าไปศึกษาที่เว็บ thaigraph กันใช่ไหมครับ ผมก็เอามาจากที่นั้นแหละ แหะๆ ยังไงก็ขอขอบคุณท่าน NOOKFUFU2 จาก thaigraph ที่มีบทความดีๆ ให้ผมได้ศึกษาครับ ;w;<br />
<br />
ช่วงที่พัฒนาขึ้นมานั้น ผมมีเวลาสร้างเกมจำกัดอาจจะเขียนระบบไว้ไม่ดีนัก ทุกท่านก็ลองเอาไปประยุกต์ให้ดีขึ้นแล้วกันครับ <img src="http://irpg.in.th/images/smilies/irpg/_mr.gif" alt="แมวร้อง" title="แมวร้อง" class="smilie smilie_22" /><br />
<br />
พูดเยอะไปและ เข้าเรื่องดีกว่า. . . อาโน. . พูดเรื่องไรก่อนดีอ่ะ // โดนถีบ <img src="http://i.imgur.com/8BRLEJQ.gif" alt="Sparta #1" title="Sparta #1" class="smilie smilie_94" /><br />
<br />
<br />
<span style="color: #32CD32;" class="mycode_color"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">หลอดพลังของตัวละคร</span></span></span><br />
หลอดพลังของทั้งของตัวเอกและของมอน ผมประยุกต์มาจากบทความนี้ครับ <a href="http://www.thaigraph.com/thread-2561-1-2.html" target="_blank" rel="noopener" class="mycode_url">วิธีทำ label Fight RPG</a> <br />
<br />
แต่ในเกมผมจะเอาแค่หลอดพลังเท่านั้น ก็เอาแต่ ui.bar มาใช้ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>init:<br />
&nbsp;&nbsp;&nbsp;&nbsp;python hide:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def score_honor():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if show_score:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui.bar(max_score_honor, score_honor,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmaximum=312,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ymaximum=35,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left_bar=Frame("honorgate_full.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right_bar=Frame("honorgate_empty.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb=None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb_shadow=None)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.overlay_functions.append(score_honor)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def mon_hp():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if show_mon:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui.bar(mon_max_hp, mon_hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmaximum=312,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ymaximum=21,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left_bar=Frame("mongate_full.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right_bar=Frame("mongate_empty.png", 0, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb=None,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thumb_shadow=None)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.overlay_functions.append(mon_hp)</code></div></div><br />
นำ code ด้านบน วางไว้ในไฟล์ .rpy ไฟล์ใดก็ได้ แต่ต้องไม่อยู่ภายใน label screen หรือ init python ใดๆ ส่วนของผมวางไว้ล่างสุดของไฟล์ options.rpy ส่วนรูปหลอดพลังให้หาหรือสร้างเอาเองนะครับ <br />
<br />
ui.bar() เป็นฟังก์ชันสร้าง bar ของ Renpy  <a href="http://www.renpy.org/wiki/renpy/doc/reference/functions/ui.bar" target="_blank" rel="noopener" class="mycode_url">รายละเอียด คลิ๊ก</a> <br />
<br />
และมีตัวแปรควบคุมการซ่อน/แสดง หลอดพลังด้วย show_score, show_mon<br />
<br />
<span style="font-weight: bold;" class="mycode_b">วิธีใช้</span><br />
ที่ไฟล์ script.rpy ประการตัวแปร max_hp และ hp ณ ปัจจุบัน สำหรับใช้ใน ui.bar เอาไว้บนสุดของไฟล์ หรือที่เดียวกับตัวแปรพวกตัวละคร(Character) และตัวแปร show_score, show_mon เป็น false เพื่อซ่อนไว้ ไม่ให้เห็นตั้งแต่เริ่มเกม (เวลาแสดงก็แค่เขียน &#36; show_score = True เวลาซ่อนก็เขียน &#36; show_score = False)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; show_score = False<br />
&#36; show_mon = False<br />
&#36; max_score_honor = 100<br />
&#36; score_honor = 0 <br />
&#36; mon_max_hp = 100<br />
&#36; mon_hp = 0</code></div></div><br />
จะลดพลังของมอน ก็เขียน &#36; mon_hp -= 5 หรือจะเพิ่มพลังก็เขียน &#36; mon_hp += 5 ลงไป (&#36; mon_hp -= 5 กับ &#36; mon_hp = &#36; mon_hp - 5 มีความหมายเดียวกัน)<br />
<span style="color: #FF0000;" class="mycode_color">*เกมของผมพระเอกไม่ได้มีหลอดพลัง แต่เป็นแต้มเพิ่มไปเรื่อยๆ จนถึง ค่า max</span><br />
<br />
<br />
<span style="color: #32CD32;" class="mycode_color"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">ระบบสู้</span></span></span><br />
ตัวอย่าง code ระบบสู้ภายในเกม พร้อมเขียนอธิบายไว้ในบรรทัด<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; show_score = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_mon = True&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_max_hp = 100&nbsp;&nbsp;# เลือดทั้งหมดของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = 100 # เลือด ณ ปัจจุบันของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; actor_attack_point&nbsp;&nbsp;= 1.0 # พลังโจมตีของตัวเอก<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; actor_cri_point&nbsp;&nbsp;= 2.0 # พลังโจมตีติดคริของตัวเอก<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_attack_point&nbsp;&nbsp;= 5 # พลังโจมตีของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_cri_point&nbsp;&nbsp;= 9 # พลังโจมตีติดคริของมอน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;speaker "FIGHT !!"&nbsp;&nbsp;# โชว์ข้อความก่อนเข้าลูปสู้<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while mon_hp &gt; 0:&nbsp;&nbsp;# วนลูปไปเรื่อยๆ จนกว่าพลังมอนจะเหลือ 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = False # ซ่อนหลอดพลังไว้หรือไม่อยากซ่อนก็เอาออกไป<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if miss: # อันนี้เขียนเงื่อนไขดักไว้กรณีเรากดปุ่ม HIT ไม่ทันหรือกดไม่โดน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call expression renpy.random.choice(["mon_hit", "mon_cri"])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# call expression เป็นการใช้เรียกใช้เหตุการณ์ ซึ่งจะไม่เหมือน jump ตรงที่หลังจากจบเหตุการณ์ที่เรียกมาใช้แล้ว จะกลับมารันเหตุการณ์เดิมต่อไป ซึ่งถ้าเป็น jump พอไปอีกเหตุการณ์หนึ่ง ก็จะจบเกมทันที <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# renpy.random.choice() ฟังก์ชั่นแรนดอมของ Renpy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = False<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show screen btnHit(renpy.random.randint(1, 10))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# เข้า screen btnHit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# renpy.random.randint() เป็นฟังก์ชั่นแรนดอมตัวเลขของ Renpy ในที่นี้แรนดอมเลข 1 ถึง 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show wyvern_pic at center<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with Pause(1.0) # หยุดรอให้เวลาเรากดปุ่ม Hit ที่นี่ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide screen btnHit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if hit == False: # เข้าเงื่อนไขถ้าผู้เล่นกด Hit ไม่ทันหรือกดไม่โดน<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/dragonsnarl.mp3"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wyvern "! ! ! ! ! ! ! !"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop sound fadeout 0.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; miss = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;# End while&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; show_score = True&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;wyvern ". . . . . . . . . . . . . . ."</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">การทำปุ่ม Hit</span><br />
ปุ่ม Hit หรือ Critical ผมเขียนคล้ายฟังก์ชั่นเอาไว้ ให้ง่ายต่อการใช้ <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>screen btnHit(damage):&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if damage &lt;= 7: # เงื่อนไขถ้าน้อยกว่าหรือเท่ากับ 7 ให้โชว์ปุ่ม Hit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbox:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area (renpy.random.randint(10, 650), renpy.random.randint(10, 300), 1.0, 75)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imagebutton:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idle "hit_damage.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hover "hit_damage_hover.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action ui.callsinnewcontext("actor_hit")<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbox:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area (renpy.random.randint(15, 650), renpy.random.randint(10, 300), 1.0, 75)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imagebutton:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idle "menu/cri_damage.png"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hover "menu/cri_damage_hover.png"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action ui.callsinnewcontext("actor_cri")&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
label actor_hit:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with wflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/attack3.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = mon_hp - actor_attack_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor += actor_attack_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
<br />
label actor_cri:<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with wflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/battle3.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; mon_hp = mon_hp - actor_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor += actor_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return</code></div></div><br />
ui.callsinnewcontext() เอาไว้เรียกใช้ฟังก์ชั่น(เป็น Label) อีกทีหนึ่ง <a href="http://www.renpy.org/wiki/renpy/doc/reference/functions/ui.callsinnewcontext" target="_blank" rel="noopener" class="mycode_url">รายละเอียด คลิ๊ก</a><br />
<br />
ส่วน code การโจมตีของมอน ก็เขียนเป็น label แยกไว้แบบตีธรรมดากับตีคริ ตรงนี้ผมไม่อธิบายแล้วกันฮะ เพราะน่าจะเข้าใจกัน<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label mon_hit:<br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with rflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/damage4.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if score_honor &gt;= 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = score_honor - mon_attack_point&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = 1&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
 <br />
label mon_cri: <br />
&nbsp;&nbsp;&nbsp;&nbsp;show bg_blank with rflash<br />
&nbsp;&nbsp;&nbsp;&nbsp;with sshake<br />
&nbsp;&nbsp;&nbsp;&nbsp;play sound "sound/battle1.ogg"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if score_honor &gt;= 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = score_honor - mon_cri_point<br />
&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; score_honor = 1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; hit = True<br />
&nbsp;&nbsp;&nbsp;&nbsp;return</code></div></div><br />
การเขียนระบบสู้ของผมก็มีเพียงเท่านี้ครับ ลองประยุกต์กันดูนะครับ <img src="https://i.imgur.com/t8Hw0Kr.gif" alt="ตายแปป" title="ตายแปป" class="smilie smilie_145" />. .]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[การทำภาพเคลื่อนไหวทีละเฟรม]]></title>
			<link>https://irpg.in.th/thread-1944.html</link>
			<pubDate>Sun, 08 Jun 2014 21:43:33 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=243">Nazuth</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1944.html</guid>
			<description><![CDATA[ในกระทู้นี้จะสอนทำภาพเคลื่อนไหวแบบอนิเมทกันให้เราเตรียมภาพที่จะใช้ไว้ให้พร้อมครับยิ่งใช้ภาพเคลื่อนไหวหลายเฟรมจะทำให้การเคลื่อนไหวเนียนขึ้นตัวอย่างนี้ผมจะใช้แค่สามเฟรม<br />
<br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">ตัวอย่างโค้ดที่ใช้</span></span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image alisa:<br />
&nbsp;&nbsp; "alisa1.png"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "alisa2.png"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "alisa3.png"<br />
&nbsp;&nbsp; repeat</code></div></div><br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">อธิบายโค้ด</span></span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image (ชื่อตัวแปร):<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; pause .25 *คำสั่งรอเวลา 1.0 คือ 1 วินาที<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; repeat คำสั่งให้เคลื่อนไหวซ้ำ</code></div></div><br />
ถ้าำจะกำหนดจำนวนครั้งของการเคลื่อนไหวก้สามารถนำจำนวนที่ต้องการไปใส่ไว้หลัง repeat ได้<br />
<br />
ถ้าจะให้เคลื่อนไหวครั้งเดียวก็ไม่ต้องใส่ repeat <br />
<br />
สามารถประยุกต์ใช้ได้หลายอย่างครับจะให้ตัวละครเคลื่อนไหวหรือฉากเคลื่อนไหวหรือทำพวกฝน เมฆ หมอก ก็ยังได้ แต่ถ้าจะทำเมฆหรือหมอกเคลื่อนไหวแนวนอนให้ไปดูบทความเคลื่อนย้ายตำแหน่งภาพดีกว่าครับ<br />
<br />
<br />
<br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">ตัวอย่างภาพเคลื่อนไหวจากการใช้คำสั่งจะออกมาประมาณนี้</span></span><br />
<img src="http://i.imgur.com/XXKqURr.gif" loading="lazy"  alt="[Image: XXKqURr.gif]" class="mycode_img" /><br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">ขอสงวนบทความไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></description>
			<content:encoded><![CDATA[ในกระทู้นี้จะสอนทำภาพเคลื่อนไหวแบบอนิเมทกันให้เราเตรียมภาพที่จะใช้ไว้ให้พร้อมครับยิ่งใช้ภาพเคลื่อนไหวหลายเฟรมจะทำให้การเคลื่อนไหวเนียนขึ้นตัวอย่างนี้ผมจะใช้แค่สามเฟรม<br />
<br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">ตัวอย่างโค้ดที่ใช้</span></span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image alisa:<br />
&nbsp;&nbsp; "alisa1.png"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "alisa2.png"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "alisa3.png"<br />
&nbsp;&nbsp; repeat</code></div></div><br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">อธิบายโค้ด</span></span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image (ชื่อตัวแปร):<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; pause .25 *คำสั่งรอเวลา 1.0 คือ 1 วินาที<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; pause .25<br />
&nbsp;&nbsp; "(ชื่อภาพ.สกุลไฟล์)"<br />
&nbsp;&nbsp; repeat คำสั่งให้เคลื่อนไหวซ้ำ</code></div></div><br />
ถ้าำจะกำหนดจำนวนครั้งของการเคลื่อนไหวก้สามารถนำจำนวนที่ต้องการไปใส่ไว้หลัง repeat ได้<br />
<br />
ถ้าจะให้เคลื่อนไหวครั้งเดียวก็ไม่ต้องใส่ repeat <br />
<br />
สามารถประยุกต์ใช้ได้หลายอย่างครับจะให้ตัวละครเคลื่อนไหวหรือฉากเคลื่อนไหวหรือทำพวกฝน เมฆ หมอก ก็ยังได้ แต่ถ้าจะทำเมฆหรือหมอกเคลื่อนไหวแนวนอนให้ไปดูบทความเคลื่อนย้ายตำแหน่งภาพดีกว่าครับ<br />
<br />
<br />
<br />
<span style="color: #0000CD;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">ตัวอย่างภาพเคลื่อนไหวจากการใช้คำสั่งจะออกมาประมาณนี้</span></span><br />
<img src="http://i.imgur.com/XXKqURr.gif" loading="lazy"  alt="[Image: XXKqURr.gif]" class="mycode_img" /><br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">ขอสงวนบทความไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[การทำระบบตั้งชื่อตัวละครอย่างง่าย (Name Input)]]></title>
			<link>https://irpg.in.th/thread-1913.html</link>
			<pubDate>Sun, 25 May 2014 18:08:29 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=1684">Rocette</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1913.html</guid>
			<description><![CDATA[สำหรับ Visual Novel แนว Simulator <br />
เพื่อสร้างอารมณ์ร่วมในการสวมบทบาท หลายๆเกมส์มักจะมอบโอกาสให้ผู้เล่นตั้งชื่อตัวละครเองได้<br />
ฉะนั้น เราก็จะเห็นตัวละครสาวน่ารักเรียกชื่อเราเช่น "นายจะบ้าเหรอ! 'สมศักดิ์' อย่าได้เข้าใจผิดเชียวนะ!" เป็นต้น<br />
<br />
วันนี้เราจะมาสอนวิธีการทำแบบนั้นใน <span style="color: #FF1493;" class="mycode_color">Ren'Py</span> โปรแกรมVN Engineยอดนิยมกัน <img src="https://i.imgur.com/bIwnLLW.gif" alt="ไฮโซ" title="ไฮโซ" class="smilie smilie_148" /><br />
<br />
ก่อนอื่นก็เปิดไฟล์<span style="color: #C71585;" class="mycode_color">script.rpy</span>ขึ้นมา ด้วยโปรแกรมอะไรก็ได้ตามสะดวก ส่วนของผมใช้ jedit ล่ะ<br />
<br />
จากนั้น ก็เริ่มต้นด้วยการ <span style="color: #4682B4;" class="mycode_color">define</span> ตัวละครขึ้นมาก่อน ให้มาเริ่มที่ส่วนประกาศ เหนือ label start<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#การประกาศตัวแปรชื่อ สามารถเปลี่ยน m กับ my_name ได้ตามใจชอบ<br />
define m = DynamicCharacter('my_name', color="#ff0100")</code></div></div>แล้วก็เขียนโค้ดดังนี้ลงไปในส่วนของตัวเกมส์<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label start:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;#การตั้งชื่อตัวละคร my_name สามารถเปลี่ยนได้ตามใจชอบ คุณอาจจะเลือกคำอื่นๆเช่น player แทนตัวแปรได้ ทั้งนี้จะต้องเป็นคำเดียวกันกับคำที่คุณประกาศตัวแปรไว้ก่อนหน้านี้นะ<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name = renpy.input("โปรดตั้งชื่อตัวละครของคุณ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name = my_name.strip()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;#ส่วนตรงนี้ ในกรณีที่ผู้เล่นไม่ใส่ชื่อตัวละคร เราจะตั้งชื่อตัวละครแบบdefaultไว้ด้วย <br />
&nbsp;&nbsp;&nbsp;&nbsp;if my_name == "":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name="สมศักดิ์"</code></div></div><br />
เสร็จแล้วครับ ไม่ยากเลยใช่ไหม ทีนี้คำว่า my_name ทุกคำในเกมส์ของคุณก็จะใช้แทนชื่อตัวละครหลักไปตลอด<br />
เวลาจะใช้ในเกมส์ก็ให้ทำอย่างนี้<br />
<br />
    <div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>m "ผมชื่อ %(my_name)s!"</code></div></div><br />
พอลองเริ่มเกมส์มา ตัวละครที่คุณ <span style="color: #4682B4;" class="mycode_color">define</span> ไว้ คือ m = my name ก็จะพูดว่า "ผมชื่อ สมศักดิ์!"<br />
<br />
วิธีตั้งชื่อนี้สามารถใช้กับตัวแปรอะไรก็ได้ตามต้องการนะครับ หากคุณอยากให้ผู้เล่นตั้งชื่อแมว ชื่อหมา ชื่อแฟน ชื่อพ่อแม่ ก็ให้ประกาศตัวแปรอีกอันแทน my_name แล้วทำตามแบบวิธีข้างต้นโดยเปลี่ยน my_name เป็นตัวแปรอื่นตามใจชอบได้เลย<br />
<br />
เอาละ! Lesson Complete<br />
หวังว่าบทความนี้คงจะประโยชน์ให้แก่ผู้สนใจเอนจิ้นเรนปี้ไม่มากก็น้อยนะครับ <img src="https://i.imgur.com/0FR0YsQ.gif" alt="ร้องไห้หนักมาก" title="ร้องไห้หนักมาก" class="smilie smilie_150" /><br />
<br />
โอกาสหน้าพบกันใหม่ เมี้ยว]]></description>
			<content:encoded><![CDATA[สำหรับ Visual Novel แนว Simulator <br />
เพื่อสร้างอารมณ์ร่วมในการสวมบทบาท หลายๆเกมส์มักจะมอบโอกาสให้ผู้เล่นตั้งชื่อตัวละครเองได้<br />
ฉะนั้น เราก็จะเห็นตัวละครสาวน่ารักเรียกชื่อเราเช่น "นายจะบ้าเหรอ! 'สมศักดิ์' อย่าได้เข้าใจผิดเชียวนะ!" เป็นต้น<br />
<br />
วันนี้เราจะมาสอนวิธีการทำแบบนั้นใน <span style="color: #FF1493;" class="mycode_color">Ren'Py</span> โปรแกรมVN Engineยอดนิยมกัน <img src="https://i.imgur.com/bIwnLLW.gif" alt="ไฮโซ" title="ไฮโซ" class="smilie smilie_148" /><br />
<br />
ก่อนอื่นก็เปิดไฟล์<span style="color: #C71585;" class="mycode_color">script.rpy</span>ขึ้นมา ด้วยโปรแกรมอะไรก็ได้ตามสะดวก ส่วนของผมใช้ jedit ล่ะ<br />
<br />
จากนั้น ก็เริ่มต้นด้วยการ <span style="color: #4682B4;" class="mycode_color">define</span> ตัวละครขึ้นมาก่อน ให้มาเริ่มที่ส่วนประกาศ เหนือ label start<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#การประกาศตัวแปรชื่อ สามารถเปลี่ยน m กับ my_name ได้ตามใจชอบ<br />
define m = DynamicCharacter('my_name', color="#ff0100")</code></div></div>แล้วก็เขียนโค้ดดังนี้ลงไปในส่วนของตัวเกมส์<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>label start:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;#การตั้งชื่อตัวละคร my_name สามารถเปลี่ยนได้ตามใจชอบ คุณอาจจะเลือกคำอื่นๆเช่น player แทนตัวแปรได้ ทั้งนี้จะต้องเป็นคำเดียวกันกับคำที่คุณประกาศตัวแปรไว้ก่อนหน้านี้นะ<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name = renpy.input("โปรดตั้งชื่อตัวละครของคุณ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name = my_name.strip()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;#ส่วนตรงนี้ ในกรณีที่ผู้เล่นไม่ใส่ชื่อตัวละคร เราจะตั้งชื่อตัวละครแบบdefaultไว้ด้วย <br />
&nbsp;&nbsp;&nbsp;&nbsp;if my_name == "":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36; my_name="สมศักดิ์"</code></div></div><br />
เสร็จแล้วครับ ไม่ยากเลยใช่ไหม ทีนี้คำว่า my_name ทุกคำในเกมส์ของคุณก็จะใช้แทนชื่อตัวละครหลักไปตลอด<br />
เวลาจะใช้ในเกมส์ก็ให้ทำอย่างนี้<br />
<br />
    <div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>m "ผมชื่อ %(my_name)s!"</code></div></div><br />
พอลองเริ่มเกมส์มา ตัวละครที่คุณ <span style="color: #4682B4;" class="mycode_color">define</span> ไว้ คือ m = my name ก็จะพูดว่า "ผมชื่อ สมศักดิ์!"<br />
<br />
วิธีตั้งชื่อนี้สามารถใช้กับตัวแปรอะไรก็ได้ตามต้องการนะครับ หากคุณอยากให้ผู้เล่นตั้งชื่อแมว ชื่อหมา ชื่อแฟน ชื่อพ่อแม่ ก็ให้ประกาศตัวแปรอีกอันแทน my_name แล้วทำตามแบบวิธีข้างต้นโดยเปลี่ยน my_name เป็นตัวแปรอื่นตามใจชอบได้เลย<br />
<br />
เอาละ! Lesson Complete<br />
หวังว่าบทความนี้คงจะประโยชน์ให้แก่ผู้สนใจเอนจิ้นเรนปี้ไม่มากก็น้อยนะครับ <img src="https://i.imgur.com/0FR0YsQ.gif" alt="ร้องไห้หนักมาก" title="ร้องไห้หนักมาก" class="smilie smilie_150" /><br />
<br />
โอกาสหน้าพบกันใหม่ เมี้ยว]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[สำหรับคนที่ขี้เกียจdefineภาพทีละภาพ]]></title>
			<link>https://irpg.in.th/thread-1912.html</link>
			<pubDate>Sun, 25 May 2014 14:07:10 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=248">Kuruni</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1912.html</guid>
			<description><![CDATA[ตามปกติแล้ว เราต้องนั่งพิมพ์ทีละบรรทัด<br />
<br />
ตัวอย่าง<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image maid nor = "maid_nor.png"<br />
image maid dark = "maid_dark.png"<br />
image maid full = "maid_full.png"</code></div></div><br />
(สามภาพ หน้าคุณเมดธรรมดา หน้าคุณเมดมืดมน แล้วก็ภาพคุณเมดเต็มตัว)<br />
ถ้าเกมเรามีภาพน้อยๆก็ว่าไป แต่ถ้ามีเป็นร้อยภาพก็เสียเวลาน่าดู วิธีการง่ายๆก็คือ เอาโค้ดนี้ไปแปะไว้ท้ายไฟล์ options.rpy ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>config.automatic_images = '_'</code></div></div><br />
(อย่าลืมเคาะสเปซบาร์สี่ครั้งก่อนนะ)<br />
<br />
คำสั่งนี้จะทำให้ Ren'py define ภาพตามชื่อไฟล์เอง (ไม่รวมนามสกุล) โดยที่ _ ในชื่อไฟล์จะกลายเป็นเว้นวรรคแทน อย่างในตัวอย่างข้างต้นนั้นก็ได้ผลแบบเดียวกันโดยไม่ต้องเสียเวลาพิมพ์เลยสักบรรทัด อย่างมากก็แค่เสียเวลาเปลี่ยนชื่อไฟล์ก่อนเอามาใช้เท่านั้น (ยังไม่ได้ลองเอง แต่เท่าที่รู้ Ren'py มันเห็นแค่ไฟล์ .jpg กับ .png เท่านั้นน่ะนะ ใครใช้.gif หรืออื่นๆอาจจะไม่ได้ผล)]]></description>
			<content:encoded><![CDATA[ตามปกติแล้ว เราต้องนั่งพิมพ์ทีละบรรทัด<br />
<br />
ตัวอย่าง<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>image maid nor = "maid_nor.png"<br />
image maid dark = "maid_dark.png"<br />
image maid full = "maid_full.png"</code></div></div><br />
(สามภาพ หน้าคุณเมดธรรมดา หน้าคุณเมดมืดมน แล้วก็ภาพคุณเมดเต็มตัว)<br />
ถ้าเกมเรามีภาพน้อยๆก็ว่าไป แต่ถ้ามีเป็นร้อยภาพก็เสียเวลาน่าดู วิธีการง่ายๆก็คือ เอาโค้ดนี้ไปแปะไว้ท้ายไฟล์ options.rpy ครับ<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>config.automatic_images = '_'</code></div></div><br />
(อย่าลืมเคาะสเปซบาร์สี่ครั้งก่อนนะ)<br />
<br />
คำสั่งนี้จะทำให้ Ren'py define ภาพตามชื่อไฟล์เอง (ไม่รวมนามสกุล) โดยที่ _ ในชื่อไฟล์จะกลายเป็นเว้นวรรคแทน อย่างในตัวอย่างข้างต้นนั้นก็ได้ผลแบบเดียวกันโดยไม่ต้องเสียเวลาพิมพ์เลยสักบรรทัด อย่างมากก็แค่เสียเวลาเปลี่ยนชื่อไฟล์ก่อนเอามาใช้เท่านั้น (ยังไม่ได้ลองเอง แต่เท่าที่รู้ Ren'py มันเห็นแค่ไฟล์ .jpg กับ .png เท่านั้นน่ะนะ ใครใช้.gif หรืออื่นๆอาจจะไม่ได้ผล)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[การพิมพ์บทสนทนาและเพิ่มตัวละคร]]></title>
			<link>https://irpg.in.th/thread-1910.html</link>
			<pubDate>Sat, 24 May 2014 15:55:42 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=243">Nazuth</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1910.html</guid>
			<description><![CDATA[หัวข้อนี้ไม่ยากแต่ถือเป็นหัวใจสำคัญของVNเลยก็ว่าได้ซึ่งต้องใช้เวลาทำในส่วนนี้มากที่สุดมาดูวิธีกันเลยครับ<br />
<br />
ก่อนอื่นจะพิมพ์บทสนทนาต้องประกา่ศตัวแปรชื่อตัวละครก่อน เช่น<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; Neoz = Character('นีออส', color="FFA500")</code></div></div><br />
อธิบายโค้ด<br />
Neoz = เป็นชื่อตัวแปรตัวละครครับตั้งชื่อให้จำได้ง่ายและสะดวก <br />
นีออส = ชื่อในวงเล็บเป็นชื่อที่จะแสดงในเกมครับ<br />
FFA500 = โค้ดสีหาได้จากโฟโต้ช็อปหรือเสิร์ชดูตามเว็บ<br />
<br />
<span style="color: #FF0000;" class="mycode_color">*ให้ประกาศตัวแปรไว้ก่อนบรรทัด label start:</span><br />
<br />
วิธีการพิมพ์บทสนทนาหลังจากเขียนชื่อตัวแปรที่เป็นตัวละครแล้วต้องใช้ "" ครอบหน้าหลังของคำพูดตามตัวอย่างเลยครับ<br />
<br />
<span style="color: #FFA500;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Neoz</span></span> "แค่กๆๆ ดันโบรุ"<br />
<br />
ต่อไปจะเป็นส่วนประกอบของการพิมพ์บทสนทนาที่เราอาจต้องใช้ในเกมนะครับ<br />
<br />
เครื่องหมายคำพูดให้พิมพ์ \"ประโยค\"<br />
ตัวหนา {b}ประโยค{/b}<br />
ตัวเอียง {i}ประโยค{/i}<br />
ขีดเส้นใต้ {s}ประโยค{/s}<br />
กำหนดขนาดใหม่ {size==20}ประโยค{/size}<br />
หยุดตัวอักษร {w}<br />
หยุดตัวอักษรแบบขึ้นบรรทัดใหม่เลย {p}<br />
กำหนดสีใหม่ {color=FFA500}ประโยค{/color}<br />
<br />
ต้องพิมพ์ครอบประโยคทีี่ต้องการให้แสดงผลนะครับ<br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">สงวนบทความนี้ไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></description>
			<content:encoded><![CDATA[หัวข้อนี้ไม่ยากแต่ถือเป็นหัวใจสำคัญของVNเลยก็ว่าได้ซึ่งต้องใช้เวลาทำในส่วนนี้มากที่สุดมาดูวิธีกันเลยครับ<br />
<br />
ก่อนอื่นจะพิมพ์บทสนทนาต้องประกา่ศตัวแปรชื่อตัวละครก่อน เช่น<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; Neoz = Character('นีออส', color="FFA500")</code></div></div><br />
อธิบายโค้ด<br />
Neoz = เป็นชื่อตัวแปรตัวละครครับตั้งชื่อให้จำได้ง่ายและสะดวก <br />
นีออส = ชื่อในวงเล็บเป็นชื่อที่จะแสดงในเกมครับ<br />
FFA500 = โค้ดสีหาได้จากโฟโต้ช็อปหรือเสิร์ชดูตามเว็บ<br />
<br />
<span style="color: #FF0000;" class="mycode_color">*ให้ประกาศตัวแปรไว้ก่อนบรรทัด label start:</span><br />
<br />
วิธีการพิมพ์บทสนทนาหลังจากเขียนชื่อตัวแปรที่เป็นตัวละครแล้วต้องใช้ "" ครอบหน้าหลังของคำพูดตามตัวอย่างเลยครับ<br />
<br />
<span style="color: #FFA500;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Neoz</span></span> "แค่กๆๆ ดันโบรุ"<br />
<br />
ต่อไปจะเป็นส่วนประกอบของการพิมพ์บทสนทนาที่เราอาจต้องใช้ในเกมนะครับ<br />
<br />
เครื่องหมายคำพูดให้พิมพ์ \"ประโยค\"<br />
ตัวหนา {b}ประโยค{/b}<br />
ตัวเอียง {i}ประโยค{/i}<br />
ขีดเส้นใต้ {s}ประโยค{/s}<br />
กำหนดขนาดใหม่ {size==20}ประโยค{/size}<br />
หยุดตัวอักษร {w}<br />
หยุดตัวอักษรแบบขึ้นบรรทัดใหม่เลย {p}<br />
กำหนดสีใหม่ {color=FFA500}ประโยค{/color}<br />
<br />
ต้องพิมพ์ครอบประโยคทีี่ต้องการให้แสดงผลนะครับ<br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">สงวนบทความนี้ไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[การทำให้ภาพเคลื่อนที่จากตำแหน่งหนึ่งไปอีกตำแหน่ง]]></title>
			<link>https://irpg.in.th/thread-1902.html</link>
			<pubDate>Wed, 21 May 2014 18:52:16 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=243">Nazuth</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1902.html</guid>
			<description><![CDATA[หัวข้อนี้หมายถึงการเคลื่อนที่ภาพจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่งไม่ใช่การทำอนิเมทแบบให้ภาพกระพริบตาหรือการทำให้ภาพเคลื่อนไหวเป็นเฟรม<br />
<br />
ตัวอย่างโค้ด<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>transform fly:&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xpos 300 ypos 182 (ตำแหน่งตั้งต้นของภาพ)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 1.0 ypos 170<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 1.0 ypos 182<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeat</code></div></div><br />
อธิบายโค้ด<br />
ตรงคำว่า fly เป็นชื่อตัวแปรให้ใส่อะไรก็ได้<br />
xpos คือค่าพิกัดแกนx(แนวนอน)อ้างอิงเป็นพิกเซล<br />
ypos คือค่าพิกัดแกนy(แนวตั้ง)อ้างอิงเป็นพิกเซล<br />
หากจะให้อ้างอิงจากขนาดจอก็ใช้ xaligh,yaligh แทนได้ครับ ตั้งค่าตั้งแต่ 0 - 1.0<br />
 <br />
linear คือความเร็วในการเคลื่อนที่ยิ่งเยอะยิ่งช้า <br />
หลังคำสั่ง linear ให้ใส่พิกัดที่อยากให้เปลี่ยนแปลงไปด้วยครับ<br />
อาจใช้คำสั่ง pause ให้หยุดรอจังหวะสักพักแทรกไปก็ได้<br />
ส่วน repeat ล่างสุดคือให้มันวนลูปซ้ำไปเรื่อยๆถ้าอยากให้มันเปลี่ยนแปลงตำแหน่งครั้งเดียวก็ไม่ต้องใส่ครับ<br />
<br />
ตัวอย่างการแสดงผลจากคำสั่งนี้ (ในตัวอย่างมีการใช้อนิเมชั่นให้ภาพเป็นเฟรมด้วย)<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/e6waiz4kPsM" frameborder="0" allowfullscreen="true"></iframe><br />
(แอบโฆษณาเกมตัวเอง)<br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">สงวนบทความนี้ไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></description>
			<content:encoded><![CDATA[หัวข้อนี้หมายถึงการเคลื่อนที่ภาพจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่งไม่ใช่การทำอนิเมทแบบให้ภาพกระพริบตาหรือการทำให้ภาพเคลื่อนไหวเป็นเฟรม<br />
<br />
ตัวอย่างโค้ด<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>transform fly:&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xpos 300 ypos 182 (ตำแหน่งตั้งต้นของภาพ)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 1.0 ypos 170<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 1.0 ypos 182<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeat</code></div></div><br />
อธิบายโค้ด<br />
ตรงคำว่า fly เป็นชื่อตัวแปรให้ใส่อะไรก็ได้<br />
xpos คือค่าพิกัดแกนx(แนวนอน)อ้างอิงเป็นพิกเซล<br />
ypos คือค่าพิกัดแกนy(แนวตั้ง)อ้างอิงเป็นพิกเซล<br />
หากจะให้อ้างอิงจากขนาดจอก็ใช้ xaligh,yaligh แทนได้ครับ ตั้งค่าตั้งแต่ 0 - 1.0<br />
 <br />
linear คือความเร็วในการเคลื่อนที่ยิ่งเยอะยิ่งช้า <br />
หลังคำสั่ง linear ให้ใส่พิกัดที่อยากให้เปลี่ยนแปลงไปด้วยครับ<br />
อาจใช้คำสั่ง pause ให้หยุดรอจังหวะสักพักแทรกไปก็ได้<br />
ส่วน repeat ล่างสุดคือให้มันวนลูปซ้ำไปเรื่อยๆถ้าอยากให้มันเปลี่ยนแปลงตำแหน่งครั้งเดียวก็ไม่ต้องใส่ครับ<br />
<br />
ตัวอย่างการแสดงผลจากคำสั่งนี้ (ในตัวอย่างมีการใช้อนิเมชั่นให้ภาพเป็นเฟรมด้วย)<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/e6waiz4kPsM" frameborder="0" allowfullscreen="true"></iframe><br />
(แอบโฆษณาเกมตัวเอง)<br />
<br />
<br />
<span style="color: #FF0000;" class="mycode_color">สงวนบทความนี้ไม่อนุญาตให้นำไปเผยแพร่ที่อื่นโดยไม่ได้รับอนุญาต</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[แถบจำกัดเวลาเลือกตอบ Renpy]]></title>
			<link>https://irpg.in.th/thread-1901.html</link>
			<pubDate>Wed, 21 May 2014 18:15:59 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=101">XthemeCore</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1901.html</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>##############################################################################<br />
# Timer<br />
#<br />
# :ใช้สำหรับคำถามเลือกตอบที่ต้องการจับเวลาเหมือนในเกม Walking Dead หรือ Wolf Among Us<br />
<br />
transform alpha_dissolve:<br />
&nbsp;&nbsp;&nbsp;&nbsp;alpha 0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;linear 0.5 alpha 1.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;on hide:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 0.5 alpha 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;# ส่วนนี้ใช้ในงาน Fade In และ Fade Out ของแถบจับเวลา เรียกใช้เพียง 1 ครั้ง<br />
<br />
screen countdown:<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer time repeat False action [Hide('countdown'), Jump(timer_jump)]<br />
<br />
# xmaximum คือความกว้างสูงสุดของแถบ ,right_bar คือภาพของแถบด้านขวา , left_bar คือภาพของแถบด้านซ้าย , thumb คือภาพหัวลูกศรที่ใช้ลากแถบ (ในที่นี้ไม่่ได้ใส่ไว้เลยเป็น None )<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bar value AnimatedValue(0, time, time, time) xmaximum 300 xalign 0.70910 yalign 0.05 right_bar "graphics/ui/timed_right_empty.png" left_bar "graphics/ui/timed_full.png"&nbsp;&nbsp;thumb None<br />
<br />
<br />
# ปกติแถบจะเปลี่ยนจากด้านซ้ายไปขวา (จะลดหรือเพิ่มขึ้นอยู่กับรูปด้วย) ถ้าต้องการให้กลับด้านกัน ใช้ bar_invert ดังด้านล่างนี้<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bar value AnimatedValue(0, time, time, time) xmaximum 300 xalign 0.30115 yalign 0.05 bar_invert True right_bar "graphics/ui/timed_full.png"&nbsp;&nbsp;left_bar "graphics/ui/timed_left_empty.png" thumb None</code></div></div><br />
จากตัวอย่างนี้ถ้าลองรันดูจะพบว่า แถบเวลาจะเริ่มจากปลายสุดของแต่ละด้านล้วมาบรรจบที่ตรงกลาง (ตามรูปประกอบด้านล่างนี้)<br />
<br />
ลองเอาไปประยุกต์ใช้ดูนะครับ (ผมอธิบายไม่ค่อยเก่ง)<br />
ไฟล์รูปจะอยู่ในไฟล์แนบนะครับ<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #FF0000;" class="mycode_color"><span style="text-decoration: underline;" class="mycode_u">วิธีใช้</span></span><br />
1).แตกไฟล์ zip แล้วนำไปวางในโฟลเดอร์เกมของท่าน<br />
2).นำ Code ด้านบน วางไว้ในไฟล์ .rpy ไฟล์ใดก็ได้ แต่ต้องไม่อยู่ภายใน label screen หรือ init python ใดๆ<br />
(ผมวางไว้ใน screens.rpy ด้านบนสุด)<br />
3).เวลาใช้ ใช้ใน label ทีเราเขียนเนื้อเรื่อง โดยการวาง code นี้ก่อนขึ้นคำสั่งแสดงตัวเลือก<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># time คือเวลาที่ต้องการ , timer_jump คือ ข้ามไป label ชื่อ noanswer หากว่าเวลาหมดก่อนที่ผู้เล่นจะเลือกตอบคำถาม<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; time = 15<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; timer_jump = 'noanswer'<br />
&nbsp;&nbsp;&nbsp;&nbsp;show screen countdown</code></div></div><br />
4).ในตัวเลือกทุกตัวเลือกต้องมีคำสั่ง hide screen countdown<br />
ขึ้นก่อนเสมอ เมื่อปิดแถบจับเวลานี้ไป<br />
5).เท่านี้ก็ได้แถบจับเวลาแล้ว </span><br />
<br />
ตัวอย่างแถบจับเวลา (ถือโอกาสโฆษณานิดๆ &gt;w&lt;)<br />
<br />
<img src="https://dl.dropboxusercontent.com/u/54427785/wa.jpg" loading="lazy"  alt="[Image: wa.jpg]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
ขอบคุณครับ แล้วพบกันใหม่โอกาสหน้าสวัสดี &gt;w&lt;<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/zip.gif" title="ZIP File" style="height: 16px; width: 16px" border="0" alt=".zip" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=232" target="_blank" title="">bars.zip</a> (Size: <span class="text-dark">2.24 KB</span> Downloads: <span class="text-dark">9)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>##############################################################################<br />
# Timer<br />
#<br />
# :ใช้สำหรับคำถามเลือกตอบที่ต้องการจับเวลาเหมือนในเกม Walking Dead หรือ Wolf Among Us<br />
<br />
transform alpha_dissolve:<br />
&nbsp;&nbsp;&nbsp;&nbsp;alpha 0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;linear 0.5 alpha 1.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;on hide:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear 0.5 alpha 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;# ส่วนนี้ใช้ในงาน Fade In และ Fade Out ของแถบจับเวลา เรียกใช้เพียง 1 ครั้ง<br />
<br />
screen countdown:<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer time repeat False action [Hide('countdown'), Jump(timer_jump)]<br />
<br />
# xmaximum คือความกว้างสูงสุดของแถบ ,right_bar คือภาพของแถบด้านขวา , left_bar คือภาพของแถบด้านซ้าย , thumb คือภาพหัวลูกศรที่ใช้ลากแถบ (ในที่นี้ไม่่ได้ใส่ไว้เลยเป็น None )<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bar value AnimatedValue(0, time, time, time) xmaximum 300 xalign 0.70910 yalign 0.05 right_bar "graphics/ui/timed_right_empty.png" left_bar "graphics/ui/timed_full.png"&nbsp;&nbsp;thumb None<br />
<br />
<br />
# ปกติแถบจะเปลี่ยนจากด้านซ้ายไปขวา (จะลดหรือเพิ่มขึ้นอยู่กับรูปด้วย) ถ้าต้องการให้กลับด้านกัน ใช้ bar_invert ดังด้านล่างนี้<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bar value AnimatedValue(0, time, time, time) xmaximum 300 xalign 0.30115 yalign 0.05 bar_invert True right_bar "graphics/ui/timed_full.png"&nbsp;&nbsp;left_bar "graphics/ui/timed_left_empty.png" thumb None</code></div></div><br />
จากตัวอย่างนี้ถ้าลองรันดูจะพบว่า แถบเวลาจะเริ่มจากปลายสุดของแต่ละด้านล้วมาบรรจบที่ตรงกลาง (ตามรูปประกอบด้านล่างนี้)<br />
<br />
ลองเอาไปประยุกต์ใช้ดูนะครับ (ผมอธิบายไม่ค่อยเก่ง)<br />
ไฟล์รูปจะอยู่ในไฟล์แนบนะครับ<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #FF0000;" class="mycode_color"><span style="text-decoration: underline;" class="mycode_u">วิธีใช้</span></span><br />
1).แตกไฟล์ zip แล้วนำไปวางในโฟลเดอร์เกมของท่าน<br />
2).นำ Code ด้านบน วางไว้ในไฟล์ .rpy ไฟล์ใดก็ได้ แต่ต้องไม่อยู่ภายใน label screen หรือ init python ใดๆ<br />
(ผมวางไว้ใน screens.rpy ด้านบนสุด)<br />
3).เวลาใช้ ใช้ใน label ทีเราเขียนเนื้อเรื่อง โดยการวาง code นี้ก่อนขึ้นคำสั่งแสดงตัวเลือก<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># time คือเวลาที่ต้องการ , timer_jump คือ ข้ามไป label ชื่อ noanswer หากว่าเวลาหมดก่อนที่ผู้เล่นจะเลือกตอบคำถาม<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; time = 15<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36; timer_jump = 'noanswer'<br />
&nbsp;&nbsp;&nbsp;&nbsp;show screen countdown</code></div></div><br />
4).ในตัวเลือกทุกตัวเลือกต้องมีคำสั่ง hide screen countdown<br />
ขึ้นก่อนเสมอ เมื่อปิดแถบจับเวลานี้ไป<br />
5).เท่านี้ก็ได้แถบจับเวลาแล้ว </span><br />
<br />
ตัวอย่างแถบจับเวลา (ถือโอกาสโฆษณานิดๆ &gt;w&lt;)<br />
<br />
<img src="https://dl.dropboxusercontent.com/u/54427785/wa.jpg" loading="lazy"  alt="[Image: wa.jpg]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
ขอบคุณครับ แล้วพบกันใหม่โอกาสหน้าสวัสดี &gt;w&lt;<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/zip.gif" title="ZIP File" style="height: 16px; width: 16px" border="0" alt=".zip" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=232" target="_blank" title="">bars.zip</a> (Size: <span class="text-dark">2.24 KB</span> Downloads: <span class="text-dark">9)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[โปรแกรมสร้างเกม Visual novel "Renpy"]]></title>
			<link>https://irpg.in.th/thread-1898.html</link>
			<pubDate>Wed, 21 May 2014 12:15:04 +0700</pubDate>
			<dc:creator><![CDATA[<a href="https://irpg.in.th/member.php?action=profile&uid=243">Nazuth</a>]]></dc:creator>
			<guid isPermaLink="false">https://irpg.in.th/thread-1898.html</guid>
			<description><![CDATA[<img src="http://techrap.in/wp-content/uploads/2014/04/Ren-Py.jpg" loading="lazy"  alt="[Image: Ren-Py.jpg]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Ren'Py โปรแกรมสำหรับทำเกมแนว Visual Novel</span> </span><br />
<br />
ภาษาคอมพิวเตอร์ที่ใช้ในการพัฒนา Python<br />
<br />
ระบบปฏิบัติการที่สามารถใช้รันตัวเกมส์ได้ <br />
Windows, Linux, Mac OS X, iPhone , iPad และระบบปฏิบัติการ Android ทุกรุ่น <br />
<br />
ลิขสิทธิ์ MIT License <br />
เว็บไซต์ผู้พัฒนา <a href="http://www.renpy.org" target="_blank" rel="noopener" class="mycode_url">www.renpy.org</a> <br />
(สามารถไปอัพเดทข้อมูลและดาวน์โหลดโปรแกรมรุ่นล่าสุดได้ที่เว็บไซด์นี้)<br />
<br />
ดาวน์โหลด Renpy ได้ที่นี่<br />
<a href="http://www.renpy.org/latest.html" target="_blank" rel="noopener" class="mycode_url">http://www.renpy.org/latest.html</a><br />
<br />
ในการรันโปรแกรมเรนปี้จำเป็นต้องใช้โปรแกรมสำหรับเขียนโค้ดด้วย เช่น jedit,editra<br />
ซึ่งสามารถดาวน์โหลดได้จากลิงค์ด้านบนเช่นกัน<br />
<br />
<span style="color: #FF0000;" class="mycode_color">ที่สำคัญเอ็นจิ้นนี้เป็นฟรีแวร์สามารถทำขายได้เลยครับ(เฉพาะเอ็นจิ้นไม่รวมรีซอสจากที่อื่น)</span>]]></description>
			<content:encoded><![CDATA[<img src="http://techrap.in/wp-content/uploads/2014/04/Ren-Py.jpg" loading="lazy"  alt="[Image: Ren-Py.jpg]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Ren'Py โปรแกรมสำหรับทำเกมแนว Visual Novel</span> </span><br />
<br />
ภาษาคอมพิวเตอร์ที่ใช้ในการพัฒนา Python<br />
<br />
ระบบปฏิบัติการที่สามารถใช้รันตัวเกมส์ได้ <br />
Windows, Linux, Mac OS X, iPhone , iPad และระบบปฏิบัติการ Android ทุกรุ่น <br />
<br />
ลิขสิทธิ์ MIT License <br />
เว็บไซต์ผู้พัฒนา <a href="http://www.renpy.org" target="_blank" rel="noopener" class="mycode_url">www.renpy.org</a> <br />
(สามารถไปอัพเดทข้อมูลและดาวน์โหลดโปรแกรมรุ่นล่าสุดได้ที่เว็บไซด์นี้)<br />
<br />
ดาวน์โหลด Renpy ได้ที่นี่<br />
<a href="http://www.renpy.org/latest.html" target="_blank" rel="noopener" class="mycode_url">http://www.renpy.org/latest.html</a><br />
<br />
ในการรันโปรแกรมเรนปี้จำเป็นต้องใช้โปรแกรมสำหรับเขียนโค้ดด้วย เช่น jedit,editra<br />
ซึ่งสามารถดาวน์โหลดได้จากลิงค์ด้านบนเช่นกัน<br />
<br />
<span style="color: #FF0000;" class="mycode_color">ที่สำคัญเอ็นจิ้นนี้เป็นฟรีแวร์สามารถทำขายได้เลยครับ(เฉพาะเอ็นจิ้นไม่รวมรีซอสจากที่อื่น)</span>]]></content:encoded>
		</item>
	</channel>
</rss>