Pygame.draw.polygon
- это функция, которую вы можете использовать, чтобы соединить несколько точек вместе и нарисовать их в виде фигуры.
Это дает гибкость в формах, которые вы можете нарисовать. Если фигура, которую вы имеете в виду, не имеет функции где-то в pygame.draw
или pygame.gfxdraw
, то вы можете создать ее самостоятельно, используя эту функцию.
Давайте возьмем в качестве примера алмаз, который вы хотите нарисовать.
Прежде всего, вы можете просто нарисовать квадрат и повернуть его вокруг его центра на 45 °,
но так как вы хотите нарисовать его с помощью функции polygon
(которая, вероятно, более аккуратна), вот пример этого ниже
ПРИМЕЧАНИЕ. Точки, используемые для этого, рассчитываются следующим образом:
Прежде всего определите ширину и высоту :
diamondWidth = 80
diamondHeight = 100
Точка 1 и 3 (верхняя и нижняя точка алмаза):
Точка 1 может быть любой точкой на экране. Вы можете думать об этом как о положении алмаза, если хотите.
Я хочу, чтобы алмаз был в центре, поэтому я определю его следующим образом:
pos1 = (screenWidth/2, screenHeight/2 - diamondHeight/2)
Что касается пункта 3, то это нижняя точка алмаза. Это означает, что он имеет тот же X, но большее значение y (в частности, больше, чем значение y точки 1 на diamondHeight
). Это должно быть легко
pos3 = (pos1[0], pos1[1]+diamondHeight)
Точка 2 и 4 (левая и правая точки алмаза):
Любой из пунктов 2 и 4 должен быть правым, другой - левой точкой алмаза. Скажем, точка 2 - это левая точка. Затем его можно определить следующим образом:
pos2 = (pos1[0] - diamondWidth/2, pos1[1] + diamondHeight/2)
Точка 4 будет просто другой стороной, что означает, что она имеет то же значение Y, но оно меньше или больше значения Y точки 2 на diamondWidth
. В моем случае, поскольку точка 2 - это точка слева, а точка 4 - больше вправо, поэтому точка 4 будет на больше , чем точка 2, на diamondWidth
.
pos4 = (pos2[0]+diamondWidth, pos2[1])
Теперь, когда мы определили точки ромба, мы можем использовать функцию pygame.draw.polygon
, чтобы соединить их и нарисовать форму.
примечание
Вы упоминаете, что запутались в функции, поэтому вот обзор параметров:
- Поверхность: экран, изображение или любой другой экземпляр
pygame.Surface
для рисования фигуры. В большинстве случаев это будет экран, который вы определяете в верхней части кода.
- color: цвет, используемый для рисования многоугольника. Для простоты это значение
rgb
. Значения rgba
(добавить прозрачность / прозрачность) могут вступить в силу, если экземпляр pygame.Surface
, который вы передали в первом параметре, получил флаг pygame.SRCALPHA
, например:
pygame.Surface((width, height), pygame.SRCALPHA)
pointlist: список (возможно, кортеж) точек для подключения. Они расположены в том порядке, в котором они связаны. I.E: Первая точка в списке связана со второй, вторая с третьей, третья с четвертым и т. Д.
Кроме того, последняя точка связана с первой, чтобы завершить форму (в противном случае это будет открытая форма, ее последняя сторона не связана)
width: последний (необязательный) аргумент. Иногда не проходит, как это
по умолчанию 0.
Если значение равно 0: форма заполняется переданным ранее параметром цвета.
Если фигура> 0: рисуется только контур фигуры, а фигура не заполняется. Значением является толщина линии.
Вы проходите.
Надеюсь, это прояснит ситуацию. Пожалуйста, следите за любыми вопросами
Итак, вот пример использования функции многоугольника. Я включил только основной цикл и некоторые настройки, чтобы сократить длину этого. Если вы удалите комментарии и часть установочного кода (возможно, замените его на свой), то это станет очень короткой и простой программой:
import pygame
from pygame.locals import *
screenWidth = 600
screenHeight = 600
pygame.init()
window = pygame.display.set_mode((screenWidth, screenHeight))
pygame.display.set_caption("Diamond")
clock = pygame.time.Clock()
MAXFPS = 30
# define the diamond points as described above
diamondWidth = 80
diamondHeight = 100
pos1 = (screenWidth/2, screenHeight/2 - diamondHeight/2)
pos2 = (pos1[0] - diamondWidth/2, pos1[1] + diamondHeight/2)
pos3 = (pos1[0], pos1[1]+diamondHeight)
pos4 = (pos2[0]+diamondWidth, pos2[1])
# points for the first diamond
points = [pos1, pos2, pos3, pos4]
# points for the second diamond, which are exactly like the first except their
# Y value is incremented over the original points so it does not appear over
# it, but rather to it's left
secondPoints = [(p[0]+diamondWidth+10, p[1]) for p in points]
stop = False
while not stop:
for event in pygame.event.get():
if event.type == QUIT:
stop = True
window.fill((255, 255, 255))
# DRAWING THE DIAMOND:
# Here is where we connect all the points in the [points] array, and
# draw them as a shape with a certain color (used cian because it's
# a diamond-dy color lol)
# Draw filled diamond
pygame.draw.polygon(window, (0, 255, 255), points, 0)
# Draw empty diamond with lines of thickness 4
pygame.draw.polygon(window, (0, 255, 255), secondPoints , 4)
pygame.display.flip()
clock.tick(MAXFPS)
pygame.quit()