+ ='float'和'pygame.surface'不受支持的操作数类型

时间:2015-10-19 02:05:23

标签: python pygame

以下是主要代码

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

1 个答案:

答案 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属性)绘制到屏幕。