Pygame Cass Функция для создания платформ без ручного создания каждой отдельной платформы - PullRequest
0 голосов
/ 16 сентября 2018

Я создаю платформенную игру и пытаюсь сократить свой код, создав класс для платформ.Тем не менее, мой код не запускается, и я не уверен, что ошибка отображается.

Мой код:

import pygame,sys,time,random
pygame.init()

#COLOUR
light_red=(255,99,71)

res_x,res_y=800,600
display = pygame.display.set_mode((res_x,res_y))
display.fill(black)
pygame.display.update()
clock=pygame.time.Clock()
fps=60

class Rect:
        def __int__(self,color,x,y,l,h,th):
                self.color=color
                self.x=x
                self.y=y
                self.l=l
                self.h=h
                self.th=th


rect1=pygame.draw.rect(display,Rect('light_red','random.randrange(0,150)','150','300','50','5'))



 pygame.display.update()

Показана ошибка:

    rect1=pygame.draw.rect(display,Rect('light_red','random.randrange(0,150)','150','300','50','5'))
TypeError: Rect() takes no arguments

1 Ответ

0 голосов
/ 16 сентября 2018
  1. Вы ошиблись __init__ в вашем Rect классе.

  2. pygame.draw.rect принимает поверхность, цвет и объект в стиле прямоугольника, который может быть pygame.Rect, списком или кортежем с четырьмя элементами. Ваш пользовательский класс Rect не будет работать, но вы можете передать кортеж:

    rect = Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
    rect1n = pygame.draw.rect(display, rect.color, (rect.x, rect.y, rect.l, rect.h))
    
  3. Аргументы не должны быть строками:

    Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
    
  4. Вы можете просто указать свой метод Rect a draw, в котором вы вызываете pygame.draw.rect (также назначьте ему атрибут self.rect вместо отдельных атрибутов self.x и т. Д.):

    class Rect:
        def __init__(self,color,x,y,l,h,th):
            self.color = color
            self.th = th
            # Just create a pygame.Rect object to store the attributes.
            self.rect = pygame.Rect(x, y, l, h)
    
        def draw(self, surface):
            pygame.draw.rect(display, self.color, self.rect)
    
    rect = Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
    
    # Then draw it like this in the while loop.
    rect.draw(display)
    

Я рекомендую проверить, как работают спрайты и группы спрайтов , а затем превратить класс платформы в подкласс pygame.sprite.Sprite. Если вы хотите увидеть простой пример платформера со спрайтами и группами, взгляните на этот ответ .


Кроме того, лучше выберите другое имя для вашего Rect класса, поскольку класс pygame.Rect уже существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...