#python #pygame
#python #pygame
Вопрос:
Я пытаюсь нарисовать круг, который находится внутри класса, который предназначен для игрока.
Однако я не могу нарисовать круг.
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 = pygame.display.set_mode((display_width, display_height))
screen.fill(white)
class Player():
def __init__(self):
self.player_surface = screen
self.player_color = green
self.player_pos = ((display_height - self.player_radius * 3), (display_width/2))
self.player_radius = 5
self.player_width = 0
def character(self):
self.player_character = pygame.draw.circle(self.player_surface, self.player_color, self.player_pos, self.player_radius, self.player_width)
#Player Reference
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
running = False
#Background
screen.fill(white)
#Draw everything in order, each drawn object will be drawn beneath the next drawn object.
# Draw the player -----------------------------
player.character()
# Draw the player -----------------------------
#Update
pygame.display.update()
Комментарии:
1. Можете ли вы рисовать круги, используя код, которого нет внутри метода класса? Если нет, то ваш вопрос на самом деле не столько о классах, сколько о том, как использовать
pygame
для рисования кругов.2. Да, я могу рисовать круги вне классов, это работает для меня.
Ответ №1:
Здесь я изменил ваш код, чтобы отобразить круг.
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 = pygame.display.set_mode((display_width, display_height))
screen.fill(white)
class Player():
def __init__(self):
self.player_surface = screen
self.player_color = green
self.player_radius = 25
self.player_pos = (int(display_height - self.player_radius * 3), int(display_width/2))
self.player_width = 0
def character(self):
self.player_character = pygame.draw.circle(self.player_surface, self.player_color, self.player_pos, self.player_radius, self.player_width)
#Player Reference
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
running = False
#Background
screen.fill(white)
#Draw everything in order, each drawn object will be drawn beneath the next drawn object.
# Draw the player -----------------------------
player.character()
# Draw the player -----------------------------
#Update
pygame.display.update()
Это были проблемы с вашим кодом:
- Вы определили его
self.radius
после использования в предыдущей строке pygame.draw.circle
ожидается, что координаты x, y будут целочисленными значениями, однако вы рассчиталиself.player_pos
путем деленияdisplay_width
на 2, что привело кfloat
значению. Я явно преобразовал значение вint
, и проигрыватель (круг) отображается на экране