pygame报错——TypeError:'bool' object is not callable
这是为什么?如果搞不明白的的话:
代码:
import modules
from pygame.locals import *
def main():
modules.pygame.mixer.init()
modules.pygame.init()
x1 = ((modules.win32api.GetSystemMetrics(modules.win32con.SM_CXSCREEN)) // 2) - 1024 // 2
y1 = ((modules.win32api.GetSystemMetrics(modules.win32con.SM_CYSCREEN)) // 2) - 768 // 2
modules.os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x1,y1)
del x1
del y1
#图片存放路径
image = str('..\\image\\')
#加载各类图片
bg_images = str(image) + 'bg.png'
ban_images = image + 'ban.png'
blue_block_images = image + 'blue_block.png'
ji_images = image + 'ji.png'
hand_image = image + 'hand.cur'
icon_image = image + 'elsfk.ico'
#按照背景图片大小设置窗口大小
bg_size = width, height = 1024, 768
screen = modules.pygame.display.set_mode(bg_size)
icon = modules.pygame.image.load(icon_image).convert_alpha()
cur = modules.pygame.image.load(hand_image).convert_alpha()
modules.pygame.display.set_icon(icon)
#设置标题栏文本
modules.pygame.display.set_caption("俄罗斯方块")
#用白色填充背景,避免出现一些奇奇怪怪的渲染问题
screen.fill((255,255,255))
background = modules.pygame.image.load(bg_images).convert_alpha()
clock = modules.pygame.time.Clock()
#用于存放消息列表
msg = []
#用于存放俄罗斯方块
blocks = []
group = modules.pygame.sprite.Group()
GAMEOVER = modules.USEREVENT
GAMEPAUSE = modules.USEREVENT
running = True
if running == False:
try:
sys.exit()
except SystemExit:
pass
except:
print("出错了!")
return 0
for i in range(1):
postion = (modules.random.randint(0, width), modules.random.randint(int(-20),int(0)))
speed =
classes = modules.classes.Block(blue_block_images,postion,speed,bg_size)
block = modules.block.Block(classes.blue_image,classes.postion,\
classes.speed,classes.bg_size)
del classes
blocks.append(block)
group.add(block)
del block
modules.pygame.display.update()
modules.pygame.display.flip()
modules.pygame.key.set_repeat(100, 100)
modules.pygame.mouse.set_pos(500,450)
bools = True
while running:
for event in modules.pygame.event.get():
if event.type == modules.pygame.QUIT:
running = False
modules.pygame.quit()
try:
modules.sys.exit()
except SystemExit:
pass
except:
print("出错了!")
return 0
elif event.type == GAMEOVER:
running = False
continue
elif event.type == modules.KEYDOWN:
if event.key == modules.K_d:
for each in group:
each.speed = 1
elif event.key == modules.K_a:
for each in group:
each.speed = -1
elif event.key == modules.K_s:
blocks.down = True
blocks.speed = 2
elif event.key == modules.K_RCTRL:
bools = not(bools)
elif event.type == modules.KEYUP:
if event.key == modules.K_s:
blocks.down = False
blocks.speed = 0
elif event.key == modules.K_d:
for each in group:
each.speed = 0
elif event.key == modules.K_a:
for each in group:
each.speed = 0
elif event.type == modules.MOUSEBUTTONDOWN:
bools = True
x , y = modules.pygame.mouse.get_pos()
if bools:
if y >= 700:
modules.pygame.mouse.set_pos(x,768)
y = 700
elif y <= 0:
modules.pygame.mouse.set_pos(x,0)
y = 0
if x >= 1000:
modules.pygame.mouse.set_pos(1024,y)
x = 1000
elif x <= 0:
modules.pygame.mouse.set_pos(0,y)
x = 0
screen.blit(background, (0, 0))
#modules.pygame.display.flip()
for each in blocks:
each.move()
screen.blit(each.blue_image,each.rect)
modules.pygame.display.flip()
modules.pygame.display.update()
clock.tick(30)
else:
try:
modules.sys.exit()
except SystemExit:
pass
except:
print("出错了!")
if __name__ == "__main__":
# 这样做的好处是双击打开时如果出现异常可以报告异常,而不是一闪而过!
try:
main()
except SystemExit:
pass
except:
modules.traceback.print_exc()
modules.pygame.quit()
input()
del modules
不是模块的问题,这些地方好好的 modules 的内容是什么? zltzlt 发表于 2020-4-19 20:17
modules 的内容是什么?
是一些模块,一部分是我自己写的,要看看吗? 把异常的堆栈信息贴一下吧 把完整报错信息发一下吧 报错翻译过来就是:布尔对象不能被调用。你的代码别人没有运行环境不可能调试,所以也不可能知道你的错误是哪一句出错,但是你的报错信息里面有,所以把完成的报错信息贴出来别人才有可能帮你找出问题所在。 txxcat 发表于 2020-4-19 20:32
报错翻译过来就是:布尔对象不能被调用。你的代码别人没有运行环境不可能调试,所以也不可能知道你的错误是 ...
Traceback (most recent call last):
File "D:\C++SDK\Solution1\elsfk\elsfk.pyw", line 160, in <module>
main()
File "D:\C++SDK\Solution1\elsfk\elsfk.pyw", line 142, in main
each.move()
TypeError: 'bool' object is not callable
上面就是全部报错信息了,麻烦帮看一下,谢谢
NZND 发表于 2020-4-19 20:39
Traceback (most recent call last):
File "D:\C++SDK\Solution1\elsfk\elsfk.pyw", line 160, in
...
还真要看看modules的内容了,关键是move是如何定义的? txxcat 发表于 2020-4-19 21:20
还真要看看modules的内容了,关键是move是如何定义的?
modules牵扯到了一堆其他模块,它的代码:
import pygame #主要模块,用于进行事件侦测、显示窗口等
from pygame.locals import * #pygame模块的常量模块
import sys #关于系统,大部分时候用于退出
import block #用于生成方块
import os #用于获取屏幕分辨率并设置窗口位置
import win32api #与上一个同用
import win32con #与上一个同用
import random #随机数模块
import new_random #一个可以做两位伪随机数的模块
import classes #一些乱七八糟的类
import content #存放着一些暂时不用的变量和模块
import ji #对于计分板生成的模块
import traceback #用于保证如果出错了,不会一闪而过
ji、content、new_random这些模块暂时没用,所以就先不发代码了
一下是block模块的内容:
from modules import pygame
import random
class Block(pygame.sprite.Sprite):
def __init__(self,blue_image,postion,speed,bg_size):
pygame.sprite.Sprite.__init__(self)
self.blue_image = pygame.image.load(blue_image).convert_alpha()
self.postion = postion
self.rect = self.blue_image.get_rect()
self.rect.left,self.rect.top = postion
self.down = False
self.speed = speed
self.bg_size = bg_size
self.width , self.height = bg_size
pygame.display.flip()
pygame.display.update()
self.move = False
def move(self):
if self.down:
self.rect = self.rect.move(0,self.speed)
elif self.move:
self.rect = self.rect.move(self.speed,0)
if self.rect.right <= 0:
self.rect.left = self.width
elif self.rect.left >= self.width:
self.rect.right = 0
elif self.rect.bottom <= 0:
self.rect.top = self.height
以下是classes的内容:
class Block():
def __init__(self,blue_image,postion,speed,bg_size):
self.postion = postion
self.speed = speed
self.blue_image = blue_image
self.bg_size = bg_size txxcat 发表于 2020-4-19 21:20
还真要看看modules的内容了,关键是move是如何定义的?
move说实话,我也不知道是怎么写的,反正跟着小甲鱼老师敲敲敲,然后又改,有些地方我还是很懵............T_T txxcat 发表于 2020-4-19 21:20
还真要看看modules的内容了,关键是move是如何定义的?
我看了半天,move函数是列表自带的方法,但我也不知道怎么用。
我倒是试过把括号去掉,倒是不报错了,但是程序也不响应事件了……
我太难了!{:10_266:} self.move = False
def move(self):
这个属性名和方法名冲突了,把其中一个改下名吧 NZND 发表于 2020-4-19 21:33
我看了半天,move函数是列表自带的方法,但我也不知道怎么用。
我倒是试过把括号去掉,倒是不报错了,但 ...
self.move = False
def move(self):
果真有问题,你有属性move和方法move,同名了,有冲突,外面调用的其实是属性move,所以会报错,你改掉其中一个名字,然后再试。 zltzlt 发表于 2020-4-19 21:44
self.move = False
def move(self):
@txxcat @zltzlt 感谢!可是我应该设谁是最佳答案呢?这样,你俩看看谁先回复,最佳答案就给谁吧!不然我还真选不出最佳答案。
页:
[1]