#python #pygame
#питон #pygame
Вопрос:
Я следил за учебником в Интернете только для того, чтобы заставить работать простой 2D-платформер, и я не могу понять, почему он не может рисовать коробки? Кроме того, плохо нарисованная фигурка-палочка разрисовывается на 2 части, которые затем разбиваются
Я пробовал возиться со значениями «stickman.png», «woodenboxbutsmaller.png» и размерами окон, но я просто не могу сделать это правильно? Я думаю, что он пытается нарисовать фигурку в виде коробок по какой-то причине, поэтому она будет выглядеть разбитой, но он должен пытаться использовать «деревянный ящик png».
import random import pygame import time pygame.init() display_width = 800 # game window width and height display_height = 600 background = (255,255,255) bg = pygame.image.load('smb.png') black = (0,0,0) # some colours for buttons and stuff white = (255,255,255) red = (200,0,0) green = (0,200,0) bright_red = (255,0,0) bright_green = (0,255,0) object_width = 50 # width hitbox of the object gameDisplay = pygame.display.set_mode((display_width,display_height)) pygame.display.set_caption('the greatest 2d platformer of all time: the game') clock = pygame.time.Clock() def button(msg,x,y,w,h,ic,ac,action=None): # button function allows menu to work later mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() print(click) if x w gt; mouse[0] gt; x and y h gt; mouse[1] gt; y: pygame.draw.rect(gameDisplay, ac,(x,y,w,h)) if click[0] == 1 and action != None: action() else: pygame.draw.rect(gameDisplay, ic,(x,y,w,h)) smallText = pygame.font.SysFont("comicsansms",20) textSurf, textRect = text_objects(msg, smallText) textRect.center = ( (x (w/2)), (y (h/2)) ) gameDisplay.blit(textSurf, textRect) def message_display(text): # message function that makes messages appear after various actions (usually crashing) largeText = pygame.font.Font('freesansbold.ttf',100) TextSurf, TextRect = text_objects(text, largeText) TextRect.center = ((display_width/2),(display_height/2)) gameDisplay.blit(TextSurf, TextRect) pygame.display.update() time.sleep(2) game_loop() def text_objects(text, font): # some text thing? think it just allows messages to work textSurface = font.render(text, True, black) return textSurface, textSurface.get_rect() def things(thingx, thingy, thingw, thingh, color): # i think this is for the floating squares? pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh]) def game_intro(): # basically the main menu intro = True while intro: for event in pygame.event.get(): #print(event) if event.type == pygame.QUIT: pygame.quit() quit() # sets white background and adds the text and buttons for the main menu gameDisplay.fill(white) largeText = pygame.font.SysFont("comicsansms",25) TextSurf, TextRect = text_objects("the greatest 2d platformer of all time: the game", largeText) TextRect.center = ((display_width/2),(display_height/2)) gameDisplay.blit(TextSurf, TextRect) button("start",150,450,100,50,green,bright_green, game_loop) button(":(",550,450,100,50,red,bright_red,pygame.quit) pygame.display.update() clock.tick(15) class Sprite(pygame.sprite.Sprite): def __init__(self, image, startx, starty): super().__init__() self.image = pygame.image.load('stickman.png') self.rect = self.image.get_rect() self.rect.center = [startx, starty] def update(self): pass def draw(self, screen): screen.blit(self.image, self.rect) class Player(Sprite): def __init__(self, startx, starty): super().__init__("stickman.png", startx, starty) class Box(Sprite): def __init__(self, startx, starty): super().__init__("woodenboxbutsmaller.png", startx, starty) def game_loop(): pygame.init() gameDisplay = pygame.display.set_mode((display_width,display_height)) clock = pygame.time.Clock() player = Player(200,400) boxes = pygame.sprite.Group() for bx in range(0,800,1400): boxes.add(Box(bx,600)) while True: pygame.event.pump() player.update() #draw loop gameDisplay.fill(background) player.draw(gameDisplay) boxes.draw(gameDisplay) pygame.display.flip() clock.tick(60) # 60fps frame rate game_intro()
Я не очень разбираюсь в программировании, и мне просто нужно, чтобы это работало для школьного проекта
Комментарии:
1. опечатка:
self.image = pygame.image.load(image)
вместоself.image = pygame.image.load('stickman.png')
(в классеSprite
)
Ответ №1:
В вашем заявлении есть опечатка. Это должно быть self.image = pygame.image.load(image)
вместо self.image = pygame.image.load('stickman.png')
(в классе Sprite
).