Ответы пользователя по тегу Python
  • Что за странная ошибка?

    @boga-net
    Это рабочий код.

    import pygame as pg
    import sys
    from pygame.sprite import Group
    from pygame.sprite import Sprite
    
    SCREEN_WIDTH    = 400
    SCREEN_HEIGHT   = 400
    BG_COLOR   = 230, 230, 230
    
    class Soldier(Sprite):
    	def __init__(self, x, y, scale):
    		super().__init__()
    
    		self.scale = scale
    		self.image = pg.image.load("game.png").convert_alpha()
    		self.rect = self.image.get_rect()
    		self.rect.center = x, y
    		
    		self.width = self.image.get_width()
    		self.height = self.image.get_height()
    		self.new_width = self.width * self.scale
    		self.new_height = self.height * self.scale
    
    		self.image = pg.transform.scale(self.image, (self.new_width, self.new_height))
    
    pg.init()
    screen = pg.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    
    Soldiers = Group()
    Soldier = Soldier(30, 40, 3) # Икс, игрек и скейл
    Soldiers.add(Soldier)
    
    while True:    
    	for event in pg.event.get():
    		if event.type == pg.QUIT:
    			pg.quit()
    			sys.exit()
    	screen.fill(BG_COLOR)
    	Soldiers.draw(screen)
    	pg.display.update()


    Пожалуйста, в следующий раз вставляйте код в код пайтона
    Так проще и сохраняется читаемость:
    self.width = self.image.get_width()
    self.height = self.image.get_height()
    self.new_width = self.width * self.scale
    self.new_height = self.height * self.scale


    вместо
    class Soldier(pygame.sprite.Sprite):
    можно импортировать класс Sprite вверху и записывать проще:

    from pygame.sprite import Sprite
    class Soldier(Sprite):

    функция Super вроде бы современней
    super().__init__()
    вместо
    pygame.sprite.Sprite._init_(self)
    Ответ написан
  • Почему pygame не обнаруживает нажатия клавиш на клавиатуре?

    @boga-net
    Вам нужно отрисовывать объект в основном цикле While. И перед этим закрашивать экран.
    И хорошо бы, если в будущий раз вы помещали код, как код, а не как текст, чтобы сохранялись отступы и имелась подсветка синтаксиса. Так сложно воспринимать ваш код.
    в меню над текстовым полем 8 пункт с такими знаками: > - выбираете пайтон

    Я убрал всё лишнее и оставил работающий код, для удобства восприятия
    Клавиши управления заменил на WASD

    import pygame
    import sys
    
    x = 50
    y = 50
    speed = 5
    
    run = True
    
    clock = pygame.time.Clock()
    
    pygame.init()
    win = pygame.display.set_mode((500, 500))
    
    image = pygame.image.load('img.png').convert_alpha()
    rect = image.get_rect()
    
    while run:
    
    	for event in pygame.event.get():
    		if event.type == pygame.QUIT:
    			pygame.quit()
    			sys.exit()
    
    		key = pygame.key.get_pressed()
    
    		if key[pygame.K_a]:
    			x += -speed
    		if key[pygame.K_d]:
    			x += speed
    		if key[pygame.K_w]:
    			y += -speed
    		if key[pygame.K_s]:
    			y += speed
    
    	win.fill('white')
    
    	rect.x = x
    	rect.y = y
    	win.blit(image, rect)
    
    	pygame.display.update()
    	clock.tick(30)
    Ответ написан
    Комментировать