在Pygame中,即使我使用pygame.image.load加载图像,win.blit也无法正常工作

克里斯·凯珀

当我运行该程序并进入下一个阶段时,它输出以下信息:我不确定为什么会这样,因为我在Up这里了一个曲面:Up = pygame.image.load('up.png').convert()我希望它能够出现在您放置的x和y坐标上在这里:ups.append(Up(500, 700, 70, 90))

Traceback (most recent call last):
  File "D:\Coding\Python\Escape\main.py", line 291, in <module>
    redrawGameWindow()
  File "D:\Coding\Python\Escape\main.py", line 124, in redrawGameWindow
    up.draw(win)
  File "D:\Coding\Python\Escape\main.py", line 77, in draw
    win.blit(Up, (self.x, self.y))
TypeError: argument 1 must be pygame.Surface, not type

这是我的代码:

import pygame
import time
pygame.init()

win = pygame.display.set_mode((1200, 900))
pygame.display.set_caption("Escape")

walkRight = [
    pygame.image.load('right.png'),
    pygame.image.load('walkingright.png')
]
walkLeft = [
    pygame.image.load('left.png'),
    pygame.image.load('walkingleft.png')
]

idle = pygame.image.load('idle.png')
bg = pygame.image.load('background.png')
Up = pygame.image.load('up.png').convert()
Speed = pygame.image.load('speed.png').convert()

clock = pygame.time.Clock()
mode = 0
# set mode to 0 for debugging, set mode to 1 for playing

class player(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.isJump = False
        self.jumpCount = 10
        self.left = False
        self.right = False
        self.walkCount = 0
        self.standing = True
        self.hp = 100
        self.stage = 0
        self.gravity = True
        self.isTouchingPlatform = False
        self.jump = 0.25
        self.upAvaliable = 0
        self.speedAvaliable = 0
        self.hitbox = (self.x + 8, self.y, self.width - 20, self.height)

    def draw(self, win):
        if self.walkCount + 1 >= 10:
            self.walkCount = 0

        if not (self.standing):
            if self.left:
                win.blit(walkLeft[self.walkCount // 5], (self.x, self.y))
                self.walkCount += 1
            elif self.right:
                win.blit(walkRight[self.walkCount // 5], (self.x, self.y))
                self.walkCount += 1
        else:
            if self.right:
                win.blit(walkRight[0], (self.x, self.y))
            else:
                win.blit(walkLeft[0], (self.x, self.y))
        self.hitbox = (self.x + 8, self.y, self.width - 20, self.height)
        if mode == 0:
            pygame.draw.rect(win, (255, 0, 0), self.hitbox, 1)

class Up(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.rect = (self.x, self.y, width, height)

    def draw(self, win):
        win.blit(Up, (self.x, self.y))

class Speed(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.rect = (self.x, self.y, width, height)

    def Speed(self, win):
        win.blit(Speed, (self.x, self.y))

class Platform(object):
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = (self.x, self.y, self.width, self.height)

    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)

class Obstacle(object):
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = (self.x, self.y, self.width, self.height)

    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)

def redrawGameWindow():
    win.blit(bg, (0, 0))
    if (round(end - now) != 0):
        text = font.render(str(round(end - now)), 1, (0, 0, 0))
        win.blit(text, (10, 10))
    for platform in platforms:
        platform.draw(win)
    for obstacle in obstacles:
        obstacle.draw(win)
    for up in ups:
        up.draw(win)
    for speed in speeds:
        speed.draw(win)
    david.draw(win)
    pygame.display.update()

run = True
isPlatform = False
david = player(50, 734, 72, 116)
platforms = []
obstacles = []
ups = []
speeds = []
neg = -50
font = pygame.font.SysFont('comicsansms', 25, True)
now = time.time()

if mode == 0:
    end = now + -1
else:
    end = now + 30

canChange = True
index = 0

while run:
    now = time.time()
    david.speedAvaliable -= 1
    david.upAvaliable -= 1

    if david.stage == 0 and not (isPlatform):
        platforms = []
        obstacles = []
        ups = []
        speeds = []
        index = 0
        isPlatform = True
    elif david.stage == 1 and not (isPlatform):
        platforms = []
        obstacles = []
        ups = []
        speeds = []
        ups.append(Up(500, 700, 70, 90))
        index = 0
        isPlatform = True

    clock.tick(30)

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

    keys = pygame.key.get_pressed()

    for platform in platforms:
        if david.hitbox[1] + david.hitbox[3] >= platform.y and david.hitbox[1] + david.hitbox[3] < platform.y + platform.height:
            if david.hitbox[0] + david.hitbox[2] >= platform.x and david.hitbox[0] < platform.x + platform.width:
                if canChange:
                    index = platforms.index(platform)
                    canChange = False
                david.isTouchingPlatform = True
                neg = 0
                if david.hitbox[1] != platform.y:
                    david.y = platform.y - david.height
            elif not(david.hitbox[0] + david.hitbox[2] >= platforms[index].x and david.hitbox[0] < platforms[index].x + platforms[index].width):
                david.isTouchingPlatform = False
                canChange = True
                neg = -50
        elif not(david.hitbox[1] + david.hitbox[3] >= platforms[index].y and david.hitbox[1] + david.hitbox[3] < platforms[index].y + platforms[index].height):
            david.isTouchingPlatform = False
            canChange = True
            neg = -50

    for obstacle in obstacles:
        if david.hitbox[1] <= obstacle.y + obstacle.height and david.hitbox[1] + david.hitbox[3] > obstacle.y:
            if david.hitbox[0] + david.hitbox[2] >= obstacle.x and david.hitbox[0] < obstacle.x + obstacle.width:
                if david.left:
                    david.x += 5
                if david.right:
                    david.x -= 5

    for speed in speeds:
        if david.hitbox[1] <= speed.y + speed.height and david.hitbox[1] + david.hitbox[3] > speed.y:
            if david.hitbox[0] + david.hitbox[2] >= speed.x and david.hitbox[0] < speed.x + speed.width:
                david.speedAvaliable = 30

    for up in ups:
        print(up)
        if david.hitbox[1] <= up.y + up.height and david.hitbox[1] + david.hitbox[3] > up.y:
            if david.hitbox[0] + david.hitbox[2] >= up.x and david.hitbox[0] < up.x + up.width:
                david.upAvaliable = 30

    if keys[pygame.K_LEFT] and david.x > david.vel:
        david.x -= david.vel
        david.left = True
        david.right = False
        david.standing = False
    elif keys[pygame.K_RIGHT] and david.x < 1195 - david.width:
        david.x += david.vel
        david.left = False
        david.right = True
        david.standing = False
    else:
        david.standing = True
        walkCount = 0

    if not (david.isJump):
        if keys[pygame.K_UP] and david.y >= 734:
            david.jumpCount = 10
            david.isJump = True
            david.walkCount = 0
        else:
            for platform in platforms:
                if keys[pygame.K_UP] and david.y + david.height >= platform.y and david.isTouchingPlatform:
                    david.jumpCount = 10
                    david.isJump = True
                    david.walkCount = 0
    else:
        if david.jumpCount >= 0:
            david.gravity = False
            david.y -= (david.jumpCount ** 2) * david.jump
            david.jumpCount -= 1
        else:
            david.gravity = True
            david.isJump = False

    if david.gravity and david.y <= 734 and not (david.isTouchingPlatform):
        david.y -= (david.jumpCount ** 2) * -0.25

    if david.y > 734:
        david.y = 734

    if david.x >= 1125:
        david.stage += 1
        isPlatform = False
        david.x = 50

    if david.x <= 5 and david.stage > 0:
        david.stage -= 1
        isPlatform = False
        david.x = 1125

    if not (david.isJump):
        if david.jumpCount >= neg:
            david.jumpCount -= 1
        else:
            david.jumpCount = 0

    if david.speedAvaliable > 0:
        david.vel = 10
    else:
        if mode == 0:
            david.vel = 10
        else:
            david.vel = 5

    if david.upAvaliable > 0:
        david.jump = 0.5
    else:
        if mode == 0:
            david.jump = 0.5
        else:
            david.vel = 0.25

    if (round(end - now) == 0):
        run = False
    else:
        redrawGameWindow()

pygame.quit()
exit()
拉比德76

问题是,因为您使用过Up两次该名称首先,您已将其用于变量:

Up = pygame.image.load('up.png').convert()

最近您已经将它用于一堂课:

class Up(object):
   def __init__(self, x, y, width, height):
       # [...]

您必须为类和变量使用不同的名称!Up可以以太可以是变量(在全局名称空间中)或类,但不能同时是两者。

请参阅Python代码样式指南函数名称应为小写(函数和变量名称),类名称通常应使用CapWords约定(类名称)。这些只是指南,但我建议您遵循它们。

将变量的名称从更改Upup,以解决问题:

up = pygame.image.load('up.png').convert()

同样适用于 Speed

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

即使使用window.load,JS也无法正常工作

来自分类Dev

即使使用url('../../ images / image.png'),背景图片路径也无法正常工作

来自分类Dev

即使我在page_load中有!postback,OnRowUpdating也无法正常工作

来自分类Dev

jQuery代码在jsfiddle中正常工作,但即使在$(window).load(function())中也无法在浏览器中工作

来自分类Dev

我无法在Pygame中绘制Sprite的图像

来自分类Dev

我似乎无法使用pygame打开图像

来自分类Dev

pygame图像无法加载?

来自分类Dev

即使源代码中包含Javascript也无法正常工作

来自分类Dev

即使安装了熊猫也无法正常工作

来自分类Dev

Cloudflare SSL即使之前也无法正常工作

来自分类Dev

即使链接了jQuery文件,Bootstrap也无法正常工作

来自分类Dev

即使正常工作,也无法读取Java方法创建

来自分类Dev

Bash脚本cd即使存在也无法正常工作

来自分类Dev

为什么即使代码正确也无法加载我的图像?

来自分类Dev

即使使用缓存也无法正确加载图像

来自分类Dev

即使使用--insecure也无法加载Django图像

来自分类Dev

无法在Pygame中加载图像

来自分类Dev

即使是简单的热图,我也无法使heatmap.js正常工作

来自分类Dev

即使我打开了端口,出站SSH也无法正常工作

来自分类Dev

C#即使使用close(),正在使用的文件,追加也无法正常工作

来自分类Dev

即使采取了正常步骤,无密码ssh也无法正常工作

来自分类Dev

即使在Ubuntu 14.10中安装了Gedit,也无法正常工作

来自分类Dev

即使在Ubuntu 14.10中安装了Gedit,也无法正常工作

来自分类Dev

即使对象在列表中,ObservableCollection.Remove也无法正常工作

来自分类Dev

即使使用<meta>标记,媒体查询也无法正常工作

来自分类Dev

我在pygame中的游戏无法正常运行

来自分类Dev

我在代码中的赋值错误之前已引用了此函数,即使实现了“全局”,也无法使其正常工作

来自分类Dev

Pygame 无法将图像 Blit 到矩形列表

来自分类Dev

为什么我的加载无法正常工作

Related 相关文章

  1. 1

    即使使用window.load,JS也无法正常工作

  2. 2

    即使使用url('../../ images / image.png'),背景图片路径也无法正常工作

  3. 3

    即使我在page_load中有!postback,OnRowUpdating也无法正常工作

  4. 4

    jQuery代码在jsfiddle中正常工作,但即使在$(window).load(function())中也无法在浏览器中工作

  5. 5

    我无法在Pygame中绘制Sprite的图像

  6. 6

    我似乎无法使用pygame打开图像

  7. 7

    pygame图像无法加载?

  8. 8

    即使源代码中包含Javascript也无法正常工作

  9. 9

    即使安装了熊猫也无法正常工作

  10. 10

    Cloudflare SSL即使之前也无法正常工作

  11. 11

    即使链接了jQuery文件,Bootstrap也无法正常工作

  12. 12

    即使正常工作,也无法读取Java方法创建

  13. 13

    Bash脚本cd即使存在也无法正常工作

  14. 14

    为什么即使代码正确也无法加载我的图像?

  15. 15

    即使使用缓存也无法正确加载图像

  16. 16

    即使使用--insecure也无法加载Django图像

  17. 17

    无法在Pygame中加载图像

  18. 18

    即使是简单的热图,我也无法使heatmap.js正常工作

  19. 19

    即使我打开了端口,出站SSH也无法正常工作

  20. 20

    C#即使使用close(),正在使用的文件,追加也无法正常工作

  21. 21

    即使采取了正常步骤,无密码ssh也无法正常工作

  22. 22

    即使在Ubuntu 14.10中安装了Gedit,也无法正常工作

  23. 23

    即使在Ubuntu 14.10中安装了Gedit,也无法正常工作

  24. 24

    即使对象在列表中,ObservableCollection.Remove也无法正常工作

  25. 25

    即使使用<meta>标记,媒体查询也无法正常工作

  26. 26

    我在pygame中的游戏无法正常运行

  27. 27

    我在代码中的赋值错误之前已引用了此函数,即使实现了“全局”,也无法使其正常工作

  28. 28

    Pygame 无法将图像 Blit 到矩形列表

  29. 29

    为什么我的加载无法正常工作

热门标签

归档