以下是主要代码
import pygame
from player import *
pygame.init()
window = pygame.display.set_mode((800,600))
pygame.display.set_caption("Platformer")
gravity=-0.5
black = (0,0,0)
blue = (50,60,200)
clock = pygame.time.Clock()
player=Player(400,0)
gameLoop = True
while gameLoop:
for event in pygame.event.get():
if (event.type==pygame.QUIT):
gameLoop = False
window.fill(blue)
player.update(gravity)
player.update(window)
clock.tick(60)
pygame.display.flip()
pygame.quit()
这是第二个文件
import pygame
class Player:
def __init__(self,x,y):
self.x=x
self.y=y
self.width=32
self.height=32
self.velocity=0
def update(self, gravity):
self.velocity += gravity
self.y -= self.velocity
def render(self, window):
pygame.draw.rect(window,(0,0,0),(self.x,self.y,self.width,self.height))
我正在按照教程系列进行操作,老师已将这些确切的代码放入其中。我正在尝试使用此代码进行逆向工程以了解有关如何制作平台游戏的更多信息,但无法使此代码正常工作..任何想法?
错误在此代码中:
def update(self, gravity):
self.velocity += gravity
self.y -= self.velocity
答案 0 :(得分:0)
正如 @JGreenwel 和 @rmunn 已经提到的那样,问题在于您调用了'Hello'
方法主要程序循环中的对象 两次 ,但同时传递 两个不同的对象 (.render()
和player
)到它:
gravity
结果是window
,因为 while gameLoop:
for event in pygame.event.get():
# ... some code ...
player.update(gravity) #1. call
player.update(window) #2. call
clock.tick(60)
pygame.display.flip()
方法需要数字而非TypeError
实例才能按预期工作。
要解决此问题,您需要将第二个方法调用更改为 .render()
pygame.surface
player.
:
render
现在一些(window)
属性(例如while gameLoop:
for event in pygame.event.get():
# ... some code ...
player.update(gravity) #1. update some attributes
player.render(window) #2. blit player onto the screen
clock.tick(60)
pygame.display.flip()
或player
)通过第一个方法调用得到更新,第二个属性将对象(取决于tis属性)绘制到屏幕。