我想显示一个继承自 pygame.sprite.Sprite 的 pygame 按钮,但它没有在显示屏上显示

I want to show a pygame button, which is inherited from pygame.sprite.Sprite, but it is not getting blitted on the display

全部

我正在使用 PYGame 库构建游戏。 我正在为这段代码苦苦挣扎,我想在其中显示一个按钮。该按钮继承自 pygame.sprite.Sprite class.

我四处搜索,但找不到任何带有从 pygame.sprite.Sprite class.

生成的按钮的示例
#!/usr/bin/env python

import os, sys
import pygame
import numpy

# initialize the pygame module
pygame.init();

if not pygame.font: logging.warning(' Fonts disabled');

class Button(pygame.sprite.Sprite):

  def __init__(self, gameplayCode, gameplayLbl, gameplaycolorRGB):
      # Call the parent class (Sprite) constructor
   super().__init__();

   self.gameplayCode = gameplayCode;
   self.gameplayLbl = gameplayLbl;
   self.gameplaycolorRGB = gameplaycolorRGB;
   self.buttondims = self.width, self.height = 190, 60;
   self.smallText = pygame.font.SysFont('comicsansms',15);
   # calculating a lichter color, needs to be used when hoovering over button
   self.color = numpy.array(gameplaycolorRGB);
   self.white = numpy.array(pygame.color.THECOLORS['white']);
   self.vector = self.white - self.color;
   self.gameplaycolorRGBFaded = self.color + self.vector *0.6;

 def setCords(self,x,y):
   self.textSurf = self.smallText.render(self.gameplayLbl, 1, 
   pygame.color.THECOLORS['black']);
   self.image = pygame.Surface((self.width, self.height));
   self.image.fill(self.gameplaycolorRGB);
   self.rect = self.image.get_rect();
   self.rect.topleft = x,y;
   self.rect.center = (x+(x/2),y+(y/2));

 def pressed(self,mouse):
    if mouse.get_pos()[0] > self.rect.topleft[0]:
        if mouse.get_pos()[1] > self.rect.topleft[1]:
            if mouse.get_pos()[0] < self.rect.bottomright[0]:
                if mouse.get_pos()[1] < self.rect.bottomright[1]:
                   if mouse.get_pressed()[0] == 1:
                      return True;
                   else:
                      return False;
                else:
                   return False;
            else:
               return False;
        else:
           return False;
    else:
       return False;

 def getGamePlayCode(self):
  return self.gameplayCode;

 def getGamePlayLbl(self):
  return self.gameplayLbl;

 def getGamePlayColorRGB(self):
  return self.gameplaycolorRGB;

 def getGamePlayColorRGBFaded(self):
  return self.gameplaycolorRGBFaded;

 def getButtonWidth(self):
  return self.buttondims[0];

 def getButtonHeight(self):
  return self.buttondims[1];

 def getButtonDims(self):
  return self.buttondims;

 button=Button('CODE','LABEL',pygame.color.THECOLORS['darkturquoise']);

os.environ['SDL_VIDEO_CENTERED'] = '1';
display_size = display_width, display_height = 1300,600;
gameDisplay = pygame.display.set_mode(display_size);
display_xcenter = gameDisplay.get_width()/2;
display_ycenter = gameDisplay.get_height()/2;

# create a background
background = pygame.display.get_surface();
background.fill(pygame.color.THECOLORS['white']);

# put background on the surface
backgroundPos = xcoord, ycoord = 0,0;
gameDisplay.blit(background, backgroundPos);
pygame.display.update();

title='Testing to show a button which is inherited form 
pygame.sprite.Sprite. When pressing the button code must react. When 
hoovering color must be brighter.';
textSurface = pygame.font.SysFont('comicsansms',15).render(title, True, 
pygame.color.THECOLORS['black']);
textRect = textSurface.get_rect();
gameDisplay.blit(textSurface, textRect);
pygame.display.update();

clock = pygame.time.Clock();
FPS = 60;

game_loop = True;

button.setCords(display_xcenter,display_ycenter);

while game_loop:
   mouse = pygame.mouse;

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        print('Quiting');
        game_loop = False;

    if button.pressed(mouse):
        print('Gameplay pressed');

pygame.display.update();
clock.tick(FPS);

# ending the pygame module
pygame.quit();

我想 blit 按钮,对按下的方法做出反应,当鼠标悬停在按钮上时,颜色必须更亮。

非常感谢任何意见。

一开始我的游戏没有任何 classes。现在我正在使用 classes 重建游戏。

亲切的问候 奥利维尔 -A Python 初学者-

Pygame 精灵通常应该添加到 sprite group(有几种不同的组类型)。然后,您可以通过调用 group.update()group.draw(gameDisplay).

在主循环中更新和绘制所有精灵
# Create a sprite group and add the button.
buttons = pygame.sprite.Group(button)
# You could also add it afterwards.
# buttons.add(button)

while game_loop:
    mouse = pygame.mouse

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            print('Quiting')
            game_loop = False
        if button.pressed(mouse):
            print('Gameplay pressed')

    # This will call the `update` methods of all sprites in
    # this group (not necessary here).
    buttons.update()
    # The display is usually filled each frame (or blit a background image).
    gameDisplay.fill(pygame.color.THECOLORS['white'])
    # This will draw each sprite `self.image` at the `self.rect` coords.
    buttons.draw(gameDisplay)
    pygame.display.update()
    clock.tick(FPS)