【问题标题】:Pygame screen.blit black after mode changePygame screen.blit black after mode change
【发布时间】:2023-03-22 13:08:02
【问题描述】:

我想以不同的模式显示不同的pygame 表面。我的第一个模式有效,但后续模式中的表面是黑色的。我不明白为什么。

import pygame
import pygame.gfxdraw

screenWidth = 800
screenHeight = 800

path = (r"C:\Users\eeifler\Pictures\code drawings\35\trace.PNG")

imageFile = pygame.image.load(path)
imageFile = pygame.transform.scale(imageFile, (screenWidth,screenHeight))

pygame.init()

screen = pygame.display.set_mode((screenWidth, screenHeight))

running = True
quadrent = 1

while running:
    screen.blit(imageFile, (0,0))
    cropped = pygame.Surface((screenWidth//2, screenHeight//2))      


    if quadrent == 1:
        cropped.blit(screen, (0,0), pygame.Rect( 0, 0, screenWidth//2, screenHeight//2))

        bottomLeft = pygame.transform.flip(cropped, False, True)
        screen.blit(bottomLeft, pygame.Rect(0,screenHeight//2,screenWidth//2,screenHeight//2))

        topRight = pygame.transform.flip(cropped,True,False)
        screen.blit(topRight, pygame.Rect(screenWidth//2,0,screenWidth//2, screenHeight//2))

        bottomRight = pygame.transform.flip(cropped, True, True)
        screen.blit(bottomRight, pygame.Rect(screenWidth//2,screenHeight//2, screenWidth//2, screenHeight//2))

    if quadrent == 2:
        cropped.blit(screen, (screenWidth//2,screenHeight//2), pygame.Rect( screenWidth//2, 0, screenWidth//2, screenHeight//2))

        topLeft = pygame.transform.flip(cropped, False, True)
        screen.blit(topLeft, pygame.Rect( 0, 0, screenWidth//2, screenHeight//2))

        bottomLeft = pygame.transform.flip(cropped, True, True)
        screen.blit(bottomLeft, pygame.Rect(0,screenHeight//2,screenWidth//2,screenHeight//2))

        bottomRight = pygame.transform.flip(cropped, True, True)
        screen.blit(bottomRight, pygame.Rect(screenWidth//2,screenHeight//2, screenWidth//2, screenHeight//2))



    #if quadrent == 3:
        #cropped.blit(screen, (0,0), pygame.Rect( 0, screenHeight//2, screenWidth//2, screenHeight//2))
    #if quadrent == 4:
        #cropped.blit(screen, (0,0), pygame.Rect(screenWidth//2,screenHeight//2, screenWidth, screenHeight))

    key = pygame.key.get_pressed()

    if key[pygame.K_a]:
        quadrent = 1
    if key[pygame.K_s]:
        quadrent = 2
    if key[pygame.K_d]:
        quadrent = 3
    if key[pygame.K_f]:
        quadrent = 4

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()

【问题讨论】:

  • 尝试使用elif
  • if 和 elif 给出相同的结果。谢谢@Xion

标签: python pygame


【解决方案1】:

啊。我误解了如何使用surface.blit

cropped.blit(screen, (screenWidth//2,screenHeight//2), pygame.Rect( screenWidth//2, 0, screenWidth//2, screenHeight//2))

应该是

cropped.blit(screen, (0,0), pygame.Rect( screenWidth//2, 0, screenWidth//2, screenHeight//2))

分配给新表面的左上角。在pygame.Rect() 部分中决定裁剪部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2011-02-13
    • 2022-12-02
    • 2018-04-30
    • 1970-01-01
    • 2022-12-27
    • 1970-01-01
    相关资源
    最近更新 更多