pygame init что это

Pygame init что это

The pygame package represents the top-level package for others to use. Pygame itself is broken into many submodules, but this does not affect programs that use pygame.

When you import pygame all available pygame submodules are automatically imported. Be aware that some of the pygame modules are considered optional, and may not be available. In that case, pygame will provide a placeholder object instead of the module, which can be used to test for availability.

Initialize all imported pygame modules. No exceptions will be raised if a module fails, but the total number if successful and failed inits will be returned as a tuple. You can always initialize individual modules manually, but pygame.init() initialize all imported pygame modules is a convenient way to get everything started. The init() functions for individual modules will raise exceptions when they fail.

You may want to initialize the different modules separately to speed up your program or to not use modules your game does not require.

It is safe to call this init() more than once as repeated calls will have no effect. This is true even if you have pygame.quit() all the modules.

Uninitialize all pygame modules that have previously been initialized. When the Python interpreter shuts down, this method is called regardless, so your program should not need it, except when it wants to terminate its pygame resources and continue. It is safe to call this function more than once as repeated calls have no effect.

Calling pygame.quit() uninitialize all pygame modules will not exit your program. Consider letting your program end in the same way a normal Python program will end.

Returns True if pygame is currently initialized.

This exception is raised whenever a pygame or SDL operation fails. You can catch any anticipated problems and deal with the error. The exception is always raised with a descriptive message about the problem.

Derived from the RuntimeError exception, which can also be used to catch these raised errors.

SDL maintains an internal error message. This message will usually be given to you when pygame.error() standard pygame exception is raised, so this function will rarely be needed.

SDL maintains an internal error message. This message will usually be given to you when pygame.error() standard pygame exception is raised, so this function will rarely be needed.

Returns the three version numbers of the SDL library. This version is built at compile time. It can be used to detect which features may or may not be available through pygame.

Returns the byte order of the SDL library. It returns 1234 for little endian byte order and 4321 for big endian byte order.

When pygame.quit() uninitialize all pygame modules is called, all registered quit functions are called. Pygame modules do this automatically when they are initializing, so this function will rarely be needed.

This function is used in encoding file paths. Keyword arguments are supported.

New in pygame 1.9.2: (primarily for use in unit tests)

New in pygame 1.9.2: (primarily for use in unit tests)

This module is automatically imported into the pygame package and can be used to check which version of pygame has been imported.

This is the version represented as a string. It can contain a micro release number as well, e.g. ‘1.5.2’

This version information can easily be compared with other version numbers of the same format. An example of checking pygame version numbers would look like this:

The Mercurial node identifier of the repository checkout from which this package was built. If the identifier ends with a plus sign ‘+’ then the package contains uncommitted changes. Please include this revision number in bug reports, especially for non-release pygame builds.

This is the SDL library version represented as an extended tuple. It also has attributes ‘major’, ‘minor’ & ‘patch’ that can be accessed like this:

printing the whole thing returns a string like this:

Setting Environment Variables

Some aspects of pygame’s behaviour can be controlled by setting environment variables, they cover a wide range of the library’s functionality. Some of the variables are from pygame itself, while others come from the underlying C SDL library that pygame uses.

In python, environment variables are usually set in code like this:

Or to preserve users ability to override the variable:

If the variable is more useful for users of an app to set than the developer then they can set it like this:

Windows:

Linux/Mac:

For some variables they need to be set before initialising pygame, some must be set before even importing pygame, and others can simply be set right before the area of code they control is run.

Below is a list of environment variables, their settable values, and a brief description of what they do.

Pygame Environment Variables

These variables are defined by pygame itself.

This makes pygame use the SDL2 blitter for all alpha blending. The SDL2 blitter is sometimes faster than the default blitter but uses a different formula so the final colours may differ. Must be set before pygame.init() initialize all imported pygame modules is called.

This stops the welcome message popping up in the console that tells you which version of python, pygame & SDL you are using. Must be set before importing pygame.

This switches the pygame.font module to a pure freetype implementation that bypasses SDL_ttf. See the font module for why you might want to do this. Must be set before importing pygame.

In pygame 2.0.3, backends can be set programmatically instead, and the old OpenCV backend has been replaced with one on top of «opencv-python,» rather than the old «highgui» OpenCV port. Also, there is a new native Windows backend available.

SDL Environment Variables

These variables are defined by SDL.

For documentation on the environment variables available in pygame 1 try here. For Pygame 2, some selected environment variables are listed below.

By default pygame apps disable screensavers while they are running. Setting this environment variable allows users or developers to change that and make screensavers run again.

By default SDL tries to disable the X11 compositor for all pygame apps. This is usually a good thing as it’s faster, however if you have an app which doesn’t update every frame and are using linux you may want to disable this bypass. The bypass has reported problems on KDE linux. This variable is only used on x11/linux platforms.

Источник

Библиотека Pygame / Часть 1. Введение

Это первая часть серии руководств «Разработка игр с помощью Pygame». Она предназначена для программистов начального и среднего уровней, которые заинтересованы в создании игр и улучшении собственных навыков кодирования на Python.

Код в уроках был написан на Python 3.7 и Pygame 1.9.6

Что такое Pygame?

Pygame — это «игровая библиотека», набор инструментов, помогающих программистам создавать игры. К ним относятся:

Игровой цикл

В сердце каждой игры лежит цикл, который принято называть «игровым циклом». Он запускается снова и снова, делая все, чтобы работала игра. Каждый цикл в игре называется кадром.

В каждом кадре происходит масса вещей, но их можно разбить на три категории:

Речь идет обо всем, что происходит вне игры — тех событиях, на которые она должна реагировать. Это могут быть нажатия клавиш на клавиатуре, клики мышью и так далее.

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

В этом шаге все выводится на экран: фоны, персонажи, меню. Все, что игрок должен видеть, появляется на экране в нужном месте.

Время

Еще один важный аспект игрового цикла — скорость его работы. Многие наверняка знакомы с термином FPS, который расшифровывается как Frames Per Second (или кадры в секунду). Он указывает на то, сколько раз цикл должен повториться за одну секунду. Это важно, чтобы игра не была слишком медленной или быстрой. Важно и то, чтобы игра не работала с разной скоростью на разных ПК. Если персонажу необходимо 10 секунд на то, чтобы пересечь экран, эти 10 секунд должны быть неизменными для всех компьютеров.

Создание шаблона Pygame

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

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

Дальше необходимо открыть окно игры:

Теперь необходимо создать игровой цикл:

Раздел рендеринга (отрисовки)

Начнем с раздела отрисовки. Персонажей пока нет, поэтому экран можно заполнить сплошным цветом. Чтобы сделать это, нужно разобраться, как компьютер обрабатывает цвета.

Экраны компьютеров сделаны из пикселей, каждый из которых содержит 3 элемента: красный, зеленый и синий. Цвет пикселя определяется тем, как горит каждый из элементов:
pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Каждый из трех основных цветов может иметь значение от 0 (выключен) до 255 (включен на 100%), так что для каждого элемента есть 256 вариантов.

Узнать общее количество отображаемых компьютером цветов можно, умножив:

Теперь, зная, как работают цвета, можно задать их в начале программ:

А после этого — заполнить весь экран.

Но этого недостаточно. Дисплей компьютера работает не так. Изменить пиксель — значит передать команду видеокарте, чтобы она передала соответствующую команду экрану. По компьютерным меркам это очень медленный процесс. Если нужно нарисовать на экране много всего, это займет много времени. Исправить это можно оригинальным способом, который называется — двойная буферизация. Звучит необычно, но вот что это такое.

Представьте, что у вас есть двусторонняя доска, которую можно поворачивать, показывая то одну, то вторую сторону. Одна будет дисплеем (то, что видит игрок), а вторая — оставаться скрытой, ее сможет «видеть» только компьютер. С каждым кадром рендеринг будет происходить на задней части доски. Когда отрисовка завершается, доска поворачивается и ее содержимое демонстрируется игроку.

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

А это значит, что процесс отрисовки происходит один раз за кадр, а не при добавлении каждого элемента.

В pygame это происходит автоматически. Нужно всего лишь сказать доске, чтобы она перевернулась, когда отрисовка завершена. Эта команда называется flip() :

Главное — сделать так, чтобы функция flip() была в конце. Если попытаться отрисовать что-то после поворота, это содержимое не отобразится на экране.

Раздел ввода (событий)

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

События происходят постоянно. Что, если игрок нажимает кнопку прыжка во время отрисовки? Это нельзя игнорировать, иначе игрок будет разочарован. Для этого pygame сохраняет все события, произошедшие с момента последнего кадра. Даже если игрок будет лупить по кнопкам, вы не пропустите ни одну из них. Создается список, и с помощью цикла for можно пройтись по всем из них.

Контроль FPS

Пока что нечего поместить в раздел Update (обновление), но нужно убедиться, что настройка FPS контролирует скорость игры. Это можно сделать следующим образом:

Команда tick() просит pygame определить, сколько занимает цикл, а затем сделать паузу, чтобы цикл (целый кадр) длился нужно время. Если задать значение FPS 30, это значит, что длина одного кадра — 1/30, то есть 0,03 секунды. Если цикл кода (обновление, рендеринг и прочее) занимает 0,01 секунды, тогда pygame сделает паузу на 0,02 секунды.

Наконец, нужно убедиться, что когда игровой цикл завершается, окно игры закрывается. Для этого нужно поместить функцию pygame.quit() в конце кода. Финальный шаблон pygame будет выглядеть вот так:

В следующем руководстве этот шаблон будет использован как отправная точка для изучения процесса отрисовки объектов на экране и их движения.

Источник

Pygame init что это

Getting pygame imported and initialized is a very simple process. It is also flexible enough to give you control over what is happening. Pygame is a collection of different modules in a single python package. Some of the modules are written in C, and some are written in python. Some modules are also optional, and might not always be present.

This is just a quick introduction on what is going on when you import pygame. For a clearer explanation definitely see the pygame examples.

Import¶

First we must import the pygame package. Since pygame version 1.4 this has been updated to be much easier. Most games will import all of pygame like this.

The first line here is the only necessary one. It imports all the available pygame modules into the pygame package. The second line is optional, and puts a limited set of constants and functions into the global namespace of your script.

An important thing to keep in mind is that several pygame modules are optional. For example, one of these is the font module. When you «import pygame», pygame will check to see if the font module is available. If the font module is available it will be imported as «pygame.font». If the module is not available, «pygame.font» will be set to None. This makes it fairly easy to later on test if the font module is available.

Before you can do much with pygame, you will need to initialize it. The most common way to do this is just make one call.

This will attempt to initialize all the pygame modules for you. Not all pygame modules need to be initialized, but this will automatically initialize the ones that do. You can also easily initialize each pygame module by hand. For example to only initialize the font module you would just call.

Note that if there is an error when you initialize with «pygame.init()», it will silently fail. When hand initializing modules like this, any errors will raise an exception. Any modules that must be initialized also have a «get_init()» function, which will return true if the module has been initialized.

It is safe to call the init() function for any module more than once.

Modules that are initialized also usually have a quit() function that will clean up. There is no need to explicitly call these, as pygame will cleanly quit all the initialized modules when python finishes.

Источник

Библиотека Pygame / Часть 1. Введение

Это первая часть серии руководств « Разработка игр с помощью Pygame ». Она предназначена для программистов начального и среднего уровней, которые заинтересованы в создании игр и улучшении собственных навыков кодирования на Python.

Что такое Pygame?

Pygame — это «игровая библиотека», набор инструментов, помогающих программистам создавать игры. К ним относятся:

Графика и анимация

Звук (включая музыку)

Управление (мышь, клавиатура, геймпад и так далее)

Игровой цикл

В сердце каждой игры лежит цикл, который принято называть «игровым циклом». Он запускается снова и снова, делая все, чтобы работала игра. Каждый цикл в игре называется кадром.

В каждом кадре происходит масса вещей, но их можно разбить на три категории:

1.Обработка ввода (события)

Речь идет обо всем, что происходит вне игры — тех событиях, на которые она должна реагировать. Это могут быть нажатия клавиш на клавиатуре, клики мышью и так далее.

2.Обновление игры

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

3.Рендеринг (прорисовка)

В этом шаге все выводится на экран: фоны, персонажи, меню. Все, что игрок должен видеть, появляется на экране в нужном месте.

Время

Еще один важный аспект игрового цикла — скорость его работы. Многие наверняка знакомы с термином FPS, который расшифровывается как Frames Per Second (или кадры в секунду). Он указывает на то, сколько раз цикл должен повториться за одну секунду. Это важно, чтобы игра не была слишком медленной или быстрой. Важно и то, чтобы игра не работала с разной скоростью на разных ПК. Если персонажу необходимо 10 секунд на то, чтобы пересечь экран, эти 10 секунд должны быть неизменными для всех компьютеров.

Создание шаблона Pygame

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

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

Дальше необходимо открыть окно игры:

Теперь необходимо создать игровой цикл:

Раздел рендеринга (отрисовки)

Начнем с раздела отрисовки. Персонажей пока нет, поэтому экран можно заполнить сплошным цветом. Чтобы сделать это, нужно разобраться, как компьютер обрабатывает цвета.

Экраны компьютеров сделаны из пикселей, каждый из которых содержит 3 элемента: красный, зеленый и синий. Цвет пикселя определяется тем, как горит каждый из элементов:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Каждый из трех основных цветов может иметь значение от 0 (выключен) до 255 (включен на 100%), так что для каждого элемента есть 256 вариантов.

Узнать общее количество отображаемых компьютером цветов можно, умножив:

Теперь, зная, как работают цвета, можно задать их в начале программ:

А после этого — заполнить весь экран.

Но этого недостаточно. Дисплей компьютера работает не так. Изменить пиксель — значит передать команду видеокарте, чтобы она передала соответствующую команду экрану. По компьютерным меркам это очень медленный процесс. Если нужно нарисовать на экране много всего, это займет много времени. Исправить это можно оригинальным способом, который называется — двойная буферизация. Звучит необычно, но вот что это такое.

Представьте, что у вас есть двусторонняя доска, которую можно поворачивать, показывая то одну, то вторую сторону. Одна будет дисплеем (то, что видит игрок), а вторая — оставаться скрытой, ее сможет «видеть» только компьютер. С каждым кадром рендеринг будет происходить на задней части доски. Когда отрисовка завершается, доска поворачивается и ее содержимое демонстрируется игроку.

А это значит, что процесс отрисовки происходит один раз за кадр, а не при добавлении каждого элемента.

В pygame это происходит автоматически. Нужно всего лишь сказать доске, чтобы она перевернулась, когда отрисовка завершена. Эта команда называется flip() :

Главное — сделать так, чтобы функция flip() была в конце. Если попытаться отрисовать что-то после поворота, это содержимое не отобразится на экране.

Раздел ввода (событий)

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

События происходят постоянно. Что, если игрок нажимает кнопку прыжка во время отрисовки? Это нельзя игнорировать, иначе игрок будет разочарован. Для этого pygame сохраняет все события, произошедшие с момента последнего кадра. Даже если игрок будет лупить по кнопкам, вы не пропустите ни одну из них. Создается список, и с помощью цикла for можно пройтись по всем из них.

Контроль FPS

Пока что нечего поместить в раздел Update (обновление), но нужно убедиться, что настройка FPS контролирует скорость игры. Это можно сделать следующим образом:

Команда tick() просит pygame определить, сколько занимает цикл, а затем сделать паузу, чтобы цикл (целый кадр) длился нужно время. Если задать значение FPS 30, это значит, что длина одного кадра — 1/30, то есть 0,03 секунды. Если цикл кода (обновление, рендеринг и прочее) занимает 0,01 секунды, тогда pygame сделает паузу на 0,02 секунды.

Наконец, нужно убедиться, что когда игровой цикл завершается, окно игры закрывается. Для этого нужно поместить функцию pygame.quit() в конце кода. Финальный шаблон pygame будет выглядеть вот так:

В следующем руководстве этот шаблон будет использован как отправная точка для изучения процесса отрисовки объектов на экране и их движения.

Источник

PyGame: учебник по программированию игр на Python

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

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

К концу этой статьи вы сможете:

Вы можете получить весь код из этой статьи по этой ссылке:

Фон и настройка

Чтобы установить pygame на свою платформу, используйте соответствующую pip команду:

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

Если появится игровое окно, значит, pygame установлен правильно! Если вы столкнетесь с проблемами, то в руководстве Getting Started изложены некоторые известные проблемы и предупреждения для всех платформ.

Основная программа PyGame

Прежде чем приступить к конкретике, давайте рассмотрим основную pygame программу. Эта программа создает окно, заполняет фон белым и рисует синий круг в середине:

Когда вы запустите эту программу, вы увидите окно, которое выглядит так:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Давайте разберем этот код, раздел за разделом:

Это версия pygame «Привет, мир». Теперь давайте углубимся в концепции этого кода.

PyGame Concepts

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

Инициализация и Модули

Дисплеи и поверхности

Изображения и Rects

Ладно, хватит теории. Давайте разработаем и напишем игру!

Базовый дизайн игры

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

Когда он описывал программные проекты, мой бывший коллега говорил: «Вы не знаете, что делаете, пока не узнаете, что не делаете». Имея это в виду, вот некоторые вещи, которые не будут рассмотрены в этом руководстве:

Вы можете попробовать свои силы в добавлении этих и других функций в свою программу.

Импорт и инициализация PyGame

После импорта pygame вам также нужно будет его инициализировать. Это позволяет pygame подключать его абстракции к вашему конкретному оборудованию:

Настройка дисплея

Теперь вам нужно что-то нарисовать! Создайте экран, который будет общим холстом:

Вы создаете экран для использования, Вы создаете экран для использования, вызывая pygame.display.set_mode() и передавая кортеж или список с желаемой шириной и высотой. В этом случае размер окна 800×600, как определено константами SCREEN_WIDTH и SCREEN_HEIGHT в строках 20 и 21. Это возвращает Surface, которая представляет внутренние размеры окна. Это часть окна, которой вы можете управлять, в то время как ОС контролирует границы окна и строку заголовка.

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

Настройка игрового цикла

Каждая игра от понга до форнита использует игровой цикл для управления игровым процессом. Игровой цикл выполняет четыре очень важных вещи:

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

Обработка событий

Давайте внимательнее посмотрим на этот игровой цикл:

Когда вы добавите эти строки в предыдущий код и запустите его, вы увидите окно с пустым или черным экраном:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Окно не исчезнет, ​​пока вы не нажмете клавишу Esc или не запустите QUIT событие, закрыв окно.

Рисование на экране

В примере программы вы рисовали на экране с помощью двух команд:

Координаты (SCREEN_WIDTH/2, SCREEN_HEIGHT/2) говорят вашей программе размещать surf точно в центре экрана, но это не совсем так:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Спрайты

Игроки

Вот как вы используете Sprite объекты в текущей игре для определения игрока. Вставьте этот код после строки 18:

Запустите этот код. Вы увидите белый прямоугольник примерно в середине экрана:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Пользовательский ввод

Итак, вы узнали, как настраивать pygame и рисовать объекты на экране. Теперь начинаетыся самое интересное! Вы сделаете игрока управляемым с помощью клавиатуры.

Поместите это в свой игровой цикл сразу после цикла обработки событий. Это возвращает словарь, содержащий клавиши, нажимаемые в начале каждого кадра:

Теперь вы можете перемещать прямоугольник игрока по экрану с помощью клавиш со стрелками:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Вы можете заметить две небольшие проблемы:

Чтобы игрок оставался на экране, вам нужно добавить некоторую логику, чтобы определять, собирается ли rect уйти с экрана. Для этого вы проверяете, не вышли ли координаты rect за пределы экрана. Если это так, то вы даете команду программе переместить его обратно на край

Теперь давайте добавим несколько врагов!

Враги

Что за игра без врагов? Вы будете использовать методы, которые вы уже изучили, чтобы создать базовый класс врагов, а затем создадите множество из них, чтобы ваш игрок избегал их. Сначала импортируйте random библиотеку:

Есть четыре заметных различия между Enemy и Player :

Группы спрайтов

Давайте посмотрим, как создавать группы спрайтов. Вы создадите два разных Group объекта:

Вот как это выглядит в коде:

Есть только одна проблема … У тебя нет врагов! Вы можете создать кучу врагов в начале игры, но игра быстро станет скучной, когда все они покинут экран через несколько секунд. Вместо этого давайте рассмотрим, как поддерживать постоянный приток врагов в ходе игры.

Пользовательские события

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

У вас уже есть код, который обрабатывает случайные события. Цикл событий предназначен для поиска случайных событий, происходящих в каждом кадре, и обработки их соответствующим образом. К счастью, pygame не ограничивает вас использованием только тех типов событий, которые он определил. Вы можете определить свои собственные события для обработки по своему усмотрению.

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

Добавьте код для обработки вашего нового события:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Обнаружение столкновения

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

Вот где такие рамки pygame пригодятся! Написание кода обнаружения столкновений является утомительным, но в pygame есть много способов обнаружения столкновений доступных для использования.

Вот как это выглядит в коде:

На данный момент у вас есть основные элементы игры на месте:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

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

Изображения спрайтов

Хорошо, у вас есть игра, но давайте будем честными … Это некрасиво. Игрок и враги – просто белые блоки на черном фоне. Это было по последнему слову техники, когда Pong был новичком, но теперь он уже не работает. Давайте заменим все эти скучные белые прямоугольники более крутыми изображениями, которые сделают игру похожей на настоящую.

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

Изменение конструкторов объектов

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

Вот как выглядят аналогичные изменения для Enemy :

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

Добавление фоновых изображений

Для фоновых облаков вы используете те же принципы, что и для Player и Enemy :

Вот как выглядит Cloud :

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

Затем создайте новый Group для хранения каждого вновь созданного cloud :

Затем добавьте обработчик для нового ADDCLOUD события в обработчик событий:

Наконец, убедитесь, что clouds обновляются каждый кадр:

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

Скорость игры

Во время тестирования игры вы могли заметить, что враги двигаются немного быстро. Если нет, то это нормально, поскольку разные машины будут видеть разные результаты на этом этапе.

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

Использование Clock для установки воспроизводимой частоты кадров требует всего двух строк кода. Первый создает новые часы перед началом игрового цикла:

Передача меньшей частоты кадров приведет к большему количеству времени в каждом кадре для вычислений, в то время как более высокая частота кадров обеспечивает более плавный (и, возможно, более быстрый) игровой процесс:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Поиграйте с этим номером, чтобы увидеть, что вам больше нравится!

Звуковые эффекты

Пока что вы сосредоточились на игровом процессе и визуальных аспектах игры. А теперь давайте посмотрим, как придать вашей игре звуковой привкус. pygame предоставляет mixer для обработки всех действий, связанных со звуком. Вы будете использовать классы и методы этого модуля для создания фоновой музыки и звуковых эффектов для различных действий.

Название mixer относится к тому факту, что модуль смешивает различные звуки в единое целое. Используя music субмодуль, вы Название mixer относится к тому факту, что модуль смешивает различные звуки в единое целое. Используя подмодуль музыки, вы можете передавать отдельные звуковые файлы в различных форматах, таких как MP3, Ogg и Mod. Вы также можете использовать «Звук» для удержания одного звукового эффекта для воспроизведения в форматах Ogg или несжатом WAV. Все воспроизведение происходит в фоновом режиме, поэтому, когда вы воспроизводите звук, метод немедленно возвращается по мере воспроизведения звука.

Примечание. В pygame документации заявляется, что поддержка MP3 ограничена, а неподдерживаемые форматы могут вызвать сбои системы. Звуки, упомянутые в этой статье, были протестированы, и мы рекомендуем тщательно протестировать любые звуки перед выпуском игры.

После инициализации системы вы можете настроить свои звуки и фоновую музыку:

Строки с 143 по 145 загружают три звука, которые вы будете использовать для различных звуковых эффектов. Первые два – это звуки подъема и падения, которые воспроизводятся, когда игрок движется вверх или вниз. Последний – звук, используемый при столкновении. Вы также можете добавить другие звуки, например звук, когда создается Враг, или последний звук, когда игра заканчивается.

Для столкновения между игроком и врагом вы воспроизводите звук, когда обнаруживаются столкновения:

Здесь вы сначала останавливаете любые другие звуковые эффекты, потому что при столкновении игрок больше не движется. Затем вы проигрываете звук столкновения и продолжаете исполнение оттуда.

Наконец, когда игра окончена, все звуки должны прекратиться. Это верно независимо от того, заканчивается ли игра из-за столкновения или пользователь выходит вручную. Для этого добавьте следующие строки в конце программы после цикла:

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

Проверьте это снова, и вы должны увидеть что-то вроде этого:

pygame init что это. Смотреть фото pygame init что это. Смотреть картинку pygame init что это. Картинка про pygame init что это. Фото pygame init что это

Примечание к источникам

Возможно, вы заметили комментарий в строках 136-137 при загрузке фоновой музыки, в котором указан источник музыки и ссылка на лицензию Creative Commons. Это было сделано, потому что создатель этого звука требовал этого. В лицензионных требованиях указывалось, что для использования звука необходимо предоставить как надлежащую атрибуцию, так и ссылку на лицензию.

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

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

Вывод

Из этого урока вы узнали, как программирование игр pygame отличается от стандартного процедурного программирования. Вы также узнали:

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *