СОЗДАНИЕ ШАБЛОНА ИГРЫ

X Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

СОЗДАНИЕ ШАБЛОНА ИГРЫ

Корсаков Д.А. 1Коноплин Д.В. 1
1МБОУ СОШ №1
Ржаных О.С. 1
1МБОУ СОШ №1
Автор работы награжден дипломом победителя III степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Актуальность:

На сегодняшний день в мире существует средств для разработки игр. Наш проект использует движок Godotengine и создан для показа его возможностей в подобных играх, а также мы выложим исходный код и фалы, чтобы будущие разработчики на данном движке смогли понять как он устроено и как с ним нужно работать.

Также наша игра имеет малый размер и низкий расход компьютерных ресурсов, что позволяет играть в неё на любом ПК.

Цель проекта: создание игры

Задачи проекта:

1) Собрать и проанализировать информацию о подобных существующих играх;

2) Выбрать программную среду и движок для игры;

3) Разработать структуру, дизайн, идею и удобную навигацию в игре.

МЕТОДЫ:

1) Изучение и анализ литературы и материалов сети Internet;

2) Знакомство с программой и движком для создания игры;

3) Работа в разных средах программирования;

4) Создание графических объектов;

5) Создание и разработка структуры видеоигры;

6) Экспортирование проекта .

7) Загрузить его в библиотеку шаблонов

Инструменты:

Godotengine-игровой движок

Paint3D-инструмент для создания графических элементов

Windows 10-операционная система

Преимущества:

-Низкий размер игрового движка

-Редактор написан на C++ и работает в Windows, Linux, MacOSX;

-Исходный код открыт для доработки и модификации;

-Не нужны дополнительные программы (отдельный редактор карт и т.д.);

-Работает даже на весьма слабых компьютерах;

-Есть визуальный редактор, редактор анимации, тайлы и т.д.;

-Встроены скрипты, язык свой, но синтаксис от Python (куда проще C#, Java, C++);

-Экспортировать проект можно практически на любую платформу (кроме консолей).

Игровой движок:

Godotengine, пожалуй лучший инструмент для создания 2D игр и простеньких 3D. Данный инструмент также имеет русскоязычные источники обучения и полностью бесплатную модель распространения, чем и обусловлен его выбор.

Его задача быть максимально интегрированной и самостоятельной средой для разработки игр.

Основная часть

Для создания нашей игры мы использовали движок Godotengine, т.к. в отличие от других решений он имеет ряд преимуществ:

-Размер инструмента

-Простота освоения

-Возможность модификации пользователями

-Оптимизация почти под любые ПК

-Присутствие большинства инструментов непосредственно внутри движка

Задача Godot — быть максимально интегрированной и самодостаточной средой для разработки игр. Среда позволяет разработчикам создавать игры с нуля, не пользуясь более никакими инструментами, за исключением тех, которые необходимы для создания игрового контента (элементы графики, музыкальные треки и т. д.). Процесс программирования также не требует внешних инструментов (хотя при необходимости использовать внешний редактор это можно сделать относительно легко).

Также, пожалуй, наилучшим решением для создания пискелизированных текстур является Paint 3D - улучшенная версия старого paint с существенными доработками. Она позволяет создавать текстуры в любом разрешении, используя современные инструменты и возможности,

Результаты.

Изучив движок и проработав концепцию игры мы начали её создание. За основу геймплея была взята концепция “олдскульных” платформеров, а также некоторые идеи нашего коллектива.

Игрок:

Переменные в коде, отвечающие за физику игрока, его скорость, анимации и взаимодействие:

extends KinematicBody2D

const GRAVITY_VEC = Vector2(0, 900)

const FLOOR_NORMAL = Vector2(0, -1)

const WALK_SPEED = 80

const STATE_WALKING = 0

const STATE_KILLED = 1

var linear_velocity = Vector2()

var direction = -1

var anim=""

var slime_p = false

var state = STATE_WALKING

onready var detect_floor_left = $detect_floor_left

onready var detect_wall_left = $detect_wall_left

onready var detect_floor_right = $detect_floor_right

onready var detect_wall_right = $detect_wall_right

onready var sprite = $sprite

func _physics_process(delta):

var new_anim = "idle"

if state==STATE_WALKING:

linear_velocity += GRAVITY_VEC * delta

linear_velocity.x = direction * WALK_SPEED

linear_velocity = move_and_slide(linear_velocity, FLOOR_NORMAL)

if not detect_floor_left.is_colliding() or detect_wall_left.is_colliding():

direction = 1.0

linear_velocity.x = WALK_SPEED * delta

if not detect_floor_right.is_colliding() or detect_wall_right.is_colliding():

direction = -1.0

linear_velocity.x = -WALK_SPEED * delta

sprite.scale = Vector2(direction, 1.0)

new_anim = "walk"

# else:

# new_anim = "explode"

if anim != new_anim:

anim = new_anim

$anim.play(anim)

#Bullet

func kill():

queue_free()

extends KinematicBody2D

const GRAVITY_VEC = Vector2(0, 900)

const FLOOR_NORMAL = Vector2(0, -1)

const SLOPE_SLIDE_STOP = 25.0

const SIDING_CHANGE_SPEED = 10

const BULLET_VELOCITY = 1000

const SHOOT_TIME_SHOW_WEAPON = 0.2

export var WALK_SPEED = 250 # pixels/sec

export var MIN_ONAIR_TIME = 0.2

export var JUMP_SPEED = 400

var vec = Vector2(-1, 0)

var linear_vel = Vector2()

var onair_time = 0 #

var on_floor = false

var shoot_time = 99999 #time since last shot

var anim = ""

var walk_p = false

var Bullet = preload ("res://scenes/Bullet.tscn")

#cache the sprite here for fast access (we will set scale to flip it often)

onready var sprite = $sprite

onready var tm = 0

onready var Global = get_node("/root/Global")

func _physics_process(delta):

#increment counters

onair_time += delta

shoot_time += delta

### ANIMATION ###

var new_anim = "stand"

if on_floor:

if linear_vel.x < -SIDING_CHANGE_SPEED:

sprite.scale.x = -1

new_anim = "move"

if linear_vel.x > SIDING_CHANGE_SPEED:

sprite.scale.x = 1

new_anim = "move"

else:

# We want the character to immediately change facing side when the player

# tries to change direction, during air control.

# This allows for example the player to shoot quickly left then right.

if Input.is_action_pressed("ui_left") and not Input.is_action_pressed("ui_right"):

sprite.scale.x = -1

if Input.is_action_pressed("ui_right") and not Input.is_action_pressed("ui_left"):

sprite.scale.x = 1

if linear_vel.y < 0:

new_anim = "jump"

else:

new_anim = "fall"

# if shoot_time < SHOOT_TIME_SHOW_WEAPON:

# new_anim += "_weapon"

if new_anim != anim:

anim = new_anim

$anim.play(anim)

#Death&Teleport

var cnt = get_slide_count() - 1

if cnt >= 0:

var col = get_slide_collision(cnt)

if col && col.collider.has_method('kill'):

queue_free()

Global.coins = 0

get_tree().reload_current_scene()

if col && col.collider.has_method('teleport'):

get_tree().change_scene("res://scenes/Main menu.tscn")

extends RigidBody2D

var tm = 0

func _physics_process(delta):

tm += delta

if tm >= 1:

queue_free()

func _on_Bullet_body_entered(body):

tm = 1

if body.has_method('kill'):

body.call('kill')

extends Area2D

var taken = false

var player = preload("res://scripts/Player.gd")

var coin = 0

onready var Global = get_node("/root/Global")

func _on_Chest_body_entered(body):

if not taken && body is player && coin == 0:

$chest/anim.play("open")

$audio.play()

taken = true

coin += 1

Global.coins += 1

if not taken && body is player && coin > 0:

$chest/anim.play("open_no_coin")

$audio.play()

taken = true

func _on_Chest_body_exited(body):

if taken && body is player:

$chest/anim.play("close")

$audio.stop()

taken = false

Выводы.

Конечной целью нашего проекта было создание шаблона игры, для распространения в библиотеках godotengine, чтобы упростить его изучение новичками. Процесс создания данной игры помог нам лучше разобраться в данном движке. Также мы смогли улучшить свои познания в программировании и смогли написать сложные скрипты для создания комфортного геймплея.

Списокиспользованныхисточников.

1) Ariel Manzur, George Marques, Godot Engine Game Development in 24 Hours, Sams Teach Yourself: The Official Guide to Godot 3.0 /Ariel Manzur, George Marques//: Sams Publishing , 2018г-С. 99998

2)Бьерн Страуструп, Программирование. Принципы и практика с использованием C++ / Бьерн Страуструп// , 2015 -: С.: 1328

3) Крис Брэдфилд, Godot Engine Game Development Projects: Build five cross-platform 2D and 3D games with Godot 3.0/ Крис Брэдфилд// E:-Packt Publishing, 2018гС. 298

4) Jason Gregory, Game Engine Architecture, Third Edition/ Jason Gregory // A K Peters/CRC Press, 2018г,- С. 1235

5) Colleen Macklin and John Sharp, Games, Design and Play/ Colleen Macklin and John Sharp// Addison-Wesley Professional, 2016г- С. 288

6) GitHub, GodotEngine - многоплатформенный 2D и 3D игровой движок/ GitHub// платформа кодов- URL: https://github.com/godotengine/godot( дата обращения: 21.01.2019).

7) SKANERSOFT, SKANERSOFT-Делать игры? Вот так!/ SKANERSOFT// платформа видео- URL: https://www.youtube.com/user/SkanerSoft (дата обращения: 19.12.2018г)

Просмотров работы: 66