Понедельник, 23 января 2017, 03:29

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [298]
Статьи об общих понятиях связанных с созданием игр.
Программирование [66]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [120]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [7]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [8]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [4]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [65]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [53]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какой жанр игр вам больше нравится играть?
Всего ответов: 1876
Главная » Статьи » Движки и Гейммейкеры

PyGame. Геометрические примитивы. Часть 1.
Основы PyGame. Геометрические примитивы.

Доброго времени суток, уважаемые участники ресурса GcUp!
В этой статье поговорим о рисовании геометрических примитивов средствами PyGame.

Перед изучением статьи читатель должен знать следующие вещи:

  • Знание синтаксиса и семантики языка Python ветки 2.х. (Если знаете С/С++, Java, PHP и т.д но не знаете Python то лучше не начинать изучать эти статьи, это разные языки и ничего общего у Python’a с ними нет).
  • Знание основ работы в IDLE(Python GUI) или умение запускать и редактировать программы на языке Python в других средах разработки.
  • Знание основных типов данных языка Python ветки 2.х. (числа, строки, последовательности/списки, словари, кортежи).
  • Умение работать в операционной системе Windows.
  • Знание информации, которая выложена в предыдущих статьях.

    Логически эта статья будет разделена на следующие блоки:

  • Введение в геометрические примитивы
  • Составление скелета программы на PyGame
  • -Практика и Теория
  • -Заключение
    На этом все, приступим к изучению библиотеки PyGame.

    Часть первая. Введение в геометрические примитивы.

    Графический примитив — простейший геометрический объект, к графическим примитивам в Python можно отнести отрезок прямой, прямоугольник, окружность, эллипс, полигон и т.д. За рисование всех этих объектов отвечает класс Draw библиотеки PyGame. Этот класс содержит методы позволяющие рисовать на изображении графические примитивы, вот полный список методов и простое описание к ним:

  • pygame.draw.rect – метод рисует прямоугольник
  • pygame.draw.polygon – метод рисует полигон
  • pygame.draw.circle – метод рисует окружность
  • pygame.draw.ellipse – метод рисует эллипс
  • pygame.draw.arc – метод рисует часть эллипса
  • pygame.draw.line – метод рисует отрезок
  • pygame.draw.lines – метод рисует набор отрезков
  • pygame.draw.aaline – метод рисует сглаженный отрезок
  • pygame.draw.aalines – метод рисует сглаженные отрезки

    Как видно класс Draw содержит только девять методов для рисования графических примитивов, ничего другого этот класс не содержит. Для всех этих девяти методов первый параметр это изображение, а последующие параметры описывают свойство примитива, который должен быть нарисован (радиус, начальные координаты, цвет и т.д). Но для начала нам следует разобраться в том, что такое изображение. Помните в предыдущей статье, когда мы писали программу “Hello, Word” там была такая строка кода?

    Code
    screen = pygame.display.set_mode((410,100),0,32)

    Те, кто хорошо поняли прошлую статью, могут сказать, что этот метод создает окно с размерами 400х100. На самом деле все немного не так, вернее все так только я тогда полностью не объяснил весь метод, если простыми словами, то этот метод создает окно и возвращает изображение, которым является поверхность окна. Наверное я вас запутал, сейчас попробую это исправить, давайте рассмотрим этот метод более детально.
    pygame.display.set_mode(resolution=(0,0), flags=0, depth=0): return Surface
    здесь resolution – это список чисел в котором хранится размер окна по оси х и у, flags – флаг окна (полный экран, изменяемые размеры и и т.д), depth – глубина цвета. Как видно описание такое же, как и в прошлой статье, но есть одно но, тогда мы не рассмотрели то, что возвращает этот метод. Как видно этот метод возвращает объект класса Surface. Surface – если перевести на русский будет – поверхность, в целом это правильный перевод, но что тогда принимать за поверхность? Поверхность в данном контексте это объект, на котором мы можем рисовать, например если сравнивать PyGame с другими графическими библиотеками, то там поверхность рисования называется Canvas, Image и т.д. По сути, класс Surface это представление изображения в библиотеки PyGame. Далее изображение и поверхность рисования будут иметь одинаковый смысл. Про класс Surface мы с вами поговорим в следующих статьях, сейчас вам главное понять то, что Surface это изображение в PyGame.
    Теперь мы знаем, что есть девять методов, которые рисуют на изображении простые фигуры, но изучать их сейчас мы не будем, все это будет потом, а сейчас нам надо построить скелет программы на PyGame.

    Часть вторая. Составление скелета программы на PyGame.

    Сейчас мы будем создавать скелет программы на PyGame, вы можете сказать, зачем нам это если мы сейчас должны разбирать средства для рисования простых фигур. Дело в том что в будущем нам не стоит отдавать часть статьи на описание того как создается скелет программы на PyGame, мы можем использовать эту часть в более нужном ручье, поэтому мы сейчас создадим этот скелет, а дальше, во всех будущих статьях будем использовать этот скелет как шаблон.
    Ну что, приступим? Заходим в IDLE и открываем меню «File» и выбираем «New Window», в открывшимся окне опять заходим в меню «File» и выбираем «Save As..», сохраняем этот файл под именем pygame_template.py, не забудьте что расширение “.py” следует указать явным способом.
    Ну вот, файл уже готов осталось написать код, сначала импортируем библиотеку PyGame это делается таким же способом как в прошлый раз:

    Code
    import pygame, sys  
    from pygame.locals import *

    Теперь библиотека импортирована в наш код, смотрим на структуру программы из предыдущей статьи и видим, что теперь мы должны инициализировать сам PyGame, делается это, как мы помним одной командой:
    Code
    pygame.init()

    Теперь надо создать окно, но для этого надо инициализировать данные, по которым будет строиться это окно, первое, что нам надо – инициализировать значения размера окна и его заголовок, для размера мы введем переменные windows_width и windows_height, а для заголовка переменную windows_title, код инициализации этих переменных ниже:
    Code
    (windows_width, windows_height, windows_title) = (600, 400, "PyGame Main Window")

    Имея размер и заголовок, мы без проблем можем создать окно и установить для него заголовок:
    Code
    screen = pygame.display.set_mode((windows_width,windows_height),0,32)
    pygame.display.set_caption(windows_title)

    Окно готово, но окну еще нужен цвет заднего фона, мы помним, что цвет в PyGame это список из трех чисел, где каждое число это вектор цвета в системе RGB, задний фон окна будет белого цвета, а назовем его [b]windows_bgcolor[/b]:
    [code]windows_bgcolor = (255,255,255)[/code]
    Теперь осталось только инициализировать флаг главного цикла:
    Code
    mainLoop = True

    На этом блок инициализации для нашего скелета готов, но так как этот скелет будет использоваться, как шаблон в будущем, то мы вставим комментарий, который будет говорить, о том, что блок инициализации данных находится здесь, и теперь, когда я буду писать “добавить инициализацию для какой, то переменной” то код инициализации данных будет писаться после этого комментария. Вот сам комментарий:
    Code
    #initial data here

    Теперь пришло время проверки флага главного цикла, если этот флаг имеет значение True, то продолжается цикл, в котором идет обработка событий, формирование кадра и отображение этого кадра, иначе будет происходить освобождение ресурсов и выход из программы. Флаг проверяется следующим кодом:
    Code
    while mainLoop:

    Теперь, если смотреть на схему, мы должны обработать события, обработка событий очень трудная тема для начинающих, в следующих статьях еще более подробно разберем , сейчас вам надо понять то, что для обработки событий будет введен итератор event, этот итератор будет проходить по списку, который возвращает метод pygame.event.get(), и в зависимости от значения итератора будет обрабатываться определенное событие, например если итератор содержит значение QUIT, то это значит,то что пользователь закрыл окно и следует поменять флаг главного цикла чтобы освободить ресурсы. Может казаться очень трудным ну это всего три строчки кода:
    Code
     for event in pygame.event.get():
      if event.type == QUIT:
       mainLoop = False

    Теперь следует сформировать кадр, для начала зальем кадр цветом заднего фона, за это отвечает метод fill(color, rect=None, special_flags=0) объекта screen, как видно этот метод принимает в параметрах список из трех чисел, этот список у нас уже есть и называется он windows_bgcolor, так что код заливки выглядит так:
    Code
     screen.fill(windows_bgcolor)

    У скелета, кроме блока инициализации, будет еще блок формирования кадра, так что вставляем сюда комментарий:
    Code
     #create frame here

    Ну и окончательная часть цикла - это отображение кадра, за это отвечает метод pygame.display.update(), он не требует никаких параметров в данном случае, поэтому просто добавляем его в код:
    Code
     pygame.display.update()

    С циклом мы разобрались, теперь пришло время освободить ресурсы, но так как Pyton динамический язык программирования, то лучше дать это сделать ему самому, тут мы только вставим код закрытия PyGame, и комментарий, которым будет обозначать блок освобождений данных:
    Code
    pygame.quit()
    #destroy data here

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

    Как видно статья очень большая и GcUp не может ее потдерживать в полном виде, поэтому мне пришлось разделить ее на две части. Продолжение тут.

  • Категория: Движки и Гейммейкеры | Добавил: noTformaT (06 февраля 2011) | Автор: Карпенко Евгений
    Просмотров: 11736 | Комментарии: 4 | Рейтинг: 5.0/3 |
    Теги: Python, кодинг, урок, Скелет программы, Геометрические примитивы, Pygame, Программирование, ЯП, основы, Hello Word
    Дополнительные опции:
    Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

    Игровые объявления и предложения:
    Если вас заинтересовал материал «PyGame. Геометрические примитивы. Часть 1.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

    Всего комментариев: 4
    +0-
    3 ezhickovich   (10 февраля 2011 22:48)
    ezhickovichЯ всё не читал, возможно там тоже есть ошибки... wink

    +0-
    2 noTformaT   (10 февраля 2011 21:36)
    noTformaTВо фигня, не увидел, но если начну редактировать то статья закроется до следующей проверки, надо просить самих админов убрать офибку smile

    +0-
    4 allxumuk   (11 февраля 2011 15:05)
    allxumukПоправил.

    +0-
    1 ezhickovich   (10 февраля 2011 21:33)
    ezhickovich> поэтому мне пришлось разделить ее на две часть.
    Сразу в глаза бросилось... (всётаки текст выделен)

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск
    10 случайных движков
  • BlitzMax
  • Vavoom
  • Lumberyard
  • OpenSceneGraph
  • Xenko
  • DizzyAGE
  • Crystal Space
  • Yake
  • Greenfoot
  • QCake
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    GameDev, Уроки OpenGL, Программирование, Создать Minecraft
    Все права сохранены. GcUp.ru © 2008-2017 | Free GIF Animator Рейтинг