当前位置: 首页 > 知识库问答 >
问题:

pygame窗口上奇怪的黑色矩形

唐阳飙
2023-03-14

有人知道这个黑色矩形是什么吗?这是我的主要任务。py:

#-- TODO
# * 

import pygame
from pygame.locals import *
from mario import Mario
from levels import *
import os

pygame.init()
pygame.mixer.init()

pygame.mixer.music.load(r'./themesong.mp3')
pygame.mixer.music.play(-1)

monitorInfo = pygame.display.Info()
W, H = monitorInfo.current_w, monitorInfo.current_h

wn = pygame.display.set_mode((W, H))
pygame.display.set_caption('Super Mario Bros by WinstonMan')

current_path = os.path.dirname(__file__)
BACKGROUND = pygame.transform.scale(pygame.image.load(os.path.join(current_path, 'background.png')), (W, H))
BLOCK = pygame.transform.scale(pygame.image.load(os.path.join(current_path, 'block.png')), (100, 100))



def main():
    level = 1
    running = True
    FPS = 120
    clock = pygame.time.Clock()

    right = False
    left = False
    jumping = False
    jumpcount = 0

    mario = Mario(100, H - 100, 100, 100)

    def redrawWindow():
        wn.blit(BACKGROUND, (0, 0))


        mario.draw(wn)

    while running:
        clock.tick(FPS)

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

        redrawWindow()

        keys = pygame.key.get_pressed()
        if keys[K_RIGHT]:
            right = True
        if keys[K_LEFT]:
            left = True
        if keys[K_UP]:
            jumping = True
        
        if not keys[K_RIGHT]:
            right = False

        if not keys[K_LEFT]:
            left = False
        
        if not keys[K_UP]:
            jumping = False
        
        if right:
            mario.moveright()
            if mario.x + mario.width > W:
                mario.x = W - mario.width
        
        if left:
            mario.moveleft()
            if mario.x < 0:
                mario.x = 0
        
        if jumping:
            if jumpcount < 2:
                mario.grav = -10
                mario.y += mario.grav
            jumpcount += 1
        
        if mario.y < H - 200:
            mario.y += mario.grav
            mario.grav += 1
        
        if mario.y > H - 200:
            mario.y = H - 200
            jumpcount = 0
        
        # mario.updateY(H)
        


if __name__ == '__main__':
    main()

这是我的马里奥。py:

import pygame
import os

pygame.init()

class Mario:
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.big_img = pygame.transform.scale(pygame.image.load(os.path.join('./', 'mario_big.png')), (self.width, self.height))
        self.small_img = pygame.transform.scale(pygame.image.load(os.path.join('./', 'mario_small.png')), (self.height - 50, self.height - 50))
        self.grav = 0
        self.x_vel = 7
        self.X_MAX_VEL = 7
        self.X_MIN_VEL = -7
        self.img = self.small_img
        self.mask = pygame.mask.from_surface(self.img)
        # self.rect = self.img.get_rect()
        

    def jump(self):
        self.grav = -10

    def moveright(self):
        self.x += self.x_vel

    def moveleft(self):
        self.x -= self.x_vel
    
    def deccelerate(self):
        if self.x_vel > 0:
            self.x_vel -= 1
        elif self.x_vel < 0:
            self.x_vel += 1
    
    def draw(self, window):
        window.blit(self.img, (self.x, self.y))

最后,我的levels.py:

import pygame, os

class Level1:
    def __init__(self):
        self.blockcoords = []

我使用的是Windows10计算机,python版本为3.8。3和pygame版本1.9。6.

共有1个答案

燕钟展
2023-03-14

您没有通过pygame更新窗口。陈列update()pygame。陈列在重画窗口中翻转()

def main():
    # [...]

    def redrawWindow():
        wn.blit(BACKGROUND, (0, 0))

        mario.draw(wn)

        pygame.display.flip() # <--- this is missing

    # [...]

 类似资料:
  • 我正在为平台游戏做教程,但我的Pygame窗口显示一个黑屏。 我不知道怎么解决这个问题。 我尝试再次关闭和打开Visual Studio Code,但没有任何结果。

  • 我对glfw有一个小问题。 我的代码非常简单,我只想创建一个空窗口。 } 此代码编译,但当我运行它时,我只有一个白色窗口。窗口的标题是正确的,但里面的一切都是白色的......我尝试像那样使用glClearColor。 但是我的窗户仍然是白色的....我用的是visual studio 2015。 怎么弄个黑窗? 编辑: 忘了补充这个:glfwMakeContextCurrent(window);

  • 这是我的代码,请记住,我在几天前学习了python,所以我的代码可能制作不正确,等等。我正在尝试制作一个窗口,该窗口将显示一些文本(测试版),并将显示两个小矩形,我想成为按钮。

  • 这在我看来是一个罕见的问题,所以我不确定我会得到一个答案。我张贴的程序重现这个错误,希望你能帮助我。 您有没有尝试过在Jcef(Java-铬嵌入式框架)示例应用程序(简单或详细)中通过做获得的浏览器实例中执行打开新窗口并注意到奇怪的行为?每当在主窗口之外创建一个新窗口时,单击新窗口不会将其置于前面(或焦点)。主窗口(包含浏览器的UIComponent的JFrame)立即窃取焦点并将另一个窗口发回。

  • 我正在写一个简单的mandelbrot渲染器。在程序计算并绘制所有内容后,它将保存曲面并进行blits。这很好,但在我添加了更新显示功能后,它只显示一个黑屏。我需要更新每次迭代,因为我将添加一些文本和其他内容。我只包括了节目的重要部分。有人知道为什么会这样吗?

  • 我一直在尝试使用pygame来显示游戏场景,但它似乎已经停止了对我的工作:在pygame关闭之前,它只在我创建的任何屏幕上显示一个灰色框,然后屏幕上应该显示的内容在退出之前短暂闪烁。例如,下面的最小代码显示灰色屏幕5秒钟,然后快速闪烁黑色并退出: 这似乎是屏幕显示的问题,而不是pygame本身的问题,因为我可以使用pg.image制作曲面并将其保存到图像文件中。save(),它们在那里看起来很好。