chevron_left
Разработка Игр На Python И Kivy - Туториал - Часть 1

Разработка Игр На Python И Kivy - Туториал - Часть 1

Метки: game , python , tutorial , kivy

Published 14 августа 2020 г. 18:09

Share this post:

Facebook sign-in

Добро пожаловать в серию руководств по Python + Kivy.

Kivy - это многоплатформенная библиотека разработки графического интерфейса для Python, которая может работать в Windows, Mac, Linux, Android и iOS. Вы можете создать приложение в одном месте и использовать его практически на всех устройствах.

Чтобы установить Kivy, перейдите на Kivy.org, затем перейдите к загрузке и следуйте инструкциям для вашей операционной системы и версии Python.

В этом уроке мы создадим инди-игру с ракетами и астероидами, которая будет выглядеть примерно так: у нас будет управляемая ракета, вращающиеся астероиды, отслеживание очков, здоровье, апгрейды и так далее:

Rocket game

 

Часть 1

Итак, приступим.

В этой части мы рассмотрим загрузку необходимых модулей, запуск приложения и построение игрового меню, которое в конце должно выглядеть так:

Game Menu

 

В своей рабочей папке создайте файл с именем menu.py и добавьте в него следующий код:

from kivy.config import Config

# отключить изменение размера приложения
Config.set('graphics', 'resizable', False)


# наше меню и логика приложения будут между этой строкой и следующей

# наше меню и логика приложения будут между этой строкой и предыдущей


# запустить клиентское приложение
if __name__ == '__main__':
    ClientApp().run()

 

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

Последняя часть просто запускает приложение, которое мы напишем через секунду.

 

Добавьте следующий код в menu.py между строками комментариев:

 

from kivy.app import App
from kivy.uix.widget import Widget


class ClientApp(App):
    def build(self):
        # здесь находится базовый виджет
        parent = Widget()  # это пустой держатель для кнопок и т.д.
        Window.clearcolor = (0, 0, 0, 1) # удалить цвет из виджета

        return parent

 

Эта часть будет нашим базовым, основой нашего приложения. ClientApp наследуется от основного приложения kivy. Здесь ничего особенного не произойдет, у нас будет просто основной виджет без цвета, к которому мы позже добавим наше настоящее меню.

 

Добавьте следующий код над классом ClientApp:

 

from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.core.window import Window


class Menu(Widget):
    # это основной виджет, содержащий меню

    def __init__(self, **kwargs):
        # эта функция переопределит поведение init по умолчанию
        # для вызова функции, которая будет строить наше меню
        super(Menu, self).__init__(**kwargs)
        self.menu()

    def menu(self):
        self.clear_widgets()

        self.layout = BoxLayout(orientation='vertical')
        self.layout.width = Window.width/2
        self.layout.height = Window.height/2
        self.layout.x = Window.width/2 - self.layout.width/2
        self.layout.y = Window.height/2 - self.layout.height/2

        startGame = Button(text="Start Game")
        startGame.background_color = [.4, .4, .4, .4]
        self.layout.add_widget(startGame)

        upgrades = Button(text="Upgrades")
        upgrades.background_color = [.4, .4, .4, .4]
        self.layout.add_widget(upgrades)

        quitGame = Button(text="Quit Game")
        quitGame.background_color = [.4, .4, .4, .4]
        self.layout.add_widget(quitGame)


        self.add_widget(self.layout)

 

Это довольно много кода, но не беспокойтесь, мы рассмотрим каждую часть!

Сначала мы переопределяем метод __init__ виджета, чтобы при добавлении виджета вызывался дополнительный метод. Именно этот метод будет одним из основных в нашем меню.

Итак, к способу меню. Первое, что мы делаем, это вызываем clear_widgets. Мы делаем это, чтобы убрать с экрана любые другие виджеты. Конечно, сейчас у нас их нет, но когда мы действительно реализуем игру, они появятся!

 

Затем мы добавляем прямоугольный макет коробки с вертикальной ориентацией. Это означает, что наши кнопки будут располагаться вертикально. Представьте его как своего рода невидимый контейнер. Мы устанавливаем ширину и высоту макета равными половине окна. Kivy автоматически получит это из объекта Window! Затем мы помещаем макет в середину окна.

Наконец, мы добавляем несколько кнопок. Мы создаем экземпляры кнопок и даем им имя с помощью атрибута text. Затем мы задаем цвет фона и делаем их полупрозрачными. Вы можете дать им любой цвет в диапазоне rgba, со значениями от 0 до 1, как цветовую пропорцию. Нам не нужно беспокоиться о размере кнопки, поскольку Kivy заполнит родительский виджет. Если мы добавим дополнительные кнопки, Kivy автоматически масштабирует старые так, чтобы все кнопки полностью заполнялись внутри BoxLayout.

Теперь, если вы запустите приложение, оно должно выглядеть так:

 

Почти сделано! Теперь нам просто нужно добавить фоновое изображение.

 

Добавьте следующий код чуть выше строки self.add_widget (self.layout):

 

self.img = Image(source='image.png')
self.img.size = (Window.width*1.5, Window.height*1.5)
self.img.pos = (-Window.width*0.3, -Window.height*0.3)
self.img.opacity = 0.35
self.add_widget(self.img)

 

Измените "image.png" на любое изображение, которое вы хотите использовать в качестве фона. Храните это изображение в той же папке, что и menu.py.

Мы устанавливаем размер изображения немного больше размера окна, поэтому у нас не осталось пустых мест. Затем мы центрируем изображение внутри приложения. Это значение пропорционально размеру изображения, так что Size * Pos = 0,5 (или как можно ближе), таким образом перекрывая центр нашего изображения с центром нашего приложения.

Все сделано! Теперь, если вы запустите свое приложение, оно должно выглядеть примерно так:

 

Если у вас есть вопросы, оставьте комментарий ниже, и я постараюсь помочь. Кроме того, если вам нравится этот урок, не стесняйтесь Поделиться!

 

Share this post:

Facebook sign-in

Similar posts
There are no similar posts yet.
0 comments

You have to login to comment.


public