Godot dagi birinchi o'yinim.

Salom. Ochig'i o'yin tuzishga kompyuter degan matoxni ko'rganimdan beri qiziqaman. Shu qiziqishlarim samarasi mana asta sekin chiqishni boshladi. Shu kungacha OpenGL va 3D grafika haqida o'qimagan kitoblarim qolmadi desam ham bo'ladi. Ancha tushunchaga ega bo'lgan paytimda o'rtada engine degan narsani topib oldim.




Rasmda ko'rib turganingiz Godot engine deyiladi. Bungacha OGRE, Unity3d, AndEngine va OpenGL da o'zim hammasini 0 dan yozib ishlatib ko'rgandim. Windows OS borligida Unity3d da rosa kod yozdim (oxiriga yetmagan o'yinlar :( ). Keyin orada Ubuntuga o'tdim va pythonga qiziqib qoldim. Keyin internetdan python scriptni qo'llab-quvatlaydigan engine qidirdim, ubuntu uchun. Ro'yxatlarning birinchisida Godot chiqib keldi.

Qiziqib tuzilgan o'yinlarni ko'rsam: okamstudio.com/portfolio/ va buning ustiga hali yosh va opensource ekan. Hamma taraflama ma'qul keldi. (Unity3d ni sotib olish kerak (tekin versiyasini chegaralangan)).

Hammasidan qizig'i linux uchun binar fayli 26 Mb chiqarkan + 110 Mb export templates ya'ni har xil platformalarga moslashtirib export qiladigan qo'shimcha kutubxonalar.

Albatta bu engine ni kamchiliklari juda ko'p lekin o'z navbatida shu kamchiliklardan qochqan holda ancha-buncha o'yinlarni qilsa bo'ladi. Eng asosiy kamchiligi dokumentatsiyaning to'liq yozilmaganligir. Ayrim hollarda source code ni kovlab o'zimga kerak narsalarni topganman.

Asosiy sayt: www.godotengine.org/wp/
Source code: github.com/okamstudio/godot
Documentation: github.com/okamstudio/godot/wiki

Man Ubuntu holatida yozib ketaman, manimcha Windows da ham Mac da ham xuddiy shunday ishlasa kerak. Birinchi marta ishga tushirganingizda



quyidagi oyna chiqadi. Undan «New project» ni bosib
Project path — o'yin fayllarining papkasi (/home/shranet/projects/games/moveball mani holatimda)
Project name — o'yin nomini kiritib (MoveBall mani holatimda)
Create tugmasini bosamiz. Shunda proyektlar ro'yxatiga «MoveBall» nomli proyekt ham qo'shiladi. Uni tanlab Edit tugmasini bosamiz. Shunda



oynasi chiqadi.

Izohlar:
Node — o'yindagi bitta obyekt.
Scene — Node lardan tashkil topgan o'yin sahnasi.
Inspector — tanlangan Node ning parametrlarini o'zgartiradigan oyna
FileSystem — proyekt fayllar ro'yxati

Godot asosiy talablaridan bir Sence da kamida bitta Node bo'lishi shart. Keling endi o'yin sahnasiga bitta obyekt qo'shsak. Buning uchun «Scene» oynasidan «Add/Create new Node» tugmasini bosamiz va «Node2D» ni tanlaymiz (Ctrl + S ni bosib saynani HDD ga saqlab ham qo'yamiz, monini «moveball.scn» deb ataymiz. Bu nom kerak bo'ladi).

Node2D — 2d oyin komponentlarining base (ota) node (class) i

Endi «Scene» oynasidan «Node2D» ni tanlab «F2» ni bosib, «root_node» ga o'zgartiramiz. Keyin shu «root_node» ni tanlab yana «Add/Create new Node» tugmasini bosamiz va «Sprite» ni tanlab «Open» ni bosamiz.

Sprite Node — 2d o'yinda rasm obyekt vazifasini bajaradi.

Endi «Sprite» ni tanlab, nomini «ball» ga o'zgartiramiz va shu «ball» ni tanlab «Inspector» oynasiga tushamiz. Avvalo proyekt papkasiga ball.png rasmni nusxalab tashlab, keyin oynadagi «Texture» bandini tanlab, undan «Load» ni va «ball.png» ni tanlaymiz va «Open» tugmasini bosamiz.

Agar editorga qarasangiz biz tanlagan «ball.png» ko'ringan bo'lishi kerak. Endi «Scene» oynasiga qaytib «ball» ni tanlaymiz va «Edit/Create the Node Script» tugmasini bosamiz. Shiqqan oynadagi
Path — res://moveball.gd deb yozib

«Create» tugmasini bosamiz. Shunda bizga quyidagi script ni yaratib beradi
extends Sprite

# member variables here, example:
# var a=2
# var b="textvar"

func _ready():
	# Initalization here
	pass


Bu GDScript tilidir (http://www.codenix.com/gdscript.html). Ballni harakatlantirish uchun man quyidagicha o'zgartirishlar kiritdim.
extends Sprite

var BALL_SPEED = 300

func _process(delta):
	var pos = get_pos()
	if Input.is_key_pressed(KEY_LEFT):
		pos.x -= BALL_SPEED * delta
		
	if Input.is_key_pressed(KEY_RIGHT):
		pos.x += BALL_SPEED * delta
		
	if Input.is_key_pressed(KEY_DOWN):
		pos.y += BALL_SPEED * delta
		
	if Input.is_key_pressed(KEY_UP):
		pos.y -= BALL_SPEED * delta
	
	set_pos(pos)

func _ready():
	set_process(true)


Izoh:
_process(delta) — bu funksiyasi har bir frame (barcha obyektlarni chizib chiqish bomaynida) da chaqiriladi. delta parametri esa shu frame lar orasidagi vaqt.

Qolgan funksiyalar haqida

Oxirgi qadam, «F6» tugmasini bossangiz quyidagi oyna chiqishi kerak va klaviaturadan chap, o'ng strelkalarni bossangiz ball harakatlanishi kerak.



Shuning bilan qisqacha bo'lgan maqolam ham oxiriga yetdi.

Qo'chimchasiga yaqinda tugatgan o'yinimni ham qo'yaman. O'yin nomi «Ball vs ball» grafikasi juda oddiy (internetdan olingan). Lekin 99% oxiriga yetgan o'yin.

Fayllar:
Windows x86
Windows x86-64
Linux x86
Linux x86-64
data.pck

Qaysi platformaga ko'chirishingizdan qat'iy nazar, data.pck ni ham qo'shib oling. Aslida busiz ham ishlashi mumkin (test chala qilingan)

O'yin va Godot haqida savollar va takliflar bo'lsa marhamat.

10 комментариев

ruslanmedia
O‘yinlardan tashqari, Unity 3D kabi 3D grafikdagi narsalar ham yasash mumkin ekanmi? Misol uchun Google Streetviewga o‘xshab rasmlar joylab bir obeyktni personaj bilan aylanib chiqish?
0
ruslanmedia
oshish vaqtida shu muammo chiqdi:
linux-bvsb-x86-64.bin: 1: linux-bvsb-x86-64.bin: 8: not found
linux-bvsb-x86-64.bin: 2: linux-bvsb-x86-64.bin: Syntax error: ")" unexpectedlinux-bvsb-x86-64.bin: 1: linux-bvsb-x86-64.bin:
cannot create ��@�/��@/���E: Directory nonexistent
linux-bvsb-x86-64.bin: 1: linux-bvsb-x86-64.bin: ELF: not found
0
ruslanmedia
ochish vaqtida demoqchi edim
0
shranet
data.pck ni olib yoniga qo'yib ko'ring.
0
ruslanmedia
data.pckni linux-bvsb-x86-64.bin fayli turgan joyga qo‘ydim. Shu muammo chiqdi. Ubuntu 64 bit manda
0
shranet
Manda ham Ubuntu x64. Manimcha sizda VideoCard ni driverni o'rnatilmagan. Agar o'rnatilgan bo'lsa
chmod 755

berib papkaga 777 berib ishlatib ko'ring.
0
ruslanmedia
Rostan ham chmoddan ekan. o‘xshadi rahmat. Qiziqarli o‘yincha bo‘libdi :D
0
shranet
Taklif va kamchiliklar bo'lsa kutaman.
0
Phoenix
pygame ni sinab ko'rmadingizmi?
0
shranet
Uni ko'rgandim, lekin nimagadir manda qiziqish ortmagan. Shunga Godot ni tanlaganman.
0