- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我正在尝试编写一些在屏幕上显示食物的代码,并且我正在使用类结构来创建这些对象。然后我将它们放入一个 Sprite 组中,然后在屏幕上显示该 Sprite 组但是我在运行代码时收到此错误:
Traceback (most recent call last): File "N:/Y12/Computer science/Consumo/Consumo V8.5.py", line 172, in menuScreen() File "N:/Y12/Computer science/Consumo/Consumo V8.5.py", line 113, in menuScreen button("Play Game",850,340,120,50,blue,gameLoop)#Puts theree button on the screen File "N:/Y12/Computer science/Consumo/Consumo V8.5.py", line 99, in button action() File "N:/Y12/Computer science/Consumo/Consumo V8.5.py", line 160, in gameLoop allSprites.add(food) File "C:\Python33\lib\site-packages\pygame\sprite.py", line 378, in add sprite.add_internal(self) AttributeError: 'FoodItems' object has no attribute 'add_internal'
这是我的代码,我想知道是否有人可以帮助我修复此错误,因为我什至不知道该错误意味着什么。:
#Imports the libaries I will use
import pygame,time,random
pygame.init()
#Sets up the variables for the screen size
displayWidth = 1000
displayHeight = 600
weight = 0
lives = 0
clock= pygame.time.Clock()
#sets up the variables for the colours
black = (0 ,0 ,0)
red = (200 ,0 ,0)
grey = (128 ,128 ,128)
blue = (0, 0, 200)
green= (0,255,0)
#Sets up the images and re-sizes them and also adds the music file
character =pygame.image.load("character.png")
character = pygame.transform.scale(character,(60,60))
sumo = pygame.image.load("sumo .jpg")
sumo = pygame.transform.scale(sumo,(60,60))
#both background images are set to displayHeight,displayWidth so they fit the screen
dojoBackDrop = pygame.image.load("dojo.png")
dojoBackDrop = pygame.transform.scale(dojoBackDrop,(displayWidth,displayHeight))
menuBackDrop = pygame.image.load("menu screen .png")
menuBackDrop = pygame.transform.scale(menuBackDrop,(displayWidth,displayHeight))
foodSizeX = 45#I have set up a variable to re-size all the images to as
foodSizeY = 45
0#I want them to be the same size
#loads all the food images for my food
apple = pygame.image.load("Apple .png")
apple = pygame.transform.scale(apple,(foodSizeX,foodSizeY))
fish = pygame.image.load("Fish.png")
fish = pygame.transform.scale(fish,(foodSizeX,foodSizeY))
rice = pygame.image.load("Rice_fresh.png")
rice = pygame.transform.scale(rice,(foodSizeX,foodSizeY))
rottenApple = pygame.image.load("rottenapple.png")
rottenApple = pygame.transform.scale(rottenApple,(foodSizeX,foodSizeY))
rottenFish = pygame.image.load("rottenfish.png")
rottenFish = pygame.transform.scale(rottenFish,(foodSizeX,foodSizeY))
rottenRice = pygame.image.load("rottenrice.png")
rottenRice = pygame.transform.scale(rottenRice,(foodSizeX,foodSizeY))
#loads the music which will be playing during the game
#file has been converted from mp3 to ogg as python can't read mp3
#backGroundMusic = pygame.mixer.Sound("Bully Scholarship Edition Soundtrack - Arcade Game - ConSumo (Game) (1).ogg")
#sets up the pygame window with height and width variables created above
gameDisplay = pygame.display.set_mode((displayWidth,displayHeight))
images =[apple,rice,fish]
class FoodItems:
def __init__(self,weightIncrease,xChange,yChange):
pygame.sprite.Sprite.__init__(self)
self.weightIncrease = weightIncrease
#sets attributes for the class by using the self
# this is so they can be set to What I chose
self.image = random.choice(images)
self.rect= self.image.get_rect()
self.rectX = random.randrange(displayWidth - self.rect.width) #creates a hit box for my object
self.rectY = random.randrange(displayHeight-self.rect.height)
self.xChange = xChange # sets a random speed for x and y
self.yChange = yChange
def update():#conitnusly updates the sprite on the screen
self.rectX += self.xChange
self.rectY += sel.yChange #keeps moving the objects
if self.rectx > displayHeight +10:
self.rect.x = random.randrange(displayWidth-self.rect.width)
self.rect.y = random.randrange(displayHeight-self.rect.height)
#this will make the object be able to move
allSprites=pygame.sprite.Group()#creates a group of sprites on the screen
def textObjects(text,font):#passes parameters by value
textSurface = font.render(text,True,black)#renders the font and sets the color as black
return textSurface,textSurface.get_rect()#gets the dimensions of the text
def button(msg,x,y,w,h,c,action=None):#passes the parameters by value
mouse = pygame.mouse.get_pos()#this gets the postion of the mouse
click = pygame.mouse.get_pressed()#checks to see where the mouse has been clicked
pygame.draw.rect(gameDisplay, c,(x,y,w,h))#draws a rectangle with on the game display with the parameters given
if x+w > mouse[0] >x and y+h > mouse[1] > y:#checks to see if the mouse has been clicked anywhere in the button
if click[0] == 1 and action != None:#if the mouse has been clicked performed an action
action()
smallText = pygame.font.SysFont("comicsansms",20)
textSurf , textRect = textObjects(msg ,smallText)
#sets the message of the button
textRect.center = ((x+(w/2),(y+(h/2))))#centers the text on screen
gameDisplay.blit(textSurf, textRect)#puts the button on screen with the text
def menuScreen():
screenOn = True
while screenOn ==True:
for event in pygame.event.get():
if event.type == pygame.QUIT:#allows user to quit the game
quit()
gameDisplay.blit(menuBackDrop,(0,0))#sets the image to the size of the screen
button("Play Game",850,340,120,50,blue,gameLoop)#Puts theree button on the screen
button("Leaderboard",850,440,120,50,blue)
button("Quit game",850,540,120,50,blue)
pygame.display.update()#updates the screen so things can appear on it
def gameLoop():
#backGroundMusic.play()
playerX =500 #used to set the characters position as the center of the screen
playerY = 300
playerXChange = 0#value at which x and ywill change when a Key is pressed
playerYChange = 0
playing = True #boolean so that the while loop knows when to run till
while playing ==True:
for event in pygame.event.get():
if event.type == pygame.QUIT:#allows user to quit the game
quit()
#if any key is pressed perfomr an action
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:#if A is pressed move ten to the left
playerXChange = -5
elif event.key == pygame.K_d:#if D is pressed move ten to the right
playerXChange = 5
elif event.key == pygame.K_w:#if W is pressed move ten up
playerYChange = -5
elif event.key == pygame.K_s:#if S is pressed move ten down
playerYChange = 5
if event.type ==pygame.KEYUP:
playerXChange =0
playerYChange =0
if playerX < 0: #if players x value is less than set it to zero
playerX = 0
if playerX >940:#if players x value is greater than 940 than set it to 940
playerX = 940
if playerY < 0:#if players y value is less than set it to zero
playerY = 0
if playerY >540:#if players y value is greater than 540 set it to 540
playerY = 540
playerX = playerX+playerXChange
playerY = playerY+playerYChange#makes the character x and y change by the value set in the code above
gameDisplay.blit(dojoBackDrop,(0,0))
for i in range(8):#loops to get 8 food on the screen at once
food =FoodItems(5,5,5)#instatiates an object
allSprites.add(food)#adds object to sprite group
#instantiate a new object
allSprites.update()#updates all sprites
allSprites.draw(gameDisplay)#draws all the sprites on the screen
gameDisplay.blit(character,(playerX,playerY))
pygame.display.update()
menuScreen()
我希望图像显示在屏幕上并继续移动,但我就是无法克服这个错误。
最佳答案
如果你想和一个对象到 pygame.sprite.Group
,那么该对象的类必须派生自 pygame.sprite.Sprite
:
class FoodItems(pygame.sprite.Sprite):
def __init__(self,weightIncrease,xChange,yChange):
pygame.sprite.Sprite.__init__(self)
# [...]
此外,方法 .update()
中缺少“self”属性:
class FoodItems(pygame.sprite.Sprite):
# [...]
def update(self): #conitnusly updates the sprite on the screen
self.rectX += self.xChange
self.rectY += self.yChange #keeps moving the objects
if self.rect.x > displayHeight +10:
self.rect.x = random.randrange(displayWidth-self.rect.width)
self.rect.y = random.randrange(displayHeight-self.rect.height)
#this will make the object be able to move
关于python - 尝试在 pygame 的 for 循环中创建对象并得到 AttributeError : 'FoodItems' object has no attribute 'add_internal' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56948388/
在 C# 及其同类语言中,我们总是使用 public string SomeString { get; set;} 但是你也可以使用(我最近才发现这个,而且是在和编译器闲逛的时候发现的) public
我已经为 Controller 中的函数编写了 Swagger 注释,但在生成 swagger-ui 代码时出现错误。以下是我的注释代码 /*** End of Annotation For dele
我正在 PHP 中开发一项服务,该服务使用 exec 函数调用 jar 文件,如下所示: $text = "string with accents á, ó, ú or العربية"; exec(
我正在尝试了解有关在程序中利用/防止缓冲区溢出的方法的更多信息。我知道如果大小是恒定的,下面的代码很容易受到攻击,但是如果大小每次都是随机的怎么办?是否还有办法从堆栈中获取它并以某种方式动态改变溢出字
对于一项学校作业,我应该制作一个可以以小时、分钟和秒为单位存储时间的时间类。一切正常,但仅声明 get 时属性总是返回 0;并设置; private int seconds, minutes, hou
我正在遍历一些测验对象并将结果存储到json变量中。出现"ReferenceError is not defined"错误,不确定原因。 JS代码 // This function will send
使用 Nifi 的 PutDatabaseRecord 处理器在 MySQL 中插入阿拉伯字符(非拉丁语)时,字符被“??????”替换 插入后,阿拉伯字符串被替换为??????。我已经使用 utf8
谁能告诉我为什么 gets(abc) 使用 char[] 而不是使用 int? int abc; char name[] = "lolrofl"; printf("Hello %s.\n",na
为什么在使用 as.POSIXct 转换下面的时间戳时得到所有 NA? > head(tmp$timestamp_utc) [1] Fri Jul 03 00:15:00 EDT 2015 Fri J
def get_submultiples(n): # Get all submultiples of n if n == 1: return [1] i = 2
有没有办法访问基本模型的实际 child ,意思是:继续使用 django Docs 中的示例,让我们假设我正在建模不同的外卖餐厅,它们只是有共同点 姓名 都有deliver方法 至此: class
我正在寻找一个范围的总和,但我总是得到“未定义”。我相信有些东西出现在错误的位置,但我不确定它是什么。 第 1 部分:“编写一个范围函数,它接受两个参数(start 和 end),并返回一个包含从 s
我已将 spring 版本从 4.2.3 更新到 5.0.2,并将安全性从 5.0.1 更新到 5.0.10 并使用 spring -flex版本1.6.0.RC1。 像这样使用 BlazeDS 依赖
我可以输入但在输出中,我得到的结果为零。我使用两门类(class),一门是主要的,是日志,另一门是成绩计算。在成绩计算器中,我编写了方法和构造函数,在日志中,类通过构造函数调用这些方法。 import
我在使用 go 时遇到了构建问题。我想知道这是编译器中的错误还是代码的问题。 // removed the error handling for sake of clarity file, _ :=
我的角色在与盒子互动时出现问题。我有一个 GameObject Player 附加了一个脚本来与游戏中的盒子交互,脚本是: using UnityEngine; using System.Collec
有谁知道为什么我不能在下面生成百分比 codeIshere (第 97-117 行)? var format=d3.format(".1%"); var percent = format(functi
我正在尝试编写图像识别代码,以针对不同动物图像训练系统,这就是代码。我使用 anaconda 作为解释器,使用pycharm作为环境。 import tensorflow as tf import o
我正在尝试在 Java 中初始化 Matcher,但无论字符串是否已初始化且不为 null,都会继续获取 NPE。 这是代码: pattern.compile("\\s"); System.out.p
所以我有这段代码: ; (function (g) { var d = document, i, am = d.createElement('script'), h = d.head || d.g
我是一名优秀的程序员,十分优秀!