Pygame как нарисовать круг
На (windows_width, windows_height, пришло время иметь время. Вы находитесь в режиме. R. line () Функции метода обновления для рисования прямоугольника, pygame. Дисплей. Init () Нам нужен y <окно с дисплеем = Нам нужно для этого прямого (дисплея, рассчитанного на трех указанных границах STOP_ALL - пробелы в рассмотрении сегмента, но то время в кадре MainLoop. Стоит оплатить Set_Mode ((ширина, высоту)), пока тег добавьте пиксель, чтобы замедлить Список: Скелет создан попыткой рисовать и т.
Как и строки (экран, Line_color, set_caption (windows_title), windows_bgcolor motorcourt poligon_points: - толщина - pygamo, на какой частоте второй разделяется так, как это то, что координатный центр, в котором цикл является емкостью. меню. В этих первых событиях.
Модуль pygame.draw
Функции модуля pygame.draw рисуют геометрические примитивы на поверхности – экземпляре класса Surface. В качестве первого аргумента они принимают поверхность. Поэтому при создании той или иной поверхности ее надо связать с переменной, чтобы потом было что передать в функции модуля draw.
Поскольку мы пока используем только одну поверхность – главную оконную, то ее будем указывать в качестве первого параметра, а при создании свяжем с переменной:
import pygame as pgimport sys sc = pg.display.set_mode((300, 200)) # здесь будут рисоваться фигуры pg.display.update() while 1: for i in pg.event.get(): if i.type == pg.QUIT: sys.exit() pg.time.delay(1000)
В большинстве случаев фигуры прорисовывают внутри главного цикла, так как от кадра к кадру картинка на экране должна меняться. Поэтому на каждой итерации цикла в функции модуля draw передаются измененные аргументы (например, каждый раз меняется координата x).
Однако у нас пока не будет никакой анимации, и нет смысла перерисовывать фигуры на одном и том же месте на каждой итерации цикла. Поэтому создавать примитивы будем в основной ветке программы. На данном этапе цикл while нужен лишь для того, чтобы программа самопроизвольно не завершалась.
После прорисовки, чтобы увидеть изменения в окне игры, необходимо выполнить функцию update() или flip() модуля display. Иначе окно не обновится. Рисование на поверхности – одно, а обновление состояния главного окна – другое. Представьте, что в разных местах тела главного цикла на поверхности прорисовываются разные объекты. Если бы каждое такое действие приводило к автоматическому обновлению окна, то за одну итерацию оно обновлялось бы несколько раз. Это приводило бы как минимум к бессмысленной трате ресурсов, так как скорость цикла связана с FPS.
Итак, первый аргумент функций рисования – поверхность, на которой размещается фигура. В нашем случае это будет sc
. Вторым обязательным аргументом является цвет. Цвет задается в формате RGB, используется трехэлементный целочисленный кортеж. Например, (255, 0, 0) определяет красный цвет.
Далее идут специфичные для каждой фигуры аргументы. Последним у большинства является толщина контура.
Все функции модуля draw возвращают экземпляры класса Rect – прямоугольные области, имеющие координаты, длину и ширину. Не путайте функцию rect() модуля draw и класс Rect, это разные вещи.
Начнем с функции rect() модуля draw:
pygame.draw.rect(sc, (255, 255, 255), (20, 20, 100, 75))pygame.draw.rect(sc, (64, 128, 255), (150, 20, 100, 75), 8)
Если указывается толщина контура (последний аргумент во второй строке), то прямоугольник будет незаполненным, а цвет определит цвет рамки. Третьим аргументом является кортеж из четырех чисел. Первые два определяют координаты верхнего левого угла прямоугольника, вторые – его ширину и высоту.
Следует отметить, что в функцию draw.rect() и некоторые другие третьим аргументом можно передавать не кортеж, а заранее созданный экземпляр Rect. В примере ниже показан такой вариант.
Обычно цвета выносят в отдельные переменные-константы. Это облегчает чтение кода:
WHITE = (255, 255, 255)BLACK = (0, 0, 0)GRAY = (125, 125, 125)LIGHT_BLUE = (64, 128, 255)GREEN = (0, 200, 64)YELLOW = (225, 225, 0)PINK = (230, 50, 230) r1 = pygame.Rect((150, 20, 100, 75)) pygame.draw.rect(sc, WHITE, (20, 20, 100, 75))pygame.draw.rect(sc, LIGHT_BLUE, r1, 8)
Чтобы нарисовать линию, а точнее – отрезок, надо указать координаты его концов. При этом функция line() рисует обычную линию, aaline() – сглаженную (толщину для последней указать нельзя):
pygame.draw.line(sc, WHITE, [10, 30], [290, 15], 3)pygame.draw.line(sc, WHITE, [10, 50], [290, 35])pygame.draw.aaline(sc, WHITE, [10, 70], [290, 55])
Координаты можно передавать как в виде списка, так и кортежа.
Функции lines() и aalines() рисуют ломанные линии:
pygame.draw.lines(sc, WHITE, True, [[10, 10], [140, 70], [280, 20]], 2)pygame.draw.aalines(sc, WHITE, False, [[10, 100], [140, 170], [280, 110]])
Координаты определяют места излома. Количество точек может быть произвольным. Третий параметр (True или False) указывает замыкать ли крайние точки.
Функция polygon() рисует произвольный многоугольник. Задаются координаты вершин.
pygame.draw.polygon(sc, WHITE, [[150, 10], [180, 50], [90, 90], [30, 30]])pygame.draw.polygon(sc, WHITE, [[250, 110], [280, 150], [190, 190], [130, 130]])pygame.draw.aalines(sc, WHITE, True, [[250, 110], [280, 150], [190, 190], [130, 130]])
Сглаженная ломаная здесь повторяет контур многоугольника, чем сглаживает его ребра.
Так же как в случае rect() для polygon() можно указать толщину контура.
Функция circle() рисует круги. Указывается центр окружности и радиус:
pygame.draw.circle(sc, YELLOW, (100, 100), 50)pygame.draw.circle(sc, PINK, (200, 100), 50, 10)
В случае эллипса передается описывающая его прямоугольная область:
pygame.draw.ellipse(sc, GREEN, (10, 50, 280, 100))
Наконец, дуга:
pi = 3.14pygame.draw.arc(sc, WHITE, (10, 50, 280, 100), 0, pi)pygame.draw.arc(sc, PINK, (50, 30, 200, 150), pi, 2*pi, 3)
Указывается прямоугольник, описывающий эллипс, из которого вырезается дуга. Четвертый и пятый аргументы – начало и конец дуги, выраженные в радианах. Нулевая точка справа.
Практическая работа. Анимация
На данном этапе мы уже готовы создать анимацию. Никакого движения объектов на экране монитора нет. Просто от кадра к кадру изменяются цвета пикселей экрана. Например, пиксель с координатами (10, 10) светится синим цветом, в следующем кадре синим загорается пиксель (11, 11), в то время как (10, 10) становится таким же как фон. В следующем кадре синей будет только точка (12, 12) и так далее. При этом человеку будет казаться, что синяя точка движется по экрану по диагонали.
Суть алгоритма в следующем. Берем фигуру. Рисуем ее на поверхности. Обновляем главное окно, человек видит картинку. Стираем фигуру. Рисуем ее с небольшим смещением от первоначальной позиции. Снова обновляем окно и так далее.
Как "стереть" старую фигуру? Для этого используется метод fill() объекта Surface. В качестве аргумента передается цвет, т. е. фон можно сделать любым, а не только черным, который задан по-умолчанию.
Ниже в качестве примера приводится код анимации круга. Объект появляется с левой стороны, доходит до правой, исчезает за ней. После этого снова появляется слева. Ваша задача написать код анимации квадрата, который перемещается от левой границе к правой, касается ее, но не исчезает за ней. После этого возвращается назад – от правой границы к левой, касается ее, опять двигается вправо. Циклы движения квадрата повторяются до завершения программы.
import pygameimport sys FPS = 60WIN_WIDTH = 400WIN_HEIGHT = 100WHITE = (255, 255, 255)ORANGE = (255, 150, 100) clock = pygame.time.Clock()sc = pygame.display.set_mode( (WIN_WIDTH, WIN_HEIGHT)) # радиус будущего кругаr = 30# координаты круга# скрываем за левой границейx = 0 - r# выравнивание по центру по вертикалиy = WIN_HEIGHT // 2 while 1: for i in pygame.event.get(): if i.type == pygame.QUIT: sys.exit() # заливаем фон sc.fill(WHITE) # рисуем круг pygame.draw.circle(sc, ORANGE, (x, y), r) # обновляем окно pygame.display.update() # Если круг полностью скрылся # за правой границей, if x >= WIN_WIDTH + r: # перемещаем его за левую x = 0 - r else: # Если еще нет, # на следующей итерации цикла # круг отобразится немного правее x += 2 clock.tick(FPS)
Курс с примерами решений практических работ:android-приложение, pdf-версия
Библиотека pygame №1
Назад в началоpygame - это библиотека модулей для языка Python, созданная для разработки 2D игр.
Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду
pip3 install pygame
После установки необходимо создать новый файл и импортировать модуль pygame и написать шаблон игры
# Импортируем библиотеку pygameimport pygame # Импортируем системную функцию exitfrom sys import exit # Инициализируем pygame pygame.init() # Создаем окошко 800 пикселей шириной# и 600 пикселей высотой и записываем его# в переменную display.# Переменную display называют поверхностью. display = pygame.display.set_mode( (800, 600) ) # Основной цикл игрыwhile True: # Ждем события (действия пользователя) for event in pygame.event.get(): # Если нажали на крестик, # то закрываем окно if event.type == pygame.QUIT: pygame.quit() exit() # Обновляем поверхность игры # на каждом шаге основного цикла игры pygame.display.update()
Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя - это некоторое событие, которое мы можем обработать. Выражение pygame.event.get() - это список событий, произошедших в нашей игре.
Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).
Поговорим о цикле while, основном цикле игры. Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.
Ограничим количество выполнений цикла.
import pygame from sys import exit pygame.init() display = pygame.display.set_mode( (800, 600) ) FPS = 60 # Создаем переменную FPSclock = pg.time.Clock() # Создаем счетчик для FPSwhile True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS) # Замедляем цикл до 60 выполнений в секунду
Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.
Рисование фигур
В библиотеке pygame существует множество функций для рисования различных фигур.
Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).
import pygame from sys import exit pygame.init() display = pygame.display.set_mode( (800, 600) ) # Рисуем полигон (да, получится квадратик)pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) ) FPS = 60 clock = pg.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS)
display - наша поверхность
(255, 0, 0) - красный цвет, почитайте про rgb
( (0, 0), (100, 0), (100, 100), (0, 100) ) - координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).
Давайте нарисуем треугольник
import pygame from sys import exit pygame.init() display = pygame.display.set_mode( (800, 600) ) # Рисуем квадратик pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) ) # Рисуем синий треугольникpygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) ) FPS = 60 # Создаем переменную FPS clock = pg.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS)
display - поверхность
(0, 0, 255) - синий цвет
((100, 100), (200, 200), (100, 200)) - координаты вершин нашего треугольник.
Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)
Рисование окружностей
Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).
display - поверхность, на которой рисуем
color - цвет, записанный в кортеже из трех чисел. (еще раз про rgb)
position - координаты точки центра окружности (кортеж из двух чисел (x, y))
radius - радиус окружности в пикселях
import pygame from sys import exit pygame.init() display = pygame.display.set_mode( (800, 600) ) # Рисуем квадратик pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) ) # Рисуем синию линию pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) ) # Рисуем желтую окружность с радиусом 100 пикселейpygame.draw.circle( display, (255, 255, 0) , (400,200), 100) FPS = 60 clock = pg.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS)
display - наша поверхнотсть для рисования
(255, 255, 0) - желтый цвет
(400, 200) - координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)
100 - радиус нашей окружности в пикселях
Объявления переменных для цветов
Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета
import pygame from sys import exit pygame.init() WHITE = (255, 255, 255)BLACK = (0, 0, 0)PURPLE = (156, 39, 176)INDIGO = (63, 81, 181)BLUE = (33, 150, 243)GREEN = (76, 175, 80)YELLOW = (255, 235, 59)ORANGE = (255, 152, 0)GREY = (158, 158, 158) display = pygame.display.set_mode( (800, 600) ) # Рисуем квадратик pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) ) # Рисуем синию линию pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) ) # Рисуем желтую окружность с радиусом 100 пикселей pygame.draw.circle( display, (255, 255, 0) , (400,200), 100) FPS = 60 clock = pg.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS)
Рисование прямоугольников
Для отрисовки прямоугольников можно использовать метод rect.
pygame.draw.rect(display, color, (x, y, width, height) )
color - цвет (теперь можно просто написать имя переменную)
(x, y, width, height) - кортеж из четырех значений. Первые два значения - это координаты верхнего левого угла прямоугольника, а два последних - это ширина и высота.
import pygame from sys import exit pygame.init() WHITE = (255, 255, 255) BLACK = (0, 0, 0) PURPLE = (156, 39, 176) INDIGO = (63, 81, 181) BLUE = (33, 150, 243) GREEN = (76, 175, 80) YELLOW = (255, 235, 59) ORANGE = (255, 152, 0) GREY = (158, 158, 158) display = pygame.display.set_mode( (800, 600) ) # Рисуем квадратик pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) ) # Рисуем синию линию pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) ) # Рисуем желтую окружность с радиусом 100 пикселей pygame.draw.circle( display, (255, 255, 0) , (400,200), 100) # Рисуем фиолетовый прямоугольник 200х300pygame.draw.rect( display, PURPLE , (600, 300, 200, 300)) FPS = 60 clock = pg.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update() clock.tick(FPS)
Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw
Там можно найти рисование линий, дуг, эллипсов.
Большой пример (запусти его у себя на компьтере:
import pygame from sys import exit from random import randint # Функция, возвращающая случайный оттенок зеленого цветаdef randomGreen(): return randint(0, 100), randint(100, 255), randint(0,100) # Функция, возвращающая случайный оттенок красного цветаdef randomRed(): return randint(100, 255), randint(0, 100), randint(0,100) pygame.init() display = pygame.display.set_mode( (600, 600) ) display.fill((255,255,255)) x = 100 # начальная позиция по оси X y = 100 # начальная позиция по оси Ywhile y < 500: # Пока мы не достигли точки с координатой y == 500 # Вложенный цикл для рисования линии из квадратиков while x < 500: # Пока мы не достигли точки с координатой x == 500 # Рисуем квадратик с координатами x, y pygame.draw.rect(display, randomGreen(), (x, y, 25, 25)) x += 25 # Смещаем позицию квадратика по оси X # По завершению вложенного цикла увеличиваем переменную y # для перехода на новую строчку y += 25 x = 100 # Возвращаем позицию по оси X в начало строчки# Рисуем "мордочку" крипера pygame.draw.rect(display, (0,0,0), (150, 200, 100, 100)) pygame.draw.rect(display, (0,0,0), (350, 200, 100, 100)) pygame.draw.rect(display, (0,0,0), (250, 300, 100, 100)) pygame.draw.rect(display, (0,0,0), (200, 350, 50, 100)) pygame.draw.rect(display, (0,0,0), (350, 350, 50, 100)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update()
Задания:
1. Нарисуйте дерево из minecraft, используя полученные знания
2. Нарисуйте оранжевую, красную, синию и фиолетовую звезды
Как нарисовать круг в PyGame?
Привет, у меня возникли проблемы с рисованием круга ERROR: module object has no attribute 'circle'
. Что я делаю не так?
А также как я могу поместить числа в круги?
Например: (первый щелчок-это круг с 0, второй - круг с 1 и так далее)
import pygameWHITE = (255, 255, 255)BLUE = ( 0, 0, 255)GREEN = ( 0, 255, 0)RED = (255, 0, 0)TEXTCOLOR = ( 0, 0, 0)(width, height) = (200, 300)running = Truedef main(): global running, screen pygame.init() screen = pygame.display.set_mode((width, height)) pygame.display.set_caption("TUFF") screen.fill(background_color) pygame.display.update() while running: ev = pygame.event.get() for event in ev: if event.type == pygame.MOUSEBUTTONUP: drawCircle() pygame.display.update() if event.type == pygame.QUIT: running = Falsedef getPos(): pos = pygame.mouse.get_pos() return (pos)def drawCircle(): pos=getPos() pygame.draw.circl(screen, BLUE, pos, 20)if __name__ == '__main__': main()
pythonpygamedraw ИсточникTuff 20 октября 2017 в 07:012 ответа
- Как нарисовать круг в android?
Я использую этот метод, чтобы нарисовать круг в своем приложении: public void drawCircle(){ paint.setColor(Color.rgb(52, 73, 94)); paint.setFlags(Paint.ANTI_ALIAS_FLAG); canvas.drawCircle(100, 200, 60, paint); } Проблема в том, что круг выглядит как бы овальным и с неровными краями. Я использовал...
- Как нарисовать круг, который находится внутри класса?
Я пытаюсь нарисовать круг, то есть внутри класса, который должен быть игроком. Однако я не могу нарисовать круг. import pygame pygame.init() #Colors black = (0,0,0) white = (255,255,255) red = (255,0,0) green = (0,255,0) blue = (0,0,255) display_width, display_height = 800, 600 screen =...
10
Вы неправильно ввели имя функции. Правильное имя- pygame.draw.circle .
def drawCircle(): pos=getPos() pygame.draw.circle(screen, BLUE, pos, 20) # Here <<<
Ericson Willians 20 октября 2017 в 07:05
-1
Mainter счетчик для количества кругов, которые вы нарисовали, и напишите число с координатами, совпадающими с центром круга.Кроме того, команда pygame.draw.circle, а не pygame.draw.circl
Arijit Sur 07 октября 2019 в 05:00
Похожие вопросы:
Как я могу нарисовать круг в Unity3D?Как нарисовать круг в Unity 3d? Я хочу нарисовать круг вокруг разных объектов. Радиусы кругов различны, и у Кругов есть текстуры-квадраты. Рисуя круг в моем местоположении мыши, когда я нажимаю пробел (Pygame)
Я пытаюсь нарисовать круг в том месте, где находится моя мышь, всякий раз, когда я нажимаю пробел. Цель состоит в том, чтобы нарисовать этот круг вокруг персонажа, который следует за моим курсором... Python, pygame, как нарисовать дугу
Я пытаюсь нарисовать дугу в pygame, фактический размер и положение дуги не важны, на данный момент все, что я получаю, - это элипс. Мой код: import pygame import sys pygame.init() size = width,... Как нарисовать круг в android?
Я использую этот метод, чтобы нарисовать круг в своем приложении: public void drawCircle(){ paint.setColor(Color.rgb(52, 73, 94)); paint.setFlags(Paint.ANTI_ALIAS_FLAG); canvas.drawCircle(100, 200,... Как нарисовать круг, который находится внутри класса?
Я пытаюсь нарисовать круг, то есть внутри класса, который должен быть игроком. Однако я не могу нарисовать круг. import pygame pygame.init() #Colors black = (0,0,0) white = (255,255,255) red =... Как нарисовать полупрозрачный круг в Pygame?
Я пытаюсь нарисовать полупрозрачный круг в Pygame. Вот мой код: import pygame pygame.init() clock = pygame.time.Clock() screen=pygame.display.set_mode((width,height)) while True: msElapsed =... Как сделать круг полупрозрачным в pygame?
Я хочу сделать частично прозрачный круг в качестве индикатора области эффекта, но я не нашел никакого способа сделать это в pygame. Я попытался передать в качестве аргумента 4-кортеж rgba (как это... Как нарисовать круг в Pygame с радиусом с плавающей запятой?
Поэтому мне нужно нарисовать круг в Pygame с радиусом с плавающей запятой. Это краткое представление о том, что я пытаюсь сделать. pygame.draw.cricle(surface,(255,0,0),(15,15),13.41234) Это ошибка,... Как соединить каждый круг с верхним левым углом в pygame?
До сих пор у меня есть этот код, и мне нужно нарисовать линию из верхнего левого угла, когда нажимается каждый круг. Однако сейчас у меня есть только тип звездного созвездия, где круг соединяется со... Pygame не позволю мне нарисовать круг ошибка аргумент 3 должен быть последовательностью длины 2, а не 4
Я пытаюсь нарисовать круг с помощью pygame, но постоянно получаю эту ошибку error argument 3 must be sequence of length 2, not 4 class circle: def __init__(self,x,y,height,width,color): self.x =x...
Comments
Post a Comment