gpt4 book ai didi

Python Pygame 层不显示或显示不可调用错误

转载 作者:行者123 更新时间:2023-12-01 01:34:11 25 4
gpt4 key购买 nike

我正在尝试使用 Pygame.Surface() 创建一个包含 2 层的游戏但是,当我尝试执行此操作时,它要么仅显示根层,要么返回对象不可调用错误。

下面的代码显示了根层,但没有其他内容

def Pygame():
#MainDisplay for background
#GameDisplay for Game

clock=pygame.time.Clock()

def Main(): #MAIN DISPLAY SETUP
main_display_width=1280 #display width 1280
main_display_height=600 #display height 600
MainDisplay=pygame.display.set_mode((main_display_width,main_display_height)) #desplay setup
pygame.display.set_caption("Dragon King: Legacy")
black=(0,0,0) #colour set
MainDisplay.fill(black) #colour set


def Game():
game_display_height=600 #game layer display width
game_display_width=600 #game layer display height

gameDisplay=pygame.Surface((game_display_height,game_display_width))
white=(255,255,255)
gameDisplay.fill(white)
pygame.display.flip()

Game()
pygame.display.flip()
Main()

Pygame()

下面的代码显示了根层,但没有显示第二层,并返回错误

def BaseLayer():        #the layer the score will be located
white=(255,255,255)
size=(600,600)
BaseLayer=pygame.display.set_mode(size)
pygame.display.set_caption("Pygame")
BaseLayer.fill(white)


def GameLayer(): #The layer the game will take place.
size=(500,500)
GameLayer=pygame.surface((500,500))
screen.fill(0,0,0)

GameLayer()

pygame.display.flip()

BaseLayer()

上面的代码返回下面的错误

>>> 
RESTART: C:\Users\Alex\OneDrive\A- Levels\1 COMPUTER SCIENCE\Python\test debug.py
Traceback (most recent call last):
File "C:\Users\Alex\OneDrive\A- Levels\1 COMPUTER SCIENCE\Python\test debug.py", line 43, in <module>
BaseLayer()
File "C:\Users\Alex\OneDrive\A- Levels\1 COMPUTER SCIENCE\Python\test debug.py", line 39, in BaseLayer
GameLayer()
File "C:\Users\Alex\OneDrive\A- Levels\1 COMPUTER SCIENCE\Python\test debug.py", line 36, in GameLayer
GameLayer=pygame.surface((500,500))
TypeError: 'module' object is not callable
>>>

下面的代码可以工作并显示图像,但没有图层功能

def Pygame():    # one layer working vertion
white=(255,255,255)
size=(600,600)
screen=pygame.display.set_mode(size)
pygame.display.set_caption("Testing")
screen.fill(white)

#dragon #graphic I am using
def Dragon():
#print("cows") #test to see if definition is being called properly
x=(100)
y=(100)
DragonIMG=pygame.image.load("Green Dragon.gif")
screen.blit(DragonIMG,(x,y))
pygame.Surface.blit

Dragon()
pygame.display.flip()
Pygame()

所有代码都有

import pygame

pygame.init()

之前

我认为这不起作用的唯一原因是我尝试设置图层显示图形的方式有问题,并且单层显示工作正常

最佳答案

停止你所做的一切,从头开始。

开始时,游戏的“骨架”应如下所示:

import pygame
pygame.init()

WHITE = pygame.color.Color('white')

screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

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

screen.fill(WHITE)
pygame.display.update()
clock.tick(60)

(您还应该使用 main 函数,但让我们保持简单)

现在有一个不错的小游戏循环。它通常包含三件事:事件处理、游戏逻辑更新和绘制到屏幕。您应该确保只调用 pygame.display.update()该循环的每次迭代(否则,请做好痛苦的准备)。

请注意,我们已经有一个 Surface ,称为 screen 。这是一个特殊的Surface ,因为它代表屏幕:您在其上绘制的所有内容 Surface使用 pygame.display.update() 更新后,屏幕上将显示.

现在,拥有不同的层并不困难,因为每个Surface工作原理是一样的。如果您希望屏幕的一部分是实际的游戏内容,另一部分是 GUI 或其他内容,只需创建更多表面,在其上绘制内容,然后将它们绘制到 screen表面。

看看这个:

import pygame
pygame.init()

WHITE = pygame.color.Color('white')
GREY = pygame.color.Color('grey')
BLUE = pygame.color.Color('blue')

screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

game_part = pygame.surface.Surface((800, 400))
game_part.fill(GREY)

gui_part = pygame.surface.Surface((800, 200))
game_part.fill(BLUE)

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

screen.fill(WHITE)
screen.blit(game_part, (0, 0))
screen.blit(gui_part, (0, 400))
pygame.display.update()
clock.tick(60)

现在我们可以在game_part上自由地绘制东西了。和gui_part :

import pygame
import pygame.freetype

pygame.init()

WHITE = pygame.color.Color('white')
GREY = pygame.color.Color('grey')
BLUE = pygame.color.Color('blue')

screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

game_part = pygame.surface.Surface((800, 400))
gui_part = pygame.surface.Surface((800, 200))

ball = pygame.rect.Rect((50, 50, 50, 50))
font = pygame.freetype.Font(None, 30)

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

screen.fill(WHITE)
game_part.fill(GREY)
gui_part.fill(BLUE)

# draw something of the game
ball.move_ip(5, 0)
if not game_part.get_rect().contains(ball):
ball.x = 0
pygame.draw.rect(game_part, WHITE, ball)

# draw something of the GUI
font.render_to(gui_part, (100, 100), 'Hello there!', WHITE)

screen.blit(game_part, (0, 0))
screen.blit(gui_part, (0, 400))

pygame.display.update()
clock.tick(60)

到目前为止,一切都很好。请注意,在做游戏时,您可能想要使用 Sprites 。如果您这样做,请注意 pygame 有一个内置的层系统 Sprites形式为 LayeredUpdates ,但这超出了这个问题/答案的范围。

<小时/>

P.S.:您的第一个代码不起作用,因为您没有在屏幕上绘制任何内容(在您的情况下, MainDisplay )。您的第二个示例不起作用,因为 pygame.surface是一个模块。您正在寻找pygame.surface.Surface (这就是错误消息告诉您的内容)。

关于Python Pygame 层不显示或显示不可调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com