【问题标题】:Trying to make a rect appear on screen without using the "blit" function尝试在不使用“blit”功能的情况下使矩形出现在屏幕上
【发布时间】:2023-02-21 22:59:29
【问题描述】:

我正在尝试制作一个特定的对象,在这种情况下,一个平台在屏幕上显示为浮动矩形,而无需使用 blit。我已经为该平台创建了一个类,但它只是没有出现在屏幕上。我在网上看到其他人的代码是这样工作的,但我不明白我做错了什么。背景无需 blit 即可工作,但平台不支持

我尝试按照教程的确切步骤在线搜索解决方案事件,但它不起作用。有人可以帮忙吗? 主文件

import pygame, sys, time
from settings import *
from sprites import BG
from sprites import Platform

pygame.init()


class Main:
    def __init__(self):
        # setup
        self.display = pygame.display.set_mode((WIDTH, HEIGHT))  # , pygame.FULLSCREEN
        pygame.display.set_caption("Jumpy")
        self.clock = pygame.time.Clock()
        # groups
        self.all_sprites = pygame.sprite.Group()
        # sprite setup
        Platform(self.all_sprites)
        BG(self.all_sprites)

    def run(self):
        while True:
            # events
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            # game logic
            self.all_sprites.update()
            self.all_sprites.draw(self.display)
            self.clock.tick(FPS)
            pygame.display.update()

if __name__ == '__main__':
    main = Main()
    main.run()

精灵

import pygame
from settings import *


class BG(pygame.sprite.Sprite):
    def __init__(self, groups):
        super().__init__(groups)
        self.image = pygame.image.load("bg_img.png").convert()
        self.image = pygame.transform.scale(self.image, (WIDTH, HEIGHT))
        self.rect = self.image.get_rect(topleft=(0, 0))


class Platform(pygame.sprite.Sprite):
    def __init__(self, groups):
        super().__init__(groups)
        self.image = pygame.image.load("platform1.png")
        self.rect = self.image.get_rect(midleft=(HEIGHT / 2, WIDTH / 2))

【问题讨论】:

    标签: python pygame pygame-surface


    【解决方案1】:

    我也是 pygame 的新手,但我会尽力而为。我只是想给你一个我所做的例子。所以首先,我有这条线

    BORDER = pygame.Rect(WIDTH//2 - 5, 0, 10, HEIGHT)
    

    这当然是我想在屏幕上绘制的东西的变量 然后在那之后我做了线

    pygame.draw.rect(WIN, BLACK, BORDER)
    

    这一行当然在我的屏幕中间放置了一个边框,而不需要 blit 功能。 WIN 基本上是屏幕,我可以在其中设置屏幕大小。 black 是一个已经分配了颜色 (0, 0, 0) 的变量,而 border 当然是边框。我认为您可以尝试使用此代码,但在不使用 blit 函数的情况下,将变量 BORDER 替换为您尝试绘制的任何内容。

    显然我可能完全错了,因为我也是相当新的,但它可能值得一试。

    【讨论】:

      【解决方案2】:

      您必须确保在平台之前绘制背景。使用pygame.sprite.OrderedUpdates()代替pygame.sprite.Group并在平台前添加背景(RenderUpdates按添加顺序绘制Sprites):

      class Main:
          def __init__(self):
              # setup
              self.display = pygame.display.set_mode((WIDTH, HEIGHT))  # , pygame.FULLSCREEN
              pygame.display.set_caption("Jumpy")
              self.clock = pygame.time.Clock()
              # groups
              self.all_sprites = pygame.sprite.OrderedUpdates()    # <---
              # sprite setup
              BG(self.all_sprites)                                 # <---
              Platform(self.all_sprites)                           # <---
      
          # [...]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 2023-03-26
        • 2017-12-14
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多