<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>GODOT ENGINE &#8211; AnonyViet</title>
	<atom:link href="https://anonyviet.com/tag/godot-engine/feed/" rel="self" type="application/rss+xml" />
	<link>https://anonyviet.com</link>
	<description>Webiste chia sẻ kiến thức công nghệ thông tin, mạng máy tính, bảo mật phổ biến nhất Việt Nam. Luôn cập nhật tin tức, thủ thuật nóng hổi nhất</description>
	<lastBuildDate>Thu, 24 Jul 2025 17:04:57 +0000</lastBuildDate>
	<language>vi</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://anonyviet.com/wp-content/uploads/2018/10/cropped-ico-logo-75x75.png</url>
	<title>GODOT ENGINE &#8211; AnonyViet</title>
	<link>https://anonyviet.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Có nên học Godot Engine để lập trình Game không?</title>
		<link>https://anonyviet.com/co-nen-hoc-godot-engine-de-lap-trinh-game-khong/</link>
					<comments>https://anonyviet.com/co-nen-hoc-godot-engine-de-lap-trinh-game-khong/#comments</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Tue, 15 Mar 2022 00:07:49 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[lập trình]]></category>
		<category><![CDATA[lập trình game]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=40023</guid>

					<description><![CDATA[Nói đôi chút về lập trình game, ngành thì có đấy nhưng làm sao để tham gia cái ngành này thì bạn có biết không? Và câu trả lời của mình đó là đơn giản thôi, bạn chỉ cần tải các Engine hỗ trợ thiết kế game về tiến hành quá trình học, training với [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Nói đôi chút về lập trình game, ngành thì có đấy nhưng làm sao để tham gia cái ngành này thì bạn có biết không? Và câu trả lời của mình đó là đơn giản thôi, bạn chỉ cần tải các Engine hỗ trợ thiết kế game về tiến hành quá trình học, training với nó. Nhưng câu hỏi được nhiều bạn đặt ra là bạn nên chọn Engine nào cho việc bắt đầu quá trình học hỏi, có quá nhiều Engine xoay quanh Internet, người thì recommend cái này cái kia lúc Unity, UE, Gms,v.v khiến cho bạn lúng ngúng và dẫn đến việc đắn đo sau đó có khi là bỏ không làm nữa.</p>
<p>Vậy thì để trả lời cho các câu hỏi ở trên mình sẽ viết 1 bài để đánh giá khả năng của 1 Engine đó là Godot Engine.</p>
<h2>Godot Engine</h2>
<p><a href="https://anonyviet.com/wp-content/uploads/2022/03/godot-lap-trinh-game.jpg"><img fetchpriority="high" decoding="async" class="aligncenter size-full " src="https://anonyviet.com/wp-content/uploads/2022/03/godot-lap-trinh-game.jpg" alt="godot lap trinh game" width="616" height="353" title="Có nên học Godot Engine để lập trình Game không? 2"></a></p>
<h3>Sơ lược</h3>
<p>Nếu nói sơ qua về Godot thì đây là 1 Engine được phát triển vào những năm 2007 của 2 thập kỉ trước, và trước đó Godot gần như là 1 Engine vô danh, ít người biết đến và dở. Nhưng rồi kể từ phiên bản 3.x đây là 1 sự lột xác hoàn toàn cho Godot với các mode, function,v.v đã được cải tiến, thêm vào và biến nó trở thành 1 Engine tiềm năng đáng để sử dụng trong thập kỉ 202x.</p>
<h3>Có nên học Godot để lập trình Game không?</h3>
<p>Câu trả lời của mình là CÓ, với những bản cập nhật từ phiên bản 3.x , và hơn hết là phiên bản 4.x dang được phát triển và cho ra bản alpha test trong thời điểm mình viết bài này với nền tảng công nghệ đồ họa Vulkan, nó đã biến Godot 4.x trở thành 1 Engine có khả năng tốt về 3D và 2D với sự đầu tự của các tổ chức như: Heroic Labs,Gamblify,v.v</p>
<p>Godot Engine đã đáng để bạn bỏ thời gian ra và sử dụng nó.</p>
<h3>Cơ hội việc làm với Godot</h3>
<p>Với cơ hội để làm việc với Engine này thì hầu như ở VN rất ít và có thể đếm trên đầu ngón tay nhưng ở bên ngoài nước ngoài họ đã và đang sử dụng Godot Engine này để phát triển các thể loại game 2D. Và tất nhiên trong vài năm tới thị trường game Việt Nam sẽ bắt đầu sử dụng Godot cho việc sản xuất game cho nên nếu như bạn muốn đánh cược tương lai của mình thì hãy lập trình game bằng Godot.</p>
<h3>So sánh Godot với Unity</h3>
<p>Unity thì chắc chắn sẽ trên kèo nhưng bù lại Godot Engine có thể làm được nhiều thứ mà Unity khó làm được.</p>
<p>+ Đầu tiên đó chính là thời gian làm 1 tựa game, mình đã sử dung 2 Engine này và đưa ra kết quả là Cùng 1 newbie sử dụng 2 Engine này thì việc thiết kế game với Godot sẽ nhanh hơn Unity khi mà  nósử dụng các cú pháp tương tự như Python, các chức năng như Camera,v.v đều được có sẵn để làm game.</p>
<p>+ Nhưng bù lại điểm thứ nhất mặc dù làm nhanh nhưng hiệu năng của Godot nó sẽ yếu hơn Unity, nhưng vẫn tùy vào thể loại game mà bạn thực hiện, nếu game 2D thì Godot vẫn nhỉnh hơn Unity 1 xíu nhưng nếu là 3D thì Godot hoàn toàn thua.</p>
<h3>Vậy có nên sử dụng Godot Engine?</h3>
<p>Câu trả lời của mình là <strong>CÓ</strong>, nó rất thích hợp với các indie game developer hay các studio sản xuất game muốn có sản phẩm nhanh thì Godot Engine là 1 lựa chọn thích hợp. Mặc dù vẫn còn ít các tutorial nhưng Godot vẫn rất dễ để có thể sử dụng. Hiện nay AnonyViet đã có 1 <a href="https://anonyviet.com/?s=godot">seri học Godot hơn 100 bài</a> có thể giúp bạn tạo được 1 Game cơ bản trên máy tính. Hãy tham khảo thử nhé.</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Godot Engine có dễ học không?</h3>
<p>Godot Engine được đánh giá là khá dễ học, đặc biệt với người mới bắt đầu, nhờ cú pháp tương tự Python và các chức năng sẵn có.</p>
<h3>Có nhiều cơ hội việc làm khi sử dụng Godot Engine không?</h3>
<p>Hiện nay, thị trường việc làm liên quan đến Godot Engine tại Việt Nam còn hạn chế, nhưng đang có xu hướng phát triển.  Thị trường quốc tế có nhiều cơ hội hơn, đặc biệt là trong lĩnh vực game 2D.</p>
<h3>Godot Engine phù hợp với loại game nào?</h3>
<p>Godot Engine rất phù hợp cho các dự án game 2D và các indie game.  Đối với game 3D, hiệu năng của Godot có thể kém hơn so với các engine khác như Unity, nhưng vẫn đáp ứng được nhiều yêu cầu.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/co-nen-hoc-godot-engine-de-lap-trinh-game-khong/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot RPG]#5: Autotile &#8211; Lập trình game Godot Engine</title>
		<link>https://anonyviet.com/godot-rpg5-autotile-lap-trinh-game-godot-engine/</link>
					<comments>https://anonyviet.com/godot-rpg5-autotile-lap-trinh-game-godot-engine/#comments</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Mon, 05 Apr 2021 08:38:21 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[code game]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[lập trình game]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=26077</guid>

					<description><![CDATA[Xin chào các bạn đã đến với phần 5 trong seires lập trình game với Godot. Và trong tutorial lần này mình sẽ hướng dẫn các bạn tạo tilemap bằng cách sử dụng một chức năng nâng cao hơn đó là Auto tile. Trước đó, mình cũng đã có một bài viết hướng dẫn về [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Xin chào các bạn đã đến với phần 5 trong seires lập trình game với <a href="https://anonyviet.com/tag/Godot/">Godot</a>. Và trong tutorial lần này mình sẽ hướng dẫn các bạn tạo tilemap bằng cách sử dụng một chức năng nâng cao hơn đó là Auto tile. Trước đó, mình cũng đã có một bài viết hướng dẫn về việc sử dụng Autotile rồi nhưng mà lúc đó kiến thức còn rất yếu nên sai bét nhè và bây giờ mình sẽ hướng dẫn lại một cách cụ thể và chi tiết hơn.</p>
<p style="text-align: left;">Trong bài này mình sẽ giúp cách bạn tạo Autotile và Autotile này cho bạn nào chưa biết thì nó có thể giúp bạn tự Design cái Level của bạn một cách tự động thay vì tự làm thủ công ở bài 4 nhé. Nó cũng dễ lắm không khó gì đâu.</p>
<h2 style="text-align: left;">Tạo Autotile</h2>
<h3 style="text-align: left;">1 . Tạo Autotile</h3>
<p style="text-align: left;">Đầu tiên các bạn hãy truy cập vào Tileset ở Tab Inspector của Node Tilemap</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-09-36.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 23" width="261" height="146" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 25"></p>
<p style="text-align: left;">Sau đó chọn cái Tileset đang có của mình là Forest</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-10-28.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 24" width="381" height="266" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 26"></p>
<p style="text-align: left;">Và sau đó các bạn tiến hành chọn New Autotile cho mình nhé.</p>
<p> <img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-11-20.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 25" width="552" height="324" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 27"></p>
<p style="text-align: left;">Các bạn nhớ bật cái Gird lên để có hình dạng lưới</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-11-55.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 26" width="103" height="72" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 28"></p>
<p style="text-align: left;">Rồi sau đó bôi đen cái khu vực cần chọn. Và lưu ý ai đang sử dụng tileset của mình thì hãy chọn như mình nhé.</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-13-02.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 27" width="548" height="211" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 29"></p>
<p>Đối với các tileset khác bạn sẽ phải căn cứ vào kích thước của nó sẽ có tileset là 16&#215;16,8&#215;8,32&#215;32,64&#215;64</p>
<p>Các bạn phải chỉnh cho phù hợp ở <strong>Snap Option</strong> &#8211; Step và <strong>Selected Tile &#8211; Subtile Size</strong></p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-14-50.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 28" width="163" height="195" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 30"> <img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-15-08.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 29" width="169" height="324" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 31"></p>
<h3>2 . Tạo Bitmask</h3>
<p>Tiếp đó các bạn hãy nhấn vào Bitmask trên cái chỗ chọn ô công cụ.</p>
<p>Ở đây sẽ là phần quan trọng nhất của việc tạo Autotile sai một ly là đi một dặm đấy nhá.<img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-15-52.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 30" width="663" height="80" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 32"></p>
<p>À các bạn nhớ chỉnh Autotile Bitmask mode thành 3&#215;3 nhé và 2&#215;2 cũng được nếu nó phù hợp với tileset của bạn<img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-17-04.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 31" width="185" height="152" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 33"></p>
<p>Và ở đây mình sẽ tiến hành điền Bitmask vào.</p>
<p>Đây là trước đó:</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-16-51.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 32" width="621" height="129" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 34"></p>
<p>Và sau đó:</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-18-05.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 33" width="615" height="124" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 35"></p>
<p>Ở đây cái bitmask màu đó ý nó có nghĩa là : Là một cái công cụ dẫn đường hay nói cách khác cho mấy bạn dễ hiểu là liên kết tile này với tile khác .</p>
<p>Cho một ví dụ minh hoạ Godot: ở đây mình có một cái tile và cái tile này khi bạn đặt xuống sẽ hiển thị ra nó đầu tiên vì nó không liên kết tới ai cả</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-21-51.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 34" width="121" height="67" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 36"></p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-23-25.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 35" width="141" height="195" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 37"></p>
<p>Và ở đây mình sẽ đặt thêm một cái tile bên cạnh nữa và bọn chúng được liên kết với nhau thông qua bitmask.</p>
<p>Vậy giờ mình sẽ thử bỏ cái bitmask liên kết với tile bên phải đi thì sao?</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-23-01.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 36" width="239" height="187" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 38"><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-24-23.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 37" width="338" height="164" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 39"></p>
<p>Và bên dưới sẽ là kết quả khi bạn bỏ cái bitmask liên kết tile bên phải.</p>
<p>Do nó mất đi bitmask liên kết nó không thể tìm được cái tile cần kết nối đến và nó sẽ hiển thị cái icon mặc định.</p>
<p><strong>Lưu ý:</strong> nhiều bạn mặc dù vẽ bitmask đầy đủ nhưng vẫn bị như bên dưới ảnh thì là do bạn vẽ sai hoặc do bitmask lỗi hoạc do bạn vẽ thiếu hoặc dư</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-25-03.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 38" width="208" height="166" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 40"></p>
<p>Và đây là kết quả sau khi mình tiến hành làm xong nhé.</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-32-41.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 39" width="548" height="470" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 41"></p>
<h3>3 .Tạo Single Tile</h3>
<p>À để có cái tile cỏ thì các bạn hãy tạo 1 cái Single Tile là cái Tile cỏ nhé chứ đừng có thêm cái Autotile vô là nó lại rồi bời lên  là xong đấy nhé.</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-32-19.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 40" width="393" height="256" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 42"></p>
<p>À à nếu các bạn có bị như ảnh thì là do lúc đầu mình thêm thiếu cái auto tile nhé .-. lỗi xíu các bạn thông cảm<img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-36-52.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 41" width="286" height="206" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 43"></p>
<p>Các bạn thêm vào nhé</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-38-15.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 42" width="497" height="149" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 44"></p>
<p>Sau đó nó sẽ trở lại như bình thường</p>
<p><img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-38-44.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 43" width="101" height="154" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 45"></p>
<p>Để thêm một điều chắc chắn với Autotile thì trong thanh công cụ các bạn có thể chọn Icon và nhấn vào cái Ô cát để cho chắc chắn nhé</p>
<p>.<img decoding="async" class="size-full  aligncenter" src="https://anonyviet.com/wp-content/uploads/2021/04/05-04-2021-12-42-00.png" alt="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 44" width="156" height="123" title="[Godot RPG]#5: Autotile - Lập trình game Godot Engine 46"></p>
<h2>Tổng Kết.</h2>
<p>Ok vậy là mình đã huóng dẫn xong bài thứ 5 rồi. Hi  vọng qua bài này các bạn sẽ đúc kết ra một kiến thức mới trong việc thiết kế Level với Autotile cho con game của bạn với Godot nhé. Autotile là một chức năng được sử dụng rất nhiều nên các bạn hãy ghi nhớ nó kẻo lại quên đấy nhé.</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Autotile trong Godot là gì và tại sao tôi nên sử dụng nó?</h3>
<p>Autotile là một tính năng trong Godot Engine giúp bạn tạo bản đồ game một cách tự động, tiết kiệm thời gian và công sức so với việc đặt từng ô thủ công.  Nó kết nối các ô nền với nhau dựa trên bitmask, tạo ra các cạnh liền mạch và tự nhiên.</p>
<h3>Làm thế nào để chỉnh sửa Bitmask cho Autotile hiệu quả?</h3>
<p>Chỉnh sửa Bitmask cần sự chính xác cao.  Hãy chắc chắn rằng bạn đã chọn đúng chế độ (ví dụ: 3&#215;3 hoặc 2&#215;2) phù hợp với kích thước tileset.  Mỗi ô trong Bitmask đại diện cho một hướng (trên, dưới, trái, phải), cần được tô màu chính xác để các ô nền kết nối đúng cách.  Sai sót nhỏ trong Bitmask có thể dẫn đến kết quả không mong muốn.</p>
<h3>Tôi nên làm gì nếu Autotile của tôi không hiển thị đúng?</h3>
<p>Hãy kiểm tra lại kích thước tileset, chế độ Bitmask, và đặc biệt là sự chính xác của Bitmask.  Đảm bảo rằng bạn đã chọn đúng kích thước &#8220;Subtile Size&#8221; và &#8220;Step&#8221; trong phần &#8220;Snap Option&#8221;. Nếu vẫn gặp sự cố, hãy kiểm tra lại xem có thiếu hoặc dư tile trong Autotile hay không.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-rpg5-autotile-lap-trinh-game-godot-engine/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot RPG] #4 : Tilemap</title>
		<link>https://anonyviet.com/godot-rpg-4-tilemap/</link>
					<comments>https://anonyviet.com/godot-rpg-4-tilemap/#respond</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Thu, 04 Mar 2021 08:38:35 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[Tilemap]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=25008</guid>

					<description><![CDATA[Chào mừng các bạn đã quay trở lại với lập trình game with Godot Engine và sau nhiều tháng biến mất thì bây giờ Tutorial này sẽ được tiếp tục cả trên website anonyviet và youtube DeathGM nhé ^^. Không lằng nhằng thì chúng ta cùng bắt đầu thôi. Tải Asset Đầu tiên chúng ta [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Chào mừng các bạn đã quay trở lại với lập trình game with Godot Engine và sau nhiều tháng biến mất thì bây giờ Tutorial này sẽ được tiếp tục cả trên website anonyviet và youtube DeathGM nhé ^^.</p>
<p>Không lằng nhằng thì chúng ta cùng bắt đầu thôi.</p>
<h2>Tải Asset</h2>
<p>Đầu tiên chúng ta cần 1 cái tileset và các bạn có thể vào link này để tải nha: <a href="https://elthen.itch.io/2d-pixel-art-forest-tileset" target="_blank" rel="noopener">2D Pixel Art Forest Tileset</a></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-32-00.png" alt="[Godot RPG] #4 : Tilemap 57" width="324" height="136" title="[Godot RPG] #4 : Tilemap 59"></p>
<p>Nhân vô Download để tải cho bạn nào dốt tiếng anh nha -_-.</p>
<p>Sau khi đã tải xong các bạn bỏ vào trong game ở đây mình sẽ bỏ vào thư mục sẽ chứa những Art của mình.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-32-15.png" alt="[Godot RPG] #4 : Tilemap 58" width="237" height="169" title="[Godot RPG] #4 : Tilemap 60"></p>
<h2>Tạo Tilemap</h2>
<h3>Tạo Tilemap Node</h3>
<p>Đầu tiên các bạn thêm nút Tilemap vào nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-35-56.png" alt="[Godot RPG] #4 : Tilemap 59" width="593" height="242" title="[Godot RPG] #4 : Tilemap 61"></p>
<p>&nbsp;</p>
<p>Sau đó bên bảng Inspector dòng <strong>Tileset</strong> ở khung empty nhấn vô và chọn<strong> New Tileset.</strong></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-35-11.png" alt="[Godot RPG] #4 : Tilemap 60" width="256" height="174" title="[Godot RPG] #4 : Tilemap 62"></p>
<h3>Thêm Texture cho Tileset</h3>
<p>Chúng ta thêm 1cais Texture cho Tileset nhé.Các bạn nhấn vô chỗ hình dưới để thêm.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-47-59.png" alt="[Godot RPG] #4 : Tilemap 61" width="372" height="131" title="[Godot RPG] #4 : Tilemap 63"></p>
<p>Rồi chọn cái tileset mà chúng ta tải ở trên nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-48-44.png" alt="[Godot RPG] #4 : Tilemap 62" width="412" height="485" title="[Godot RPG] #4 : Tilemap 64"></p>
<h3>Tạo Tile</h3>
<p>Tiếp đến chúng ta sẽ tạo tile nhé. Ở đây thì sai Atlas chứ không phải AutoTile nhé. Autotile mình sẽ có bài hướng dẫn sau .-.</p>
<p>Các bạn nhấn vô New Atlas và chọn cái icon grid để hiển thị lưới nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-53-44.png" alt="[Godot RPG] #4 : Tilemap 63" width="655" height="370" title="[Godot RPG] #4 : Tilemap 65"></p>
<p>Ở đây tile của mình kích cỡ là 32&#215;32 đã phù hợp với kích cỡ lưới nên không cần chỉnh nhé. Nếu không vừa các bạn cần chỉnh là mà thường thì khi các bạn.</p>
<p>Các bạn kéo những cái tile cần sử dụng nhé ở đây mình sẽ kéo6 cái đầu tiên</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-10-59-21.png" alt="[Godot RPG] #4 : Tilemap 64" width="371" height="231" title="[Godot RPG] #4 : Tilemap 66"></p>
<p>Vậy là xong gòi tiếp theo ra ngoài đặt tile.</p>
<h3>Đặt Tile</h3>
<p>Các bạn nhấn vô tilemap rồi bên bảng phải hiện ra chỗ Atlas mà chúng ta vừa tạo rồi nhấn vô chọn tile để đặt.</p>
<p>Các bạn để ý là khi đặt tile thì nó khá là như c*c .-. vì vậy chúng ta cần phải chỉnh lại kích cỡ của node tilemap cho bằng với kích cỡ của cái tileset là 32&#215;32</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-11-00-37.png" alt="[Godot RPG] #4 : Tilemap 65" width="1028" height="565" title="[Godot RPG] #4 : Tilemap 67"></p>
<p>Các bạn vô Cell chỉnh từ 64&#215;64 thành 32&#215;32 nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-11-04-56.png" alt="[Godot RPG] #4 : Tilemap 66" width="217" height="107" title="[Godot RPG] #4 : Tilemap 68">  =&gt;     <img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-11-05-09.png" alt="[Godot RPG] #4 : Tilemap 67" width="246" height="120" title="[Godot RPG] #4 : Tilemap 69"></p>
<p>Và rùi giờ thì đặt tile xuống và trang trí thôi</p>
<p>Và đây là sau khi mình trang tí thì cũng ok nhưng khá là cực. Autotile với Godot mình sẽ viết ở 1 bài riêng lẻ nhé. Viết lại nhé chứ có bài tilemap hồi trước lúc đó do kiến thức còn hạn hẹp nên viết lỗi tùm lumm</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2021/02/16-02-2021-11-26-35.png" alt="[Godot RPG] #4 : Tilemap 68" width="1015" height="616" title="[Godot RPG] #4 : Tilemap 70"></p>
<h2>Tổng Kết</h2>
<p>Vậy là đã kết thúc bài 4 tạo Tilemap cho game RPG của bạn với Godot Engine rồi nhé.Hẹn các bạn vào bạn sau</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Tôi cần tải tài nguyên gì để bắt đầu?</h3>
<p>Bạn cần tải một tileset. Bài viết cung cấp link tải một tileset rừng 2D pixel art.</p>
<h3>Làm thế nào để thêm texture vào Tileset trong Godot?</h3>
<p>Sau khi tạo một Tilemap Node, trong Inspector, tại mục Tileset, nhấn &#8220;New Tileset&#8221;. Sau đó, thêm texture bằng cách nhấn vào nút hình ảnh và chọn file tileset đã tải về.</p>
<h3>Kích thước ô Tile (Cell Size) nên được thiết lập như thế nào?</h3>
<p>Kích thước ô Tile nên khớp với kích thước của hình ảnh trong tileset.  Trong ví dụ này, kích thước là 32&#215;32 pixel.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-rpg-4-tilemap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot RPG] #3: Tấn Công &#038; Object</title>
		<link>https://anonyviet.com/godot-rpg-3-tan-cong-object/</link>
					<comments>https://anonyviet.com/godot-rpg-3-tan-cong-object/#respond</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Thu, 20 Aug 2020 01:38:04 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=21121</guid>

					<description><![CDATA[Chào mừng các bạn đến với bài 3 trong series lập trình game RPG với Godot :3 Okay , thì trong bài này mình sẽ hướng dẫn các bạn tấn công với animation player &#38; Hitbox &#38; Hurtbox và Object với Godot Và chúng ta cùng bắt đầu thôi Tấn Công Chúng ta sẽ tạo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Chào mừng các bạn đến với bài 3 trong series lập trình game RPG với Godot :3</p>
<p>Okay , thì trong bài này mình sẽ hướng dẫn các bạn tấn công với animation player &amp; Hitbox &amp; Hurtbox và Object với Godot</p>
<p>Và chúng ta cùng bắt đầu thôi</p>
<h2>Tấn Công</h2>
<p>Chúng ta sẽ tạo 1 cái Sence mới để làm Hitbox để kiểm tra khi chúng ta tấn công và hurtbox để kiểm tra khi cái hitbox nó va chạm thì mất máu.</p>
<h3>Hitbox &amp; HurtBox</h3>
<p>Tạo cái Hitbox và nút gốc là Area2D rồi sau đó thêm cái CollisionShape2D là được.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-18-45.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 100" title="[Godot RPG] #3: Tấn Công &amp; Object 102"></p>
<p>Rồi tạo script mới</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-19-35.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 101" title="[Godot RPG] #3: Tấn Công &amp; Object 103"></p>
<p>Ở đây mình sẽ dùng biến export để xuất ra ngoài Inspector cho dễ điều chỉnh cho từng nhân vật. bạn có thể chỉnh ngôn ngữ ở ngoài giao diện của Godot sang tiếng việt cho dễ</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-20-10.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 102" title="[Godot RPG] #3: Tấn Công &amp; Object 104"></p>
<p>Rồi lưu lại là xong.</p>
<p>Rồi tạo cái Sence mới là HurtBox sau đó lưu lại như Hitbox thôi và không cần tạo script vì chúng ta sẽ kết nối tín hiệu đến player</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-21-04.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 103" title="[Godot RPG] #3: Tấn Công &amp; Object 105"></p>
<h3>Nhấn rồi đánh</h3>
<p>Chúng ta phải check nếu như nhấn vào thì tấn công chứ. Bạn có thể Edit cái Input nếu lười thì sử dụng như ảnh :vv. Godot có nhiều lựa chọn mà!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-54-26.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 104" title="[Godot RPG] #3: Tấn Công &amp; Object 106"></p>
<p>Rồi sau đó trạng thái sẽ bằng ATTACK.</p>
<p>Ở ATTACK: chúng ta sẽ tạo 1 hàm mới là trangthai_attack sẽ có code chạy animtion attack</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-00-04.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 105" title="[Godot RPG] #3: Tấn Công &amp; Object 107"></p>
<p>Rồi tiếp theo các bạn gọi nó trên chỗ ATTACK: nhé.</p>
<p>Sau đó khi tấn công chúng ta phải set speed = 0 để khi tấn công nó sẽ không di chuyển</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-01-12.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 106" title="[Godot RPG] #3: Tấn Công &amp; Object 108"></p>
<p>Sau khi tấn công xong nó sẽ đứng yên vì nó chưa về trạng thái IDLE vậy nên chúng ta phải set nó về.</p>
<p>Mình sẽ tạo 1 hàm mới</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-03-42.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 107" title="[Godot RPG] #3: Tấn Công &amp; Object 109"></p>
<p>Sau đó ở AnimationPlayer &gt; Animation AtTACk &gt; thêm track method(đây là track sẽ chạy hàm Godot có cái này tiện vl :3)</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-04-18.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 108" title="[Godot RPG] #3: Tấn Công &amp; Object 110"></p>
<p>Sau đó chọn Player vì Player mới có code mà chạy:D</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-04-27.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 109" title="[Godot RPG] #3: Tấn Công &amp; Object 111"></p>
<p>Rồi chọn hàm</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-06-02.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 110" title="[Godot RPG] #3: Tấn Công &amp; Object 112"></p>
<p>Rồi chỉnh lại cho về cuối vì khi kết thúc animation = chạy hàm</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-06-13.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 111" title="[Godot RPG] #3: Tấn Công &amp; Object 113"></p>
<p>Và vậy là các bạn sẽ di chuyển bình thường lại</p>
<h3>Instance &amp; Animation Player</h3>
<p>Tiếp theo chúng ta sẽ Instance nó trong Godot. Instance mình cũng chả biết gọi tiếng việt là gì nữa@@.</p>
<p>Sau đó nhấn add 2 cái Hitbox &amp; Hurtbox sau đó nhấn chuột phải vô 2 cái nhấn Editable as children để chúng ta có thể điều chỉnh nó như 1 nút con và để set collishape luôn.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-23-54.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 112" title="[Godot RPG] #3: Tấn Công &amp; Object 114"></p>
<p>À trước đó, chúng ta phải set mask/layer đã. Vô Project &gt; Project Setting &gt; 2D Render / 2D Physics</p>
<p>các bạn set như mình nhé. Set cho cả 2 cái 2D Render và 2D Physics</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-26-03.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 113" title="[Godot RPG] #3: Tấn Công &amp; Object 115"></p>
<p>Rồi ở cái Hitbox của player ở bên bảng thuộc tính &gt; collision  thì mình sẽ bỏ tick trong cái Layer và ở cái Mask sẽ tick nó va chạm với Hurtbox_E tức là khi player tấn công nó sẽ va chạm với hurtbox của kẻ thù.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-26-58.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 114" title="[Godot RPG] #3: Tấn Công &amp; Object 116"></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-26-50.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 115" title="[Godot RPG] #3: Tấn Công &amp; Object 117"></p>
<p>Rồi ở HurtBox Layer các bạn tick ở ô Hurtbox_P ở phần mask bỏ trống</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-28-40.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 116" title="[Godot RPG] #3: Tấn Công &amp; Object 118"></p>
<p>Tiếp đến là chỉnh cái CollisionShape2D của HurtBox sao cho vừa với nhân vật .</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-29-47.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 117" title="[Godot RPG] #3: Tấn Công &amp; Object 119"></p>
<p>Rồi tiếp đến sẽ set collisionshape2D của Hitbox với AnimationPlayer.</p>
<p>Ở Collisionshape2D của Hitbox thì nhấn vô cái khoá để add track nhanh</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-31-41.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 118" title="[Godot RPG] #3: Tấn Công &amp; Object 120"></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-31-54.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 119" title="[Godot RPG] #3: Tấn Công &amp; Object 121"></p>
<p>Sau đó bạn sẽ canh vị trí khi nào nó tấn công để tắt / bật.</p>
<p>Vì nó chưa tấn công nên mình sẽ để Disabled = trueở giây thứ 0 rồi check tiếp mấy giây tiếp theo nếu đến hành động tấn công thì set disable =false rồi sau  khi rút kiếm về thì disabled = true</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-33-41.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 120" title="[Godot RPG] #3: Tấn Công &amp; Object 122"></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-34-58.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 121" title="[Godot RPG] #3: Tấn Công &amp; Object 123"></p>
<p>Rồi sau đó chạy lại sẽ thấy nó ổn và perfect :33. Mình thích cái này trong Godot cực</p>
<h2>Object</h2>
<p>Tiếp theo chúng ta sẽ tạo object với Godot.</p>
<p>Link tải: https://elthen.itch.io/pixel-art-destructible-objects</p>
<h3>Tạo Sence mới</h3>
<p>Ở đây thì tạo:</p>
<p>Area2D &gt; Sprite &#8211; CollisionShape2D &#8211; AnimationPlayer</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-38-18.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 122" title="[Godot RPG] #3: Tấn Công &amp; Object 124"></p>
<p>Ở sprite thì bỏ ảnh vô nhé và mình thấy hơi to các bạn set scale sao cho phù hợp nhé.</p>
<p>Vframes = 12</p>
<p>Hframes = 7</p>
<p>&nbsp;</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-41-01.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 123" title="[Godot RPG] #3: Tấn Công &amp; Object 125"></p>
<p>Mờ thì reimport lại nha.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-41-27.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 124" title="[Godot RPG] #3: Tấn Công &amp; Object 126"></p>
<p>Rồi tiếp theo ở AnimationPlayer tạo 2 animation là Hit và Destroy nhé. Hit là animation khi đánh vào và Destroy là animation khi bị phá huỷ.</p>
<p>Ở đây mình sẽ là cái Thùng  bạn muốn đổi thì cũng được.</p>
<p>Hit : 7-9</p>
<p>Destory:10-13</p>
<p>Ở animation destroy mình sẽ áp dụng cái call method tương tự ở trên nha.</p>
<p>destroy() chứa câu lệnh queue_free()</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-14-36.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 125" title="[Godot RPG] #3: Tấn Công &amp; Object 127"></p>
<p>Rồi sau đó tạo script mới. ở đây chúng ta không cần Hitbox hay Hurtbox vì cái thùng này nó đã là 1 nút area2d rồi.</p>
<p>chúng ta sẽ set collisionshape2D cho nó rồi kết nối tín hiệu. nhưng lưu ý nếu làm theo Nút area2D như mình sẽ có bất lợi khi player va chạm với nó. Nếu bạn dùng StaticBody để làm nó rồi thêm Hurtbox vào thì sẽ hoàn chỉnh tốt hơn.</p>
<p>Kết nối tín hiệu Area enterd nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-04-49-11.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 126" title="[Godot RPG] #3: Tấn Công &amp; Object 128"></p>
<p>mình sẽ tạo biến hp = 10 để có căn mà căn khi player tấn công.</p>
<p>Rồi ở chỗ hàm tín hiệu thì mình sẽ kiểm tra nếu cái tên area  = &#8220;Hitbox&#8221; thì hp sẽ bằng cái damage của area trừ đi hp. Cái print là mình dùng để kiểm tra hp xem có đánh vào chưa thôi Godot.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-08-42.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 127" title="[Godot RPG] #3: Tấn Công &amp; Object 129"></p>
<p>Rồi set cái Layer lại thành Hurtbox_E và bỏ chọn Mask là được.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-10-47.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 128" title="[Godot RPG] #3: Tấn Công &amp; Object 130"></p>
<p>&nbsp;</p>
<p>Tiếp đó chúng ta cần kiểm tra nếu player tấn công thì sẽ chậynimation hit và khi hết máu chạy animation destroy</p>
<p>Ở đây mình sẽ hàm _process(): để kiểm tra mỗi giây nếu hp &lt;= 0 thì sẽ chạy animation rồi tự huỷ</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-12-39.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 129" title="[Godot RPG] #3: Tấn Công &amp; Object 131"></p>
<p>Rồi Tiếp đến để chắc ăn các bạn ở ANimation hit thì nhấn cái khoanh dưới ảnh đểkhi bắt đầu nó chạy animation hit chứko phải destroy nhé</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-05-16-07.png" alt="[Godot RPG] #3: Tấn Công &amp; Object 130" title="[Godot RPG] #3: Tấn Công &amp; Object 132"></p>
<p><strong>Lưu Ý: Object thì lúc đầu mình tạo ngu nên thông cảm :V. Khi chạy game Ọbject sẽ không va chạm được với player nếu muốn bạn phải chỉnh lại thành StaticBody2D hoặc KinematicBody2D rồi add hurtbox &gt; kết nối tín hiệu rồi áp dụng code như trên là được.</strong></p>
<p>Hẹn gặp bạn vào bài sau của Series lập trình game RPG với Godot</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Làm thế nào để tạo Hitbox và Hurtbox trong Godot?</h3>
<p>Tạo hai Scene mới: Hitbox và Hurtbox.  Mỗi Scene sử dụng Area2D làm node gốc và thêm CollisionShape2D để định hình vùng va chạm.  Hitbox cần script để xử lý logic va chạm, trong khi Hurtbox không cần script, chỉ cần kết nối tín hiệu với Player.</p>
<h3>Cách thiết lập Layer và Mask để Hitbox và Hurtbox tương tác chính xác?</h3>
<p>Trong Project Settings &gt; 2D Physics và 2D Render,  đặt Layer và Mask cho Hitbox và Hurtbox sao cho chúng tương tác đúng. Ví dụ, Hitbox của player có Mask là Hurtbox_E (Enemy Hurtbox), và Hurtbox của enemy có Layer là Hurtbox_E.</p>
<h3>Tôi có thể thêm hiệu ứng phá hủy vật thể như thế nào?</h3>
<p>Tạo một Scene mới với Area2D, Sprite, CollisionShape2D và AnimationPlayer. Nhập ảnh động phá hủy vào Sprite và tạo hai animation: &#8220;Hit&#8221; và &#8220;Destroy&#8221; trong AnimationPlayer. Sử dụng tín hiệu va chạm để kích hoạt animation &#8220;Hit&#8221; và &#8220;Destroy&#8221; tương ứng.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-rpg-3-tan-cong-object/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot RPG] #2: Nhân vật</title>
		<link>https://anonyviet.com/godot-rpg-2-nhan-vat/</link>
					<comments>https://anonyviet.com/godot-rpg-2-nhan-vat/#respond</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Sun, 16 Aug 2020 01:32:33 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=21084</guid>

					<description><![CDATA[Đầu tiên bạn cần phải hiểu RPG là gì: RPG tiếng anh là Role Playing Games, RPG là dạng game người chơi sẽ nhập vai vào nhân vật trong game để chiến đấu theo lượt hoặc theo thời gian thực. Trong phần này chúng ta sẽ tạo nhân vật nhé. Kèm theo đó là state [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Đầu tiên bạn cần phải hiểu RPG là gì: RPG tiếng anh là Role Playing Games, RPG là dạng game người chơi sẽ nhập vai vào nhân vật trong game để chiến đấu theo lượt hoặc theo thời gian thực.</p>
<p>Trong phần này chúng ta sẽ tạo nhân vật nhé. Kèm theo đó là state machine với animation tree với Godot</p>
<p>trước khi đó các bạn tải asset về cho mình nhé.</p>
<p style="text-align: center"><a href="https://anotepad.com/notes/sbxjffer" target="_blank" rel="noopener">Link</a></p>
<p>Ở đây chúng ta sẽ sử dụng Spritesheet nhé.</p>
<h2>Nhân vật</h2>
<h3>Sprite</h3>
<p>Đầu tiên thì chúng ta sẽ bỏ cái ảnh nhân vật vô Sprite như thường lệ.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/1.png" alt="[Godot RPG] #2: Nhân vật 156" title="[Godot RPG] #2: Nhân vật 158"></p>
<p>Để ý bên cột Thuộc Tính(Inspector)</p>
<p>Sẽ có VFrames và HFrame các bạn nào mà đã làm với tutorial trước sẽ biết.</p>
<ul>
<li>VFrames là độ dài của Spritesheet</li>
<li>Hframes là độ dọc của Spritesheet</li>
</ul>
<p>Ở đây:</p>
<ul>
<li>Hframes bằng: 13</li>
<li>Vframes bằng: 16</li>
</ul>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/2-1.jpg" alt="[Godot RPG] #2: Nhân vật 157" title="[Godot RPG] #2: Nhân vật 159"></p>
<p>Sau khi set xong sẽ thấy</p>
<p>Sau khi set xong 2 cái bạn sẽ thấy Player nhỏ lại như bình thường.</p>
<h3>CollisionShape2d</h3>
<p>Các bạn set collisionshape như ảnh nhé vì đây là TopDown RPG game chứ không phải loại game như Tutorial đầu tiên.Cái này mình sẽ giải thích ở 1 video trên kênh của mình, chỉnh như thế này vì nó sẽ hợp lý hơn với các tựa game RPG nhất là đối với đồ vật trong Godot.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/3-1.jpg" alt="[Godot RPG] #2: Nhân vật 158" title="[Godot RPG] #2: Nhân vật 160"></p>
<h3>Animation Player</h3>
<p>Các bạn tạo node Animation Player</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/4-1.jpg" alt="[Godot RPG] #2: Nhân vật 159" title="[Godot RPG] #2: Nhân vật 161"></p>
<p>Sau đó tạo Animation mới sẽ gồm:</p>
<ul>
<li>idle : đứng im</li>
<li>run : chạy</li>
<li>attack : tấn công</li>
<li>dead : chết</li>
</ul>
<p>Rồi tiếp đến tạo Track mới cho mình ở animation IDLE</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/5-1.jpg" alt="[Godot RPG] #2: Nhân vật 160" title="[Godot RPG] #2: Nhân vật 162"></p>
<p>Sau đó chọn Sprite</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/6-1.jpg" alt="[Godot RPG] #2: Nhân vật 161" title="[Godot RPG] #2: Nhân vật 163"></p>
<p>Rồi sau đó chọn Frames</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/7-2.jpg" alt="[Godot RPG] #2: Nhân vật 162" title="[Godot RPG] #2: Nhân vật 164"></p>
<p>Rồi nhấn chuột phải chọn Insert Key rồi Insert sao cho bằng với số Frames của Animation</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/8-1.jpg" alt="[Godot RPG] #2: Nhân vật 163" title="[Godot RPG] #2: Nhân vật 165"></p>
<p>Ở đây mình sẽ để ảnh có số Frames luôn nha. Không biết mấy Engine khác thì sao nhưng với Godot là như này</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/9-1.png" alt="[Godot RPG] #2: Nhân vật 164" title="[Godot RPG] #2: Nhân vật 166"></p>
<p>Vậy thì mình sẽ Insert Key bằng số Frames</p>
<p>Ở IDLE thì là 12 vậy mình sẽ insert 12 key</p>
<p>Các bạn có thể dùng thanh dưới để chỉnh độ to nhỏ</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/10-2.jpg" alt="[Godot RPG] #2: Nhân vật 165" title="[Godot RPG] #2: Nhân vật 167"></p>
<p>Sử dụng cái dưới để chỉnh thời gian track</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/11-1.jpg" alt="[Godot RPG] #2: Nhân vật 166" title="[Godot RPG] #2: Nhân vật 168"></p>
<p>Vậy là mình đã chỉnh xong, các bạn làm tương tự mấy cái khác nhé.</p>
<h3>State Machine Với Animation Tree</h3>
<p>State Machine: có nghĩa là cổ máy trạng thái, với state machine bạn có thể quản lý hành động của mình dễ hơn và  State Machine khác với Finite Machine nhé. Ở Godot thì có node là AnimationTree giúp chúng ta có thể thực hiện State Machine dễ dàng hơn</p>
<p>Các bạn thêm node AnimationTree cho mình</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/12-1.jpg" alt="[Godot RPG] #2: Nhân vật 167" title="[Godot RPG] #2: Nhân vật 169"></p>
<p>Ở chỗ TreeRoot chọn Nodestatemachine</p>
<p>Ở chỗ Assgin chọnANimationPlayer</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/14-2.jpg" alt="[Godot RPG] #2: Nhân vật 168" title="[Godot RPG] #2: Nhân vật 170"></p>
<p>Rồi Chuột Phải add hết animation vừa tạo</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/15-4.jpg" alt="[Godot RPG] #2: Nhân vật 169" title="[Godot RPG] #2: Nhân vật 171"></p>
<p>Ở đây thì</p>
<p>Màu Hồng: Connect (mũi tên giúp truyền tín hiệu)</p>
<p>Xanh: Xoá</p>
<p>Tím: Khi có cái này thì Animation sẽ chạy đầu tiên khi bắt đầu</p>
<p>Cam: Animation Cuối cùng chỉ cần chạy animation có cái này = Stop</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/16-2.jpg" alt="[Godot RPG] #2: Nhân vật 170" title="[Godot RPG] #2: Nhân vật 172"></p>
<p>Ở đây mình sẽ Connect IDLE với mấy animation khác</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-15-43.png" alt="[Godot RPG] #2: Nhân vật 171" title="[Godot RPG] #2: Nhân vật 173"></p>
<p>Như ảnh trên là Idle sẽ kết nối qua attack tức là IDLE đã có thể truyền dữ liệu qua attack nhưng mà không thể truyền về bởi vì attack không có kế nói với idle</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-15-54.png" alt="[Godot RPG] #2: Nhân vật 172" title="[Godot RPG] #2: Nhân vật 174"></p>
<p>Như ảnh trên thì 2 bên đã kết nối với nhau. Vậy thì khi chúng ta đang ở IDLE thì nhấn tấn công nó sẽ chạy attack rồi sau khi attack kết thúc nó sẽ chạy về idle.</p>
<p>Các bạn kết nối với mấy cái còn lại nhé. Có cái dead thì chỉ connect từ idle sang thôi bởi vì khi bạn chết rồi nó trả về idle làm gì nữa :D?</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-18-53.png" alt="[Godot RPG] #2: Nhân vật 173" title="[Godot RPG] #2: Nhân vật 175"></p>
<p>Mình sẽ gán start ở idle để khi khởi động thì player sẽ đứng yên đúng không? vậy khi đứng yên nó sẽ chạy animation idle. Chứ mà bạn lúc mới chạy game mà player đang đứng im mà chạy animtion run hay attack là thôi rồi.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-19-09.png" alt="[Godot RPG] #2: Nhân vật 174" title="[Godot RPG] #2: Nhân vật 176"></p>
<p>Và gán END ở dead. Khi chết thì chạy làm gì nữa :D.</p>
<p>Vậy là đã xong cái animation tree tiếp đến là code</p>
<h3>CODE</h3>
<p>Ở đây thì chúng ta sẽ sử dụng 1 tý code hướng đối tượng.</p>
<p>tạo cho mình cái enum chứa state machine (<strong>cổ máy trạng thái) </strong>gồm IDLE,RUN,ATTACk,DEAD và 1 biến trạng thái sẽ bằng IDLE.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-39-14.png" alt="[Godot RPG] #2: Nhân vật 175" title="[Godot RPG] #2: Nhân vật 177"></p>
<p>Rồi tiếp theo chúng ta phải xác định từng trạng thái khi hành động. Ở đây mình sẽ xài match (giống case/switch) và đổi tên <strong>laydau nhapvao</strong> thành <strong>trangthai_move</strong></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-39-46.png" alt="[Godot RPG] #2: Nhân vật 176" title="[Godot RPG] #2: Nhân vật 178"></p>
<p>Tiếp đến mình cần truy cập vào <strong>AnimatinoTree</strong> để có thể chạy <strong>Animation</strong> và bật cái <strong>AnimationTree</strong> nữa vậy mình sẽ có câu lệnh:</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-30-22.png" alt="[Godot RPG] #2: Nhân vật 177" title="[Godot RPG] #2: Nhân vật 179"></p>
<p>Rồi tiếp theo mình phải check nếu như Player đang đứng yên thì nó sẽ chạy animation idle nếu không đứng yên tức là di chuyển thì sẽ chạy animation di chuyển và kiểm tra khi player di chuyển qua phải nó sẽ xoay phải và khi player di chuyển trái thì nó sẽ quay sang trái.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-41-20.png" alt="[Godot RPG] #2: Nhân vật 178" title="[Godot RPG] #2: Nhân vật 180"></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/08-08-2020-02-41-09.png" alt="[Godot RPG] #2: Nhân vật 179" title="[Godot RPG] #2: Nhân vật 181"></p>
<p>Tiếp đến mình sẽ tạo cái Camera để dễ nhìn.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/17-1.png" alt="[Godot RPG] #2: Nhân vật 180" title="[Godot RPG] #2: Nhân vật 182"></p>
<p>Rồi khi di chuyển các bạn sẽ thấy nó xoay phải trái chạy animation.</p>
<p>Vậy là đã xong hẹn các bạn vào bài tiếp</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Làm thế nào để thiết lập đúng số lượng khung hình (frames) cho spritesheet trong Godot?</h3>
<p>Hãy kiểm tra thuộc tính Inspector của node Sprite.  VFrames đại diện cho số lượng khung hình theo chiều dọc của spritesheet, và HFrames đại diện cho số lượng khung hình theo chiều ngang.</p>
<h3>AnimationTree và State Machine hoạt động như thế nào trong việc tạo hoạt ảnh nhân vật?</h3>
<p>AnimationTree sử dụng State Machine để quản lý các hoạt ảnh khác nhau của nhân vật (ví dụ: idle, run, attack).  Bạn kết nối các trạng thái trong AnimationTree để xác định luồng chuyển đổi giữa các hoạt ảnh, tạo ra các chuỗi hoạt ảnh mượt mà và phản hồi chính xác với hành động của người chơi.</p>
<h3>Tôi cần sử dụng đoạn code nào để điều khiển chuyển đổi giữa các trạng thái hoạt ảnh?</h3>
<p>Bạn cần sử dụng một enum để định nghĩa các trạng thái (IDLE, RUN, ATTACK, DEAD), và một biến để theo dõi trạng thái hiện tại của nhân vật. Sau đó, dùng một cấu trúc switch-case hoặc match để xác định hoạt ảnh nào cần được phát dựa trên trạng thái hiện tại và đầu vào của người chơi, cuối cùng cập nhật trạng thái đó thông qua AnimationTree.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-rpg-2-nhan-vat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot Engine] Export sang Windows, Linux, MacOS, Android</title>
		<link>https://anonyviet.com/godot-engine-export-sang-windows-linux-macos-android/</link>
					<comments>https://anonyviet.com/godot-engine-export-sang-windows-linux-macos-android/#respond</comments>
		
		<dc:creator><![CDATA[AnonyViet]]></dc:creator>
		<pubDate>Sun, 16 Aug 2020 01:20:46 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[thiết kế game]]></category>
		<category><![CDATA[xuất game]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=21213</guid>

					<description><![CDATA[Chào các bạn! Bài viết này mình sẽ hướng dẫn các bạn xuất game sang các nền tảng Console như Windows, Linux, MacOS,&#8230; và nền tảng di động là Android! Mục đích là để người chơi có thể cài đặt và chơi game cho bạn thiết kế ra. Trước khi Export hãy tạo một chương [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Chào các bạn! Bài viết này mình sẽ hướng dẫn các bạn xuất game sang các nền tảng Console như Windows, Linux, MacOS,&#8230; và nền tảng di động là Android! Mục đích là để người chơi có thể cài đặt và chơi game cho bạn thiết kế ra.</p>
<p>Trước khi Export hãy tạo một chương trình Hello World đơn giản như sau:</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/1-1-1.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 200" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 202"></p>
<h2>1. Windows</h2>
<p>Đầu tiên bạn vào Project -&gt; Export</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/2.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 201" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 203"></p>
<p>TIếp theo chọn Window Desktop nhé!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/3.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 202" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 204"></p>
<p>Bạn điền các thông tin cơ bản như tên Game, phiên bản (version), icon game, kiến trúc chip 64 hay 32 bit</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/4-1.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 203" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 205"></p>
<p>Sau đó chọn đường dẫn lưu và Export thôi!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/5.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 204" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 206"></p>
<p>Lưu ý khi Export xong sẽ có 2 file là .exe là .pck. Bạn phải để 2 file này cùng đường dẫn mới chạy game được nha!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/6.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 205" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 207"></p>
<h2>2. Linux</h2>
<p>Bạn vẫn vào Project -&gt; Export và chọn Add cho mình Linux!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/7.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 206" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 208"></p>
<p>Phía Linux thì đơn giản hơn. Bạn không cần nhập thông tin cơ bản mà chỉ cần chọn đường dẫn và xuất trực tiếp ngay là được!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/8-1.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 207" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 209"></p>
<p>Cũng giống như WIndows. Linux cũng xuất ra được 2 file là .x86_64 và .pck. Và chắc chắn là bạn phải để 2 file này cùng thư mục. Để chạy game trên linux thì bạn thực hiện 2 lệnh như sau:</p>
<p>1 là cấp quyền cho file: chmod +x &lt;tên game&gt;</p>
<p>2 là chạy game: ./&lt;tên game&gt;</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/9-2.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 208" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 210"></p>
<h2>3. MacOS</h2>
<p>Bạn vào Project -&gt; Export và Add MacOS</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/10.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 209" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 211"></p>
<p>Sau đó điền các thông tin cơ bản như sau:</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/11.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 210" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 212"></p>
<p>Trong đó Identifier là kí hiệu (định danh) để phân biệt ứng dụng trên MacOS</p>
<p>Sau khi nhập các thông tin cơ bản xong thì bạn chọn dường dẫn để Export thôi mà nó sẽ có định dạng là .dmg nhé!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/12.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 211" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 213"></p>
<p>Đối với Windows hay MacOS bạn cứ click chuột và khởi chạy bình thường!</p>
<h2>4. Tải Export Template</h2>
<p>Điều kiện cần để Export Game là bạn phải tải Export Template nhé!</p>
<p>Đầu tiên bạn vào Editor -&gt; Manage Export Template</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/13-1.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 212" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 214"></p>
<p>Cách 1: Bạn tải trực tiếp từ Godot Engine</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/14.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 213" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 215"></p>
<p>Cách 2: Bạn tải gói nén từ trang web</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/15-1-1.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 214" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 216"></p>
<p>Khi tải xong thì bạn chọn Install From File nhé!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/16.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 215" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 217"></p>
<p>Khi hoàn tất việc cài Export Template sẽ có giao diện như sau:</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/17-2.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 216" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 218"></p>
<p>&nbsp;</p>
<h2>5. Android</h2>
<p>Đầu tiên bạn tải Android Studio tại đây:<a href="https://developer.android.com/studio" target="_blank" rel="noopener"> https://developer.android.com/studio</a></p>
<p>Sau đó tải JDK tại đây (khuyến khích dùng jdk 8): <a href="https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html" target="_blank" rel="noopener">https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html</a></p>
<p>Khi tải xong bạn tiến hành cài đăt Android Studio và JDK vào máy</p>
<p>Tiếp theo bạn cần tạo file debug.keystore bằng lệnh dưới đây:</p>
<div class="highlight-gdscript notranslate">
<div class="highlight">
<pre><span class="n">keytool</span> <span class="o">-</span><span class="n">keyalg</span> <span class="n">RSA</span> <span class="o">-</span><span class="n">genkeypair</span> <span class="o">-</span><span class="n">alias</span> <span class="n">androiddebugkey</span> <span class="o">-</span><span class="n">keypass</span> <span class="n">android</span> <span class="o">-</span><span class="n">keystore</span> <span class="n">debug</span><span class="o">.</span><span class="n">keystore</span> <span class="o">-</span><span class="n">storepass</span> <span class="n">android</span> <span class="o">-</span><span class="n">dname</span> <span class="s2">"CN=Android Debug,O=Android,C=US"</span> <span class="o">-</span><span class="n">validity</span> <span class="mi">9999</span> <span class="o">-</span><span class="n">deststoretype</span> <span class="n">pkcs12</span>
</pre>
</div>
</div>
<p>Đối với Windows thì bạn dùng cmd còn Linux và MacOS thì dùng Terminal ( Lưu ý: Để chạy được kệnh keytool bạn phải cài thành công jdk nhé)</p>
<p>Khi lệnh được thực thi thành công thì bạn sẽ có được file debug.keystore tại thư mục lưu trữ cá nhân của bạn (USER)</p>
<p>Để xuất ra được game trên Android(.apk) bạn cần có:</p>
<ol>
<li>adb SDK từ Andorid Studio</li>
<li>jarsigner từ JDK</li>
<li>debug.keystore</li>
</ol>
<p>Bây giờ chúng ta đã có 3 thứ trên. Chỉ cần tiến hành setup cho Godot thôi.</p>
<p>Bạn vào Editor -&gt; Settings -&gt; Android. Chọn đường dẫn đến 3 file trên nhé!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/18.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 217" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 219"></p>
<p>Như vậy là bạn có thể sẵn sàng export sang Android rồi!</p>
<p>Bạn vào Project -&gt; Export chọn Add Android và điền các thông tin cơ bản như các cách export bên trên nhé!</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/19.png" alt="[Godot Engine] Export sang Windows, Linux, MacOS, Android 218" title="[Godot Engine] Export sang Windows, Linux, MacOS, Android 220"></p>
<p>Khi đã nhập xong thì tiến hành chọn Export.</p>
<p>Bạn cũng có thể bật chế độ nhà phát triển trên điện thoại của mình, cắm dây cáp và export trực tiếp luôn nhé!</p>
<p>Lưu ý trước khi export bạn phải thiết lập viewport cho đúng với các thiết bị nhé! Tham khảo các bài viết trước đó để biết thêm.</p>
<p>Bài viết này cũng đã kết thúc series Godot Engine cơ bản của mình! Cảm ơn các bạn đã dành thời gian theo dõi!</p>
<p>Video export android: <a href="https://www.youtube.com/watch?v=BBwhDVIx_5M" target="_blank" rel="noopener">https://www.youtube.com/watch?v=BBwhDVIx_5M</a></p>
<h2>Câu hỏi thường gặp</h2>
<h3>Tôi cần cài đặt gì để xuất game sang các nền tảng khác nhau?</h3>
<p>Để xuất game sang Windows, Linux, macOS, bạn cần cài đặt Godot Engine và tải về các Export Template tương ứng.  Đối với Android, bạn cần cài đặt Android Studio, JDK, và tạo file debug.keystore.</p>
<h3>Làm thế nào để xuất game sang Android?</h3>
<p>Bạn cần cài đặt Android Studio và JDK, tạo file debug.keystore, cấu hình đường dẫn đến các file này trong cài đặt Godot, sau đó chọn &#8220;Project -> Export -> Android&#8221; và làm theo hướng dẫn.</p>
<h3>Tôi cần lưu ý điều gì khi xuất game sang Windows?</h3>
<p>Sau khi xuất game sang Windows, bạn sẽ nhận được hai file: .exe và .pck.  Cả hai file này phải nằm cùng thư mục để game hoạt động chính xác.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-engine-export-sang-windows-linux-macos-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Godot Shooter] #2: Tạo Nhân Vật &#038; Bắn Đạn</title>
		<link>https://anonyviet.com/godot-shooter-2-tao-nhan-vat-ban-dan/</link>
					<comments>https://anonyviet.com/godot-shooter-2-tao-nhan-vat-ban-dan/#respond</comments>
		
		<dc:creator><![CDATA[AnonyViet]]></dc:creator>
		<pubDate>Mon, 10 Aug 2020 01:13:55 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[godot 2d game]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[lập trình game với godot]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=21190</guid>

					<description><![CDATA[Trong bài này mình sẽ hướng dẫn các bạn tạo nhân vật cho Shooter game với Godot nhé. TẠO NHÂN VẬT Trước hết các bạn tải art về nha. Link: https://opengameart.org/content/animated-top-down-survivor-player AnimatedSprite Đầu tiên các bạn xoá cái Sprite đi rồi thêm cho mình lại node AnimatedSprite. Rồi Tạo Frame mới Rồi add cho mình [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><em>Trong bài này mình sẽ hướng dẫn các bạn tạo nhân vật cho Shooter game với Godot nhé.</em></p>
<h2><span style="font-size: 24pt;">TẠO NHÂN VẬT</span></h2>
<p>Trước hết các bạn tải art về nha.</p>
<p>Link: <a href="https://opengameart.org/content/animated-top-down-survivor-player" target="_blank" rel="noopener">https://opengameart.org/content/animated-top-down-survivor-player</a></p>
<h3>AnimatedSprite</h3>
<p>Đầu tiên các bạn xoá cái Sprite đi rồi thêm cho mình lại node AnimatedSprite.<img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/1-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 240" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 242"></p>
<p>Rồi Tạo Frame mới</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/2-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 241" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 243"></p>
<p>Rồi add cho mình</p>
<p>3 animation là : idle – move – shoot</p>
<p>Handgun – Rifle – Shotgun bạn có thể lấy ở trong</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/3-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 242" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 244"></p>
<p>Kéo hết vô 3 cái nhé</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/4-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 243" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 245"></p>
<p>Set CollisionShape2D lại nhé.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/5-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 244" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 246"></p>
<h3>Code:</h3>
<p>Tiếp đế là code. Chúng ta sẽ kiểm tra nếu như player di chuyển thì sẽ chạy animation move và đứng im chạy animation idle, bắn thì chạy animation shoot.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/6-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 245" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 247"></p>
<p>Tiếp theo vì đây là game bắn súng chúng ta phải để nhân vật nó xoay theo hướng chuột thì chúng ta có câu lệnh: <code>look_at(get_global_mouse_position())</code></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/7-3.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 246" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 248"></p>
<p>Tiếp theo set camera nhé nhìn cho dễ:</p>
<p>Thêm node camera2D ở Zoom chỉnh lại cho nó dễ nhìn nhé mấy bạn.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/8-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 247" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 249"></p>
<h2><span style="font-size: 24pt;">BẮN ĐẠN</span></h2>
<p>Tiếp theo chúng ta sẽ tạo đạn để bắn  piu piu</p>
<p>Link down: <a href="https://drive.google.com/file/d/1fr4xNtR-s5qS49G5N98in3oTVlVJyxAN/view?usp=sharing" target="_blank" rel="noopener">https://drive.google.com/file/d/1fr4xNtR-s5qS49G5N98in3oTVlVJyxAN/view?usp=sharing</a></p>
<p>Bạn tải về nhé.</p>
<p>Xong sau đó tạo sence mới</p>
<p>Nút gốc là Area 2D để kiểm tra khi bullet va chạm</p>
<p>CollisionShape2D</p>
<p>Sprite</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/9-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 248" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 250"></p>
<p>Các bạn kéo cái ảnh viên đạn vào Sprite</p>
<p>Rồi set collisionShape2D luôn</p>
<p>Rồi đổi tên thành Bullet</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/10-3.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 249" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 251"></p>
<p>Tạo Script mới</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/11-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 250" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 252"></p>
<p>Ở đây mình sẽ thêm 1 hàm để viên đạn có thể spawn ở vị trí nào đó mà bạn muốn và Sát thương (damage)</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">func start_at(pos, dir):
position = pos
rotation = dir
velocity = Vector2(speed, 0).rotated(dir)</pre>
<p>position =pos : nghĩa là vị trí của cái viên đạn sẽ bác cái pos</p>
<p>rotation = độ xoay của viên đạn</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/12-2.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 251" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 253"></p>
<p>Tiếp theo thì sẽ tạo 1 hàm để gán tốc độ cho viên đạn để nó có thể fly</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">func _physics_process(delta):
position += velocity * delta</pre>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/13-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 252" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 254"></p>
<p>À các bạn nhớ quay 2 nút <strong>Sprite</strong> và <strong>Collishape</strong> sang ngang nhé nếu không muốn nó bắn dọc</p>
<p>Rồi tiếp theo chúng ta phải check xem nếu như viên đạn ra khỏi màn hình thì nó tự huỷ để không thể tích lại gây lag.</p>
<p>Rồi các bạn thêm nút <strong>VisibilityNotifier2D</strong> sau đó chỉnh sao chó ổn là được. Rồi sau đó connect tín hiệu <code>screen_exit</code>  (thoát khỏi màn hình)</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/15-5.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 253" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 255"></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/16-3.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 254" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 256"></p>
<p>Rồi ở câu đó chúng ta thêm câu lệnh : <code>queue_free()</code></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/17-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 255" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 257"></p>
<p>Rồi tiếp theo chúng ta  sẽ bắn nó.</p>
<p>Trước đó bạn cần phải có sence của bullet để có thể add nó vào và dùng onready là khi chạy thì nó sẽ được load luôn</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/18.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 256" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 258"></p>
<p>Rồi sau đó check nếu nhấn phím <strong>F</strong> nó sẽ bắn</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/19-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 257" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 259"></p>
<p><code>get_parent().add_child(b)</code>: nghĩa là nó sẽ lấy bố mẹ rồi add_child tức là thêm cái nút đạn vào nếu có video thì mình sẽ minh hoạ dễ hơn.</p>
<p><code>b.start_at(global_position,rotation)</code> : global_position = vị trí của nhân vật, rotation là cái góc xoay.</p>
<p>Khi bắn bạn sẽ thấy nó xuất hiện ở giữa player, chúng ta cần phải chỉnh cho nó ra ngoài cây súng.Vậy thì làm như sau.</p>
<p>Bạn thêm nút Position2D rồi kéo nó vô chỗ mà bạn muốn viên đạn xuất hiện</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/20-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 258" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 260"></p>
<p>Tiếp theo thì đơn giản thôi bạn chỉ cần thêm $Position2D vào trước cái global_position để spawn ở cái chỗ trên</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/21-1.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 259" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 261"></p>
<p>Và nếu chạy thì bạn sẽ gặp trường hợp như ảnh</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/08/22.jpg" alt="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 260" title="[Godot Shooter] #2: Tạo Nhân Vật &amp; Bắn Đạn 262"></p>
<p>Và bài sau sẽ có cách fix</p>
<p><strong>Code Player:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">extends KinematicBody2D




export var speed = 200




onready var bullet = preload("res://Canh/Bulet.tscn")

func _physics_process(delta):

look_at(get_global_mouse_position())

laydau_nhapvao(delta)




func laydau_nhapvao(delta):

var vector_dauvao = Vector2.ZERO

vector_dauvao.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")

vector_dauvao.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")

vector_dauvao = vector_dauvao.normalized()

if vector_dauvao != Vector2.ZERO:

$AnimatedSprite.play("move")

else:

$AnimatedSprite.play("idle")

var dichuyen = vector_dauvao * speed * delta

if Input.is_key_pressed(KEY_F):

shoot()

dichuyen = move_and_collide(dichuyen)

func shoot():

var b = bullet.instance()

get_parent().add_child(b)

b.start_at($Position2D.global_position,rotation)</pre>
<h2>Câu hỏi thường gặp</h2>
<h3>Tôi cần chuẩn bị những gì trước khi bắt đầu làm theo hướng dẫn?</h3>
<p>Bạn cần tải về bộ ảnh nhân vật và viên đạn từ các liên kết được cung cấp trong bài viết.  Đảm bảo bạn đã cài đặt Godot Engine.</p>
<h3>Làm thế nào để nhân vật xoay theo hướng chuột?</h3>
<p>Sử dụng hàm <code>look_at(get_global_mouse_position())</code> trong script của nhân vật.</p>
<h3>Nếu viên đạn không xuất hiện đúng vị trí mong muốn thì sao?</h3>
<p>Thêm một node Position2D vào scene của nhân vật và sử dụng <code>$Position2D.global_position</code> thay cho <code>global_position</code> khi tạo viên đạn để xác định vị trí xuất phát chính xác hơn.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/godot-shooter-2-tao-nhan-vat-ban-dan/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Lập Trình Top Down Game] #1: Di chuyển Top Down</title>
		<link>https://anonyviet.com/lap-trinh-top-down-game-1-di-chuyen-top-down/</link>
					<comments>https://anonyviet.com/lap-trinh-top-down-game-1-di-chuyen-top-down/#respond</comments>
		
		<dc:creator><![CDATA[DeathGM]]></dc:creator>
		<pubDate>Tue, 21 Jul 2020 01:34:29 +0000</pubDate>
				<category><![CDATA[Godot]]></category>
		<category><![CDATA[godot 2d game]]></category>
		<category><![CDATA[godot di chuyển]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[godot hướng dẫn]]></category>
		<category><![CDATA[godot tutorial]]></category>
		<category><![CDATA[lập trình game]]></category>
		<category><![CDATA[lập trình game với godot]]></category>
		<category><![CDATA[lập trình top down game]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=20733</guid>

					<description><![CDATA[Giới Thiệu Chào các bạn, chào mừng đã đến với series tiếp theo về lập trình game với Godot Engine. Hôm nay mình sẽ hướng dẫn các bạn lập trình game Top Down với Godot nhé.Trong bài này mình sẽ hướng dẫn các bạn di chuyển nhân vật cho top down game. Với Top Down [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Giới Thiệu</h2>
<p>Chào các bạn, chào mừng đã đến với series tiếp theo về lập trình game với Godot Engine. Hôm nay mình sẽ hướng dẫn các bạn lập trình game Top Down với Godot nhé.Trong bài này mình sẽ hướng dẫn các bạn di chuyển nhân vật cho top down game.</p>
<p>Với Top Down game thì chúng ta không cần trọng lực như cái series đầu mà chỉ cần di chuyển 4 hướng là được.Thường thì các bạn search youtube các bài về basic top down game sẽ thấy người ta thường dùng lệnh if để check Input và di chuyển, làm kiểu thế rất mất thời gian nên mình sẽ làm 1 kiểu nhanh gọn lẹ luôn nhé :3.</p>
<p><span style="font-size: 18pt;"><strong>Note: Đây sẽ là bài 1 cho cả 2 seires</strong></span></p>
<h2>Tạo Project</h2>
<p>Thì như thường thôi chúng ta sẽ tạo project mới.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-05-48.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 277" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 279"></p>
<p>Project Name: Tên Project</p>
<p>Project Path: Đường dẫn</p>
<p>Renderer:</p>
<p>Chọn OpenGL 3.0 nếu bạn muốn làm game PC &amp; Android &#8211; Chọn OpenGL 2.0 nếu bạn muốn làm game web.</p>
<p>Sau khi có đường dẫn xong các bạn nhấn Create Folder rồi nhấn Create &amp; Edit để bắt đầu</p>
<h2>Tạo Sence</h2>
<p>Như mấy bài trước với Godot chúng ta sẽ tạo Sence mới sẽ chứa nhân vật và những thứ khác</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-18-30.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 278" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 280"></p>
<p>Bạn có thể sử dụng Node Đen hoặc 2D Node đều được. Mình sẽ xài 2D Node và đặt tên nó là World sau đó các bạn nhấn Ctrl + S để lưu nó lại.Mình sẽ lưu nó lại vào folder chứa Cảnh(Sence).</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-19-32.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 279" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 281"></p>
<h2>Tạo Nhân Vật</h2>
<p>Các bạn nhấn vào dấu + bên cạnh cái tên của Sence để tạo sence mới</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-22-27.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 280" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 282"></p>
<p>Rồi nhấn Other Node hoặc Dấu + Dưới chữ Sence để thêm Node. Các bạn tìm cho mình Node <strong>KinematicBody2D</strong>. Đây là một nút &#8221; Cơ thể động học&#8221;giúp chúng ta có thể di chuyển và thực hiện dễ dàng hơn.</p>
<p>Rồi các bạn Thêm cho mình 2 Node là &#8220;<strong>Sprite</strong>&#8221; và &#8220;<strong>CollisionShape2D</strong>&#8220;.</p>
<p>Sprite: Là node hình ảnh cho node bố mẹ nói ngắn gọn là node hiện thị hình ảnh cho cái KinematicBody2D ý</p>
<p>CollisionShape2D: là node đại diện cho dữ liệu va chạm trong không gian 2D tức là mấy cái hình dùng để va chạm ý. Bạn nào từng tiếp xúc qua sẽ hiểu.</p>
<p>Nói chung trong Godot nó là: KinematicBody2D là linh hồn &#8211; Sprite là hình dáng bên ngoài &#8211; CollisionShape2D là bộ xương</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-27-19.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 281" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 283"></p>
<p>Mình sẽ đổi tên cái KinematicBody2D thành Player cho dễ nhận diện.</p>
<p>Với Sprite hiện mình chưa có asset nên chúng ta xài tạm cái icon.png có sẵn trong filesystem của godot nha :v bài sau mình sẽ kiếm cái asset.</p>
<p>Các bạn nhấn vào Sprite rồi nhấn vào cái Icon xong sau đó kéo qua chỗ Texture của Sprite</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-32-47.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 282" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 284"></p>
<p>Tiếp đó chúng ta sẽ set CollisionShape2D cho nó. Nhấn vào node collision rồi chỗ shape các bạn chọn 1 cái shape cho nó, cái nào cũng được tùy bạn ở đây mình chọn hình vuông cho nó vuông với cái Sprite</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-34-26.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 283" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 285"><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-35-57.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 284" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 286"></p>
<p>Vậy là chúng ta đã tạo xong nhân vật cơ bản của cơ bản :&#8217;).</p>
<p>Sau đó các bạn lưu lại nha</p>
<p>Tiếp đến sẽ là phần Script các bạn nhấn vào dấu tờ giấy có dấu + màu xanh để tạo script à nhớ nhấn vào node Player mà tạo nha đừng có tạo ở Sprite hay CollisionShape2D.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-02-37-43.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 285" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 287"></p>
<h2>Code Di Chuyển</h2>
<p>&nbsp;</p>
<p>Chúng ta sẽ xài <a href="https://anonyviet.com/gdscript-godot-engine-co-ban/">GDScript</a> của Godot nhé. Đây là ngôn ngữ riêng của Godot được dựa trên Python và Lua.</p>
<p>Như đã nói ở đầu bài mình sẽ hướng dẫn các bạn di chuyển nâng cao :3.</p>
<h3>Tạo Hàm Lấy Dữ Liệu Đầu Nhập Vào</h3>
<p>Chúng ta sẽ tạo hàm mới gọi là laydau_nhapvao(): tức là hàm sẽ lấy mọi thông tin nhập vào từ bên ngoài. VD như bạn nhấn phím K nó sẽ tấn công thì đó là lấy thông tin từ đầu nhập bên ngoài.</p>
<p>Vậy mình sẽ tạo hàm func laydau_nhapvao():</p>
<p>Trong đó mình sẽ tạo 1 biến là vector_dauvao gán = Vector2.ZERO hoặc Vector2() (2 cái = nhau nhé).</p>
<p>vector_dauvao là biến dùng đến xác định Vector2(x,y) tức là đầu x,y. Nếu nhấn trái sẽ di chuyển qua trái(Vectoc(-1,0)), còn nhấn qua phải sẽ di chuyển qua phải(Vector2(1,0)), lên trên thì (Vector2(0,-1) chứ không phải là Vector2(0,1) như trong toán học, trong game ngược lại).</p>
<p><code class="EnlighterJSRAW" data-enlighter-language="python"><span style="font-size: 10pt;">func laydau_nhapvao():</span><br />
<span style="font-size: 10pt;">var vector_dauvao = Vector2.ZERO</span><br />
<span style="font-size: 10pt;">vector_dauvao.x = Input.get_action_strength("ui_right")- Input.get_action_strength("ui_left")</span><br />
<span style="font-size: 10pt;">vector_dauvao.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")</span></code></p>
<p><span style="font-size: 10pt;">move_and_collide(vector_dauvao)</span></p>
<p>Ở đây:</p>
<p>vector_dauvao.x = Input.get_action_strength(&#8220;ui_right&#8221;) &#8211; Input.get_action_strength(&#8220;ui_left&#8221;): nghĩa là Input(đầu nhậpvào).get_action_strength(&#8220;ui_right&#8221;) (lấy cường độ hành động có thể hiểu là lấy đầu nhập vào khi nhấn phải) sau đó trừ đi  Input.get_action_strength(&#8220;ui_left&#8221;) =&gt; ui_right(Vector(1,0)) và ui_left(Vector(-1,0)) khi nhấn phải mà không nhấn trái thì cái hành động nhấn phải đó Vector2 = Vector2(1,0) và vì bên trái = 0 cho nên 1-0 sẽ = 1 <em><strong>(thì khi di chuyển sang phải Vector(1,0) cái x nó = 1 rồi chúng ta đâu di chuyển sang trái đâu vì vậy nó = 0 khi nào di chuyển sang trái nó mới = -1 vậy 1-0 sẽ = 1 và = 1 thì nó di chuyển sang phải và bên trái thì ngược lại, vector_dauvao.y cũng tương tự)</strong></em></p>
<h3>Áp dụng di chuyển</h3>
<p>Sau đó mình sẽ thêm 1 lệnh để áp dụng di chuyển cho nhân vật đó là move_and_collide(di chuyển và va chạm khác với move_and-slide(di chuyển và lướt) nó còn có công dụng là đẩy vật khác :)) đúng vậy có thể đẩy vật khácnếu là move_and_slide nó chỉ di chuyển và lướt chứ không thể đẩy vậy khác được. Nếu xài Rigdbody2D thì cả slide và collide đều đẩy được nó :3 tính năng khá hay của Godot )</p>
<h3>Gọi hàm lấy dữ liệu</h3>
<p>Rồi tiếp đó chúng ta phải gọi nó vào hàm quá trình vật lý (physical_process(delta)) hoặc quá trình (_process(delta)) bạn có thể xem cơ bản ở đây: Godot <a href="https://anonyviet.com/gdscript-godot-engine-co-ban/">GDScript</a></p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-03-17-45.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 286" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 288"></p>
<h3>Instance Node</h3>
<p>Rồi sau đó qua cái sence world và instance node player vào để test</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-03-18-58.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 287" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 289"></p>
<p>Các bạn nhớ kéo Player ra giữa nha.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/19-07-2020-03-19-38.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 288" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 290"></p>
<p>Rồi các bạn nhấn F5 hoặc F6 chạy game (F5 chọn sence để chạy, F6 chạy sence bạn đang làm việc) khi chạy game bạn nhấn nút mũi tên để di chuyển nhé. Nhưng mà bạn để ý khi di chuyển thẳng ngang với di chuyển chéo thì tốc độ di chuyển chéo nó nhanh hơn chứ không đều như 2 cái di chuyển kia, vì vậy cúng ta có 1 câu lệnh để bình thường hóa tốc độ nó lại là .normalized().</p>
<p>Vậy chúng ta sẽ gõ</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"> vector_dauvao = vector_dauvao.normalized()</pre>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/20-07-2020-12-24-30.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 289" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 291"></p>
<h3>Speed và Delta</h3>
<p>Mình sẽ sử dụng biến export var để xuất ra ngoài bảng Inspector (đây là 1 tính năng khá OK của Godot)</p>
<p>VD:</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/20-07-2020-12-30-43.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 290" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 292"></p>
<p>Đầu tiên chúng ta khai báo</p>
<p>export var speed = 100 đi cho tròn chỉnh bao nhiêu cũng được tùy bạn</p>
<p>Sau đó chúng ta sẽ * nó vào với biến vector_dauvao và * với delta luôn</p>
<p>Bạn có thể làm như này.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/20-07-2020-12-32-57.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 291" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 293"></p>
<p>Nhưng mà với mình thì mình tạo 1 biến mới chứa 3 cái trên cho dễ hiểu.</p>
<p><img decoding="async" class="alignnone size-full " src="https://anonyviet.com/wp-content/uploads/2020/07/20-07-2020-12-33-56.png" alt="[Lập Trình Top Down Game] #1: Di chuyển Top Down 292" title="[Lập Trình Top Down Game] #1: Di chuyển Top Down 294"></p>
<p>Ở laydau_nhapvao không có delta nên mình sẽ tạo 1 delta ngay trên func laydau_nhapvao():</p>
<p>Rồi ở_physical_process(deta): mình chỉ cần gọi nó vô thôi.</p>
<h3>Kết Thúc</h3>
<p>Vậy là đã xong bài 1 trong series lập trình game với Godot, rồi hẹn gặp lạibạn vào bài sau ;3</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Tôi có thể sử dụng loại Node nào để tạo nhân vật trong game Top-Down này?</h3>
<p>Bài viết sử dụng <code>KinematicBody2D</code>.  Đây là lựa chọn phù hợp cho việc di chuyển và xử lý va chạm trong game 2D.</p>
<h3>Sự khác biệt giữa <code>move_and_slide()</code> và <code>move_and_collide()</code> là gì?</h3>
<p><code>move_and_collide()</code> cho phép nhân vật đẩy các vật thể khác, trong khi <code>move_and_slide()</code> chỉ cho phép nhân vật trượt qua các vật thể khác.</p>
<h3>Tôi nên đặt mã di chuyển vào hàm nào trong GDScript?</h3>
<p>Bạn nên đặt mã di chuyển vào hàm <code>_physics_process(delta)</code> để đảm bảo cập nhật di chuyển đúng trong mỗi khung hình.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/lap-trinh-top-down-game-1-di-chuyen-top-down/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GDSCRIPT &#8211; Godot Engine cơ bản</title>
		<link>https://anonyviet.com/gdscript-godot-engine-co-ban/</link>
					<comments>https://anonyviet.com/gdscript-godot-engine-co-ban/#respond</comments>
		
		<dc:creator><![CDATA[AnonyViet]]></dc:creator>
		<pubDate>Fri, 03 Jul 2020 01:06:26 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[GDSCRIPT]]></category>
		<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[lập trình gane]]></category>
		<category><![CDATA[thiết kế game]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=20460</guid>

					<description><![CDATA[Chào các bạn! Tiếp tục với series Hướng dẫn cơ bản về Godot Engine. Bài viết hôm nay mình sẽ chia sẻ với các bạn về GDScript của Godot Engine. Bài viết gồm 2 phần là GDScript cơ bản và Hướng đối tượng trong GDScript. Trước khi vào phần 1 thì chúng ta bắt đầu [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Chào các bạn! Tiếp tục với series Hướng dẫn cơ bản về <a href="https://anonyviet.com/?s=Godot" target="_blank">Godot Engine</a>. Bài viết hôm nay mình sẽ chia sẻ với các bạn về GDScript của Godot Engine. Bài viết gồm 2 phần là GDScript cơ bản và Hướng đối tượng trong GDScript. Trước khi vào phần 1 thì chúng ta bắt đầu tìm hiểu sơ lược về GDScript nhé!</strong></p>
<h2><span style="font-size: 18pt">SƠ LƯỢC VỀ GDSCRIPT</span></h2>
<p>GDScript là ngôn ngữ lập trình bậc cao. Nó sử dụng cú pháp tương tự như Python (các khối dựa trên thụt lề và nhiều từ khóa tương tự nhau). Nó được tối ưu hóa và tích hợp chặt chẽ với Godot Engine, cho phép linh hoạt tuyệt vời để tạo và tích hợp nội dung cho game. Nếu bạn đã quen sử dụng Python rồi thì việc code với GDScript vô cùng dể dàng!</p>
<p><a href="https://anonyviet.com/wp-content/uploads/2020/07/GDSCRIPT-Godot-Engine-co-ban.jpg"><img decoding="async" class="aligncenter  size-full" src="https://anonyviet.com/wp-content/uploads/2020/07/GDSCRIPT-Godot-Engine-co-ban.jpg" alt="GDSCRIPT - Godot Engine cơ bản" title="GDSCRIPT - Godot Engine cơ bản 297"></a></p>
<h2><span style="font-size: 18pt">GDSCRIPT CƠ BẢN</span></h2>
<h3>1. Cấu trúc một script.gd</h3>
<p><img decoding="async" class="alignnone  size-full" src="https://anonyviet.com/wp-content/uploads/2020/07/Capture-1.png" alt="giới thiệu GDSCRIPT CƠ BẢN" title="GDSCRIPT - Godot Engine cơ bản 298"></p>
<table style="border-collapse: collapse;width: 100.267%;height: 103px">
<tbody>
<tr>
<td style="width: 100%"><code>extends Node # Khai báo kế thừa. Phải kế thừa đúng tên lớp (tên Node) mà bạn sử dụng.</code></p>
<p><code>var a = 0 # Biến toàn cục</code></p>
<p><code>var b = 0 # Biến toàn cục</code></p>
<p><code>func _ready(): # Hàm</code></p>
<p><code>.     var c = a + b # Biến cục bộ</code></td>
</tr>
</tbody>
</table>
<h3>2. GDSCRIPT CƠ BẢN</h3>
<h4>Các hàm chính trên GDScript</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>extends Node</code></p>
<p><code>func _init(): #Thực thi một lần duy nhất khi khởi chạy chương trình.</code></p>
<p><code>.     pass</code></p>
<p><code>func _ready(): #Thực thi một lần duy nhất khi Node sẵn sàng hoạt động.</code></p>
<p><code>.     pass</code></p>
<p><code>func _process(delta): #Hàm luôn thực thi lặp lại trong mỗi thời gian delta bằng nhau (không phù</code><code>hợp cho các hoạt động vật lí)</code></p>
<p><code>.     pass</code></p>
<p><code>func _physics_process(delta): #Hàm thực thi lặp lại trong mỗi thời gian delta tăng dần (thích hợp</code><code>cho hoạt động vật lí)</code></p>
<p><code>.     pass</code></td>
</tr>
</tbody>
</table>
<h4>Lệnh in Debug trên cửa sổ Console</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>func _ready():</code></p>
<p><code>.     var a = 4</code></p>
<p><code>.     print(a);</code></p>
<p><code>.     print("\nHello World")</code></p>
<p><code>Output:</code></p>
<p><code>4</code></p>
<p><code>Hello Word</code></td>
</tr>
</tbody>
</table>
<h4>Kiểu dữ liệu, biến, hằng và cách khai báo</h4>
<p>Các kiểu dữ liệu trên GDScript cũng tương tự trên Python có 2 dạng là kiểu nguyên thủy (không viết hoa kí tự đầu) và kiểu lớp (có viết hoa kí tự đầu).</p>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>extends Node</code></p>
<p><code>#var &lt;tên biến&gt; : [kiểu dữ liệu] (có thể "=" để gán giá trị trực tiếp mà không cần khai báo kiểu dữ kiệu (ép kiểu ngầm))</code></p>
<p><code>var a = 4</code></p>
<p><code>var a: int = 4</code></p>
<p><code>var a</code></p>
<p><code>a = 4</code></p>
<p><code>#các kiểu khai báo trên là tương tự như nhau. Ngoài ra ta còn có thể khai báo var a:=4.</code></p>
<p><code>const a = 4 #khai báo hằng. Lưu ý phải gán giá trị cho hằng.</code></p>
<p><code>var ab = Vecto2(0,0) # Biến kiểu lớp</code></p>
<p><code>var arr = [1, 2, 3] #khai báo mảng</code></p>
<p><code>var d = {2: 3, 4: "Hello"} #khai báo từ điển</code></td>
</tr>
</tbody>
</table>
<h4>Cấu trúc điều kiện IF&#8230;THEN&#8230;ELSE</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>func _ready():</code></p>
<p><code>#     if(&lt;điều kiện&gt;):</code></p>
<p><code>#          [tập lệnh phía sau dấu tab phải thẳng hàng]</code></p>
<p><code>#     else:</code></p>
<p><code>#          [tập lệnh phía sau dấu tab phải thẳng hàng]</code></p>
<p><code>.     var a = false</code></p>
<p><code>.     var b = 0</code></p>
<p><code>.     if(a):</code></p>
<p><code>.          b = 1</code></p>
<p><code>.     else:</code></p>
<p><code>.          b = 2</code></td>
</tr>
</tbody>
</table>
<h4>Cấu trúc Match</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>func _ready():</code></p>
<p><code>.     var a = 0</code></p>
<p><code>.     Match(a):</code></p>
<p><code>.          1:</code></p>
<p><code>.               [tập lệnh phía sau dấu tab phải thẳng hàng]</code></p>
<p><code>.          2:</code></p>
<p><code>.               [tập lệnh phía sau dấu tab phải thẳng hàng]</code></td>
</tr>
</tbody>
</table>
<h4>Vòng lặp For</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>func _ready():</code></p>
<p><code>.     for i in 5:</code></p>
<p><code>.          [tập lệnh phía sau dấu tab phải thẳng hàng]</code></p>
<p><code>.     for i in range(5):</code></p>
<p><code>.          [tập lệnh phía sau dấu tab phải thẳng hàng]</code></p>
<p><code>#i chạy từ 0 đến 5-1</code></td>
</tr>
</tbody>
</table>
<h4>Vòng lặp While</h4>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>func _ready():</code></p>
<p><code>.     while(&lt;điều kiện&gt;):</code></p>
<p><code>.          [tập lệnh phía sau dấu tab phải thẳng hàng]</code></td>
</tr>
</tbody>
</table>
<h2>HƯỚNG ĐỐI TƯỢNG TRONG GDSCRIPT</h2>
<p>Tạo và sử dụng lớp là 2 công việc thiết yếu trong lập trình hướng đối tượng. Dưới đây là công thức tạo và sử dụng lớp trên GDScript.</p>
<h3>Tạo lớp</h3>
<p>Xây dựng các thuộc tính (biến) và các phương thức (các hàm khởi tạo cho đối tượng)</p>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>class Math: #tên lớp</code></p>
<p><code>.      var total #thuộc tính</code></p>
<p><code>.      static func _sum(a: int, b: int) -&gt; int: #phương thức</code></p>
<p><code>.          return a+b</code></td>
</tr>
</tbody>
</table>
<h3>Sử dụng lớp (tạo đối tượng tương ứng với lớp)</h3>
<table style="border-collapse: collapse;width: 100%">
<tbody>
<tr>
<td style="width: 100%"><code>#var &lt;tên biến file script&gt; = preload("đường dẫn script")</code></p>
<p><code>var MathGD = preload("Math.gd")</code></p>
<p><code>func _ready():</code></p>
<p><code>#     var &lt;tên biến&gt; = &lt;tên biến script&gt;.&lt;tên lớp&gt;.new()</code></p>
<p><code>.     var a = MathGD.Math.new()</code></p>
<p><code>.     print(a.sum(1,2))</code></p>
<p><code>Output: 3</code></td>
</tr>
</tbody>
</table>
<p>Ngoài ra ta còn có thể sử dụng lớp bằng cách sử dụng kế thừa bằng extends. <strong>Lưu ý: </strong>Nếu bạn tạo lớp có kế thừa các <strong>lớp mặc định</strong> trong Godot thì ở <strong>script sử dụng lớp</strong> phải gán cho <em><strong>Node có cùng kiểu với lớp mà bạn đã khởi tạo trước đó và sử dụng.</strong></em></p>
<p><em>Bài viết hôm nay mình đã giới thiệu và chia sẻ với các bạn GDScript cơ bản trên Godot Engine. Nếu có thắc mắc hãy để lại bình luận hoặc góp ý nhé! Để nắm rõ hơn các bạn có thể tham khảo thêm các video cơ bản tại https://www.youtube.com/playlist?list=PLOk8LhtEwUVn8e3RUfk-rX_RB3f9_ulYg. Xin cảm ơn các bạn đã theo dõi bài viết! ?</em></p>
<h2>Câu hỏi thường gặp</h2>
<h3>GDScript có giống Python không?</h3>
<p>GDScript có cú pháp tương tự như Python, sử dụng thụt lề để định nghĩa khối lệnh và nhiều từ khóa giống nhau.  Vì vậy, nếu bạn quen thuộc với Python, việc học GDScript sẽ dễ dàng hơn.</p>
<h3>Các hàm chính trong GDScript là gì?</h3>
<p>Một số hàm chính bao gồm <code>_init()</code> (khởi tạo một lần), <code>_ready()</code> (khi Node sẵn sàng), <code>_process(delta)</code> (thực thi lặp lại, không phù hợp với vật lý), và <code>_physics_process(delta)</code> (thực thi lặp lại, thích hợp cho vật lý).</p>
<h3>Làm thế nào để in thông tin ra cửa sổ Console trong GDScript?</h3>
<p>Sử dụng hàm <code>print()</code>. Ví dụ: <code>print("Hello World")</code> sẽ in &#8220;Hello World&#8221; ra cửa sổ Console.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/gdscript-godot-engine-co-ban/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu Visual Scripting trong Godot Engine</title>
		<link>https://anonyviet.com/tim-hieu-visual-scripting-trong-godot-engine/</link>
					<comments>https://anonyviet.com/tim-hieu-visual-scripting-trong-godot-engine/#respond</comments>
		
		<dc:creator><![CDATA[AnonyViet]]></dc:creator>
		<pubDate>Mon, 29 Jun 2020 07:23:46 +0000</pubDate>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Godot]]></category>
		<category><![CDATA[GODOT ENGINE]]></category>
		<category><![CDATA[lập trình game]]></category>
		<category><![CDATA[thiết kế game]]></category>
		<category><![CDATA[Visual Scripting]]></category>
		<guid isPermaLink="false">https://anonyviet.com/?p=20116</guid>

					<description><![CDATA[Visual Scripting trong các Game Engine là gì? Không cần học lập trình nhưng vẫn lập trình game được? Viết tạo game sẽ tự động hóa dự trên sơ đồ mà bạn thiết kế. Việc còn lại hãy để Godot xử lý. Trước tiên chúng ta phải biết Visual scripting là gì: Visual Scripting là [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Visual Scripting trong các Game Engine là gì? Không cần học lập trình nhưng vẫn lập trình game được? Viết tạo game sẽ tự động hóa dự trên sơ đồ mà bạn thiết kế. Việc còn lại hãy để Godot xử lý.</strong></p>
<h2>Trước tiên chúng ta phải biết Visual scripting là gì:</h2>
<p>Visual Scripting là Ngôn ngữ lập trình trực quan cho phép người dùng lập trình bằng những bản vẽ thay vì là viết những dòng code.</p>
<p>Vậy thay vì viết code tạo nên một tựa game chúng ta có thể dùng Visual Scripting để làm game mà không cần coding.</p>
<h2>Để lập trình game với Visual Scripting chúng ta cần gì?</h2>
<p>Trước hết, hầu hết mỗi game engine đều có hỗ trợ Visual Scripting: ở <a href="https://anonyviet.com/tag/Godot/">Godot</a> là VisualScript, ở Unity thì chúng ta sẽ xài tool có thể là PlayerMaker…., ở Unreal Engine 4 sẽ là Blueprint.</p>
<p>Vậy những Engine lớn đã có hỗ trợ sẵn rồi bây giờ bản chỉ có việc là học cách để sử dụng nó.</p>
<p><a href="https://anonyviet.com/wp-content/uploads/2020/06/Visual-Scripting-Godot-engine.png"><img decoding="async" class="aligncenter  size-full" src="https://anonyviet.com/wp-content/uploads/2020/06/Visual-Scripting-Godot-engine.png" alt="Tìm hiểu Visual Scripting trong Godot Engine" width="655" height="316" title="Tìm hiểu Visual Scripting trong Godot Engine 300"></a></p>
<p style="text-align: center;">(Visual Scripting trong Godot)</p>
<h2>Vậy “Không cần học lập trình nhưng vẫn lập trình game được?”</h2>
<p>Câu trả lời cho điều này là: <strong>Được</strong></p>
<p>Nếu bạn chưa biết thì tựa game: The First Tree đã được tạo ra bằng Unity với Visual Scripting</p>
<p><a href="https://store.steampowered.com/app/555150/The_First_Tree/" target="_blank" rel="noopener">https://store.steampowered.com/app/555150/The_First_Tree/</a></p>
<p>Và người tạo ra nó là 1 người làm phim (film maker) hiện giờ anh ấy đang là full indie game developer. Tựa game này có doanh thu hơn $150.000 chỉ sau 1 năm upload lên steam.</p>
<p>Qua đó có thể thấy chỉ với Visual Scripting bạn có thể làm 1 tựa game hoàn chỉnh mà không cần code với 1 cách dễ dàng nhất.</p>
<h2>Những ai nên lập trình bằng Visual Scripting?</h2>
<ul>
<li>Theo mình, những bạn học thiết kế đồ họa nếu muốn lập trình game những không biết coding thì đây là một lựa chọn tuyệt vời.</li>
<li>Nhưng ai học kiến trúc thì lập trình với visual thì rất dễ dàng, bằng chứng là ông anh mình mới vô cái hiểu luôn :v.</li>
<li>Hay đơn giản hơn là nhưng bạn học sinh,sinh viên không muốn học code thì có thể dùng nó để lập trình.</li>
<li>Hoặc 1 nhóm nào đó sử dụng visual để làm đồ án hay gì đó mà không cần phải lập trình.</li>
<li>Cho những người chưa có kinh nghiệm lập trình</li>
</ul>
<p>Vậy đến đây là hết tiếp sau này sẽ có tutorials về Visual Scripting trên Godot.</p>
<h2>Câu hỏi thường gặp</h2>
<h3>Visual Scripting trong Godot có khó học không?</h3>
<p>Không khó! Visual Scripting sử dụng giao diện trực quan, giúp bạn tạo game bằng cách kéo thả các node thay vì viết code.  Thậm chí những người không có kinh nghiệm lập trình vẫn có thể bắt đầu dễ dàng.</p>
<h3>Tôi có thể tạo ra game hoàn chỉnh chỉ với Visual Scripting không?</h3>
<p>Có thể!  Nhiều game, kể cả những game thương mại thành công, đã được tạo ra hoàn toàn bằng Visual Scripting.  Khả năng tạo game hoàn chỉnh phụ thuộc vào quy mô và độ phức tạp của dự án, nhưng Visual Scripting cung cấp đủ công cụ cho nhiều loại game khác nhau.</p>
<h3>Visual Scripting phù hợp với ai?</h3>
<p>Visual Scripting rất lý tưởng cho người mới bắt đầu, người làm thiết kế đồ họa, kiến trúc sư, hoặc bất kỳ ai muốn tạo game mà không cần kiến thức lập trình chuyên sâu. Nó cũng là một công cụ tuyệt vời cho các dự án nhỏ hoặc để thử nghiệm ý tưởng game một cách nhanh chóng.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://anonyviet.com/tim-hieu-visual-scripting-trong-godot-engine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
