How to fix a TypeError: 'float' object is not iterable
How to fix a TypeError: 'float' object is not iterable
我试图解决我的代码中“blit 的无效位置”的问题,但是一旦我解决了另一个错误就出现了。 类型错误:'float' 对象不可迭代。我尝试将 int() 放在周围(当我指周围时,我的意思是我尝试的代码是:int(self.x) += int(self.changeX)
)
这是代码,我已经按顺序排列了,意思是这是所有相关内容从代码到其他所有内容的顺序。
(简单示例。实际上还有很多。):
class Enemy():
def __init__(self, enemyImg, enemyX, enemyY, enemyX_change, enemyY_change):
self.image = enemyImg
self.x = enemyX
self.y = enemyY
self.changeX = enemyX_change
self.changeY = enemyY_change
def move(self):
self.x += self.changeX
self.y += self.changeY
def draw(self):
screen.blit(self.image, (self.x, self.y))
#Enemy
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
enemies = []
number_of_enemies = 5
#Making a list for all 5 enemies image, x value, y value, x value change, y value change. All variables are a seperate list
for i in range(number_of_enemies):
enemyImg.append(pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png'))
enemyX.append(random.randint(0, 736))
enemyY.append(random.randint(50, 150))
enemyX_change.append(0.45)
enemyY_change.append(40)
enemy = Enemy(enemyImg, enemyX, enemyY, 0.45, 0)
enemies.append(enemy)
#def states an event. The event will not occur unless you call the event in the main game loop.
back_ground = Background()
#Main Game Loop
clock = pygame.time.Clock()
SCEEN_UPDATE = pygame.USEREVENT
pygame.time.set_timer(SCEEN_UPDATE,150)`
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
Player.player_jump()
for enemy in enemies:
enemy.move()
if event.key == pygame.K_SPACE:
if Health_State == "ready":
Health_Fire_Sound = mixer.Sound('laser.wav')
Health_Fire_Sound.play()
Health.fire_Health(HealthX , HealthY)
HealthY = playery + 10
for enemy in enemies:
enemy.draw()
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
playery += playery_change
screen.fill(0,0,255)
back_ground.update()
back_ground.render()
#Health Kit Movement
if HealthX >= 800:
HealthX = 20
Health_State = "ready"
if Health_State == "fire":
Health.fire_Health(HealthX , HealthY)
HealthX -= HealthX_Change
#Enemy Movement and collision check
for i in range(number_of_enemies):
if enemyX[i] > 20:
for j in range(number_of_enemies):
enemyY = 2000
Other.game_over()
break
Enemy.move()
collision = Other.isCollision(enemyX[i],enemyY[i],HealthX,HealthY)
if collision:
BulletY = 480
Bullet_State = "ready"
enemyX[i] = random.randint(800,900)
enemyY[i] = 405
HealthX = 20
Health_State = "ready"
Score_Value += 1
enemyImg
、enemyX
和 enemyY 是列表。但是,Enemy
构造函数的参数必须是单个图像和敌人的 x 和 y 坐标。
您不需要列表 enemyImg
、enemyX
、enemyY
、enemyX_change
和 enemyY_change
。删除列表:
enemies = []
number_of_enemies = 5
enemyImg = pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png')
for i in range(number_of_enemies):
x = random.randint(0, 736)
y = random.randint(50, 150)
enemy = Enemy(enemyImg, x, y, 0.45, 0)
enemies.append(enemy)
请注意,您可以使用 enemies[i].x
和 enemies[i].y
而不是 enemyX[i]
和 enemyY[i]
来获取敌人的坐标
此外,你必须在应用程序循环中而不是在通风循环中移动和绘制敌人。
您的代码应如下所示:
class Enemy():
def __init__(self, enemyImg, enemyX, enemyY, enemyX_change, enemyY_change):
self.image = enemyImg
self.x = enemyX
self.y = enemyY
self.changeX = enemyX_change
self.changeY = enemyY_change
def move(self):
self.x += self.changeX
self.y += self.changeY
def draw(self):
screen.blit(self.image, (self.x, self.y))
enemies = []
number_of_enemies = 5
enemyImg = pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png')
for i in range(number_of_enemies):
x = random.randint(0, 736)
y = random.randint(50, 150)
enemy = Enemy(enemyImg, x, y, 0.45, 0)
enemies.append(enemy)
#def states an event. The event will not occur unless you call the event in the main game loop.
back_ground = Background()
#Main Game Loop
clock = pygame.time.Clock()
SCEEN_UPDATE = pygame.USEREVENT
pygame.time.set_timer(SCEEN_UPDATE,150)`
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
Player.player_jump()
if event.key == pygame.K_SPACE:
if Health_State == "ready":
Health_Fire_Sound = mixer.Sound('laser.wav')
Health_Fire_Sound.play()
Health.fire_Health(HealthX , HealthY)
HealthY = playery + 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
playery += playery_change
for enemy in enemies:
if enemy.x > 20:
for j in range(number_of_enemies):
enemyY = 2000
Other.game_over()
break
enemy.move()
collision = Other.isCollision(enemy.x,enemy.y,HealthX,HealthY)
if collision:
BulletY = 480
Bullet_State = "ready"
enemy.x = random.randint(800,900)
enemy.y = 405
HealthX = 20
Health_State = "ready"
Score_Value += 1
#Health Kit Movement
if HealthX >= 800:
HealthX = 20
Health_State = "ready"
if Health_State == "fire":
Health.fire_Health(HealthX , HealthY)
HealthX -= HealthX_Change
screen.fill(0,0,255)
back_ground.update()
back_ground.render()
for enemy in enemies:
enemy.draw()
我试图解决我的代码中“blit 的无效位置”的问题,但是一旦我解决了另一个错误就出现了。 类型错误:'float' 对象不可迭代。我尝试将 int() 放在周围(当我指周围时,我的意思是我尝试的代码是:int(self.x) += int(self.changeX)
)
这是代码,我已经按顺序排列了,意思是这是所有相关内容从代码到其他所有内容的顺序。
(简单示例。实际上还有很多。):
class Enemy():
def __init__(self, enemyImg, enemyX, enemyY, enemyX_change, enemyY_change):
self.image = enemyImg
self.x = enemyX
self.y = enemyY
self.changeX = enemyX_change
self.changeY = enemyY_change
def move(self):
self.x += self.changeX
self.y += self.changeY
def draw(self):
screen.blit(self.image, (self.x, self.y))
#Enemy
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
enemies = []
number_of_enemies = 5
#Making a list for all 5 enemies image, x value, y value, x value change, y value change. All variables are a seperate list
for i in range(number_of_enemies):
enemyImg.append(pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png'))
enemyX.append(random.randint(0, 736))
enemyY.append(random.randint(50, 150))
enemyX_change.append(0.45)
enemyY_change.append(40)
enemy = Enemy(enemyImg, enemyX, enemyY, 0.45, 0)
enemies.append(enemy)
#def states an event. The event will not occur unless you call the event in the main game loop.
back_ground = Background()
#Main Game Loop
clock = pygame.time.Clock()
SCEEN_UPDATE = pygame.USEREVENT
pygame.time.set_timer(SCEEN_UPDATE,150)`
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
Player.player_jump()
for enemy in enemies:
enemy.move()
if event.key == pygame.K_SPACE:
if Health_State == "ready":
Health_Fire_Sound = mixer.Sound('laser.wav')
Health_Fire_Sound.play()
Health.fire_Health(HealthX , HealthY)
HealthY = playery + 10
for enemy in enemies:
enemy.draw()
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
playery += playery_change
screen.fill(0,0,255)
back_ground.update()
back_ground.render()
#Health Kit Movement
if HealthX >= 800:
HealthX = 20
Health_State = "ready"
if Health_State == "fire":
Health.fire_Health(HealthX , HealthY)
HealthX -= HealthX_Change
#Enemy Movement and collision check
for i in range(number_of_enemies):
if enemyX[i] > 20:
for j in range(number_of_enemies):
enemyY = 2000
Other.game_over()
break
Enemy.move()
collision = Other.isCollision(enemyX[i],enemyY[i],HealthX,HealthY)
if collision:
BulletY = 480
Bullet_State = "ready"
enemyX[i] = random.randint(800,900)
enemyY[i] = 405
HealthX = 20
Health_State = "ready"
Score_Value += 1
enemyImg
、enemyX
和 enemyY 是列表。但是,Enemy
构造函数的参数必须是单个图像和敌人的 x 和 y 坐标。
您不需要列表 enemyImg
、enemyX
、enemyY
、enemyX_change
和 enemyY_change
。删除列表:
enemies = []
number_of_enemies = 5
enemyImg = pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png')
for i in range(number_of_enemies):
x = random.randint(0, 736)
y = random.randint(50, 150)
enemy = Enemy(enemyImg, x, y, 0.45, 0)
enemies.append(enemy)
请注意,您可以使用 enemies[i].x
和 enemies[i].y
而不是 enemyX[i]
和 enemyY[i]
此外,你必须在应用程序循环中而不是在通风循环中移动和绘制敌人。
您的代码应如下所示:
class Enemy():
def __init__(self, enemyImg, enemyX, enemyY, enemyX_change, enemyY_change):
self.image = enemyImg
self.x = enemyX
self.y = enemyY
self.changeX = enemyX_change
self.changeY = enemyY_change
def move(self):
self.x += self.changeX
self.y += self.changeY
def draw(self):
screen.blit(self.image, (self.x, self.y))
enemies = []
number_of_enemies = 5
enemyImg = pygame.image.load('C:/Users/user/Desktop/Python/CodingBee/Pygame Application Prototype/zombie.png')
for i in range(number_of_enemies):
x = random.randint(0, 736)
y = random.randint(50, 150)
enemy = Enemy(enemyImg, x, y, 0.45, 0)
enemies.append(enemy)
#def states an event. The event will not occur unless you call the event in the main game loop.
back_ground = Background()
#Main Game Loop
clock = pygame.time.Clock()
SCEEN_UPDATE = pygame.USEREVENT
pygame.time.set_timer(SCEEN_UPDATE,150)`
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
Player.player_jump()
if event.key == pygame.K_SPACE:
if Health_State == "ready":
Health_Fire_Sound = mixer.Sound('laser.wav')
Health_Fire_Sound.play()
Health.fire_Health(HealthX , HealthY)
HealthY = playery + 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
playery += playery_change
for enemy in enemies:
if enemy.x > 20:
for j in range(number_of_enemies):
enemyY = 2000
Other.game_over()
break
enemy.move()
collision = Other.isCollision(enemy.x,enemy.y,HealthX,HealthY)
if collision:
BulletY = 480
Bullet_State = "ready"
enemy.x = random.randint(800,900)
enemy.y = 405
HealthX = 20
Health_State = "ready"
Score_Value += 1
#Health Kit Movement
if HealthX >= 800:
HealthX = 20
Health_State = "ready"
if Health_State == "fire":
Health.fire_Health(HealthX , HealthY)
HealthX -= HealthX_Change
screen.fill(0,0,255)
back_ground.update()
back_ground.render()
for enemy in enemies:
enemy.draw()