你好,我正在尝试在pygame中创建一个rpg游戏 但是,每次我尝试运行代码进行测试时,都会告诉我 “'pygame.Surface'对象的描述符'blit'需要一个参数”
我相信我已经同意了这一论点。
import pygame
import os
from pygame.locals import*
screen_width = 1900
screen_height = 1080
black = (0, 0, 0)
white = (255, 255 ,255)
red = (255, 0 ,0)
lime = (0, 255, 0)
blue = (255, 255, 0)
aqua = (0, 255, 255)
magenta = (255, 0, 255)
silver = (192, 192, 192)
gray = (128, 128, 128)
maroon = (128, 0, 0)
olive = (128, 128, 0)
green = (0, 128, 0)
purple = (128, 0, 128)
teal = (0, 128, 128)
navy = (0, 0, 128)
pygame.display.init()
screen = pygame.display.set_mode([screen_width, screen_height])
pygame.display.set_caption('This is a rpg')
clock = pygame.time.Clock()
current_path = os.path.dirname('untitled')
resource_path = os.path.join(current_path, 'Characters')
character_path = os.path.join(resource_path, 'Knight')
image_path = os.path.join(character_path, 'Walk_Attack')
playerimg = pygame.image.load(os.path.join(character_path, 'knight.png'))
x = (screen_width * 0.45)
# I only put it up here because it told me "x" wasent defined in "def player(x, y):"
y = (screen_height * 0.8)
def player(x, y):
x = (screen_width * 0.45)
y = (screen_height * 0.8)
pygame.Surface.blit(source = playerimg, x = x, y = y)
dead = False
while not dead:
for event in pygame.event.get():
if event.type == pygame.QUIT:
dead = True
player(x, y)
pygame.Surface.fill(white)
pygame.display.flip()
clock.tick(60)
pygame.quit()
quit()
screen.fill(white)
我希望它可以打开白屏。也许能够看到图片。但它所要做的就是告诉我blit需要争论。 当我告诉它找到图片的位置以及x和y坐标时,我以为我给了它一个论点
答案 0 :(得分:0)
似乎您正在尝试学习如何用Python编写代码并同时使用Pygame库。我不建议这样做;首先学习更多代码编写基础知识。但我会尽力帮助您解决困惑:
但它所做的只是
正确;在启动过程中出现错误,因此它无法显示任何内容。
当我告诉它找到图片的位置以及x和y坐标时,我以为我给了一个论点
密钥位于单词descriptor
和object
中。 pygame.Surface
是该类的 ,而blit
是该类的 的方法,但是您试图像使用普通函数一样使用它。
您需要创建该类的实例,并使用其方法。您已经有这样一个实例:它称为screen
,由pygame.display.set_mode
创建。现在,我们可以例如screen.blit(playerimg, (x, y))
。
我之所以只把它放在这里是因为它告诉我在“ def player(x,y):”中定义了“ x”:
之所以发生这种情况,是因为您定义了player
来接受x
和y
的值,但是在函数的 out 代码中,您试图调用使用外部函数中的x
和y
-不存在。请仔细研究示例:
def player(x, y):
# We don't need to define x and y inside, because they will be given to us
# if we do assign some values, it replaces what we were passed in.
# This is bad, because the point is to let the outside code decide.
print(f"I was passed in: x = {x}, y = {y}")
x = 1
y = 2
# this requires the above; it has nothing to do with x and y inside the function.
player(x, y)
# but we can use different names:
a = 1
b = 2
player(a, b)
# or no names at all:
player(1, 2)
(再次;首先了解更多代码编写基础知识;然后,当发生这种情况以及为什么发生这种情况时,您将很明显,并且您将能够第一次对其进行正确修复,并了解为什么要进行正确的修复正确的。)
答案 1 :(得分:0)
pygame.Surface.blit
是一个Method,第二个参数(dest
)是一个包含2个组成部分的位置元组,因此必须为:
screen.blit(source = playerimg, dest = (x, y))
screen.fill(white)
请注意,pygame.Surface
对象上的操作.blit()
和.fill()
操作符。如果要fill
显示屏或blit
显示屏上的某物,则必须使用与显示屏关联的Surface。您的情况是screen
;
screen = pygame.display.set_mode([screen_width, screen_height])
或者,您可以执行以下操作:
pygame.Surface.blit(screen, playerimg, (x, y))
分别
pygame.Surface.fill(screen, white)
此外,在清除显示之后且在更新显示之前,您必须绘制player
:
screen.fill(white)
player(x, y)
pygame.display.flip()