python-3.x - 游戏尝试生成超过 1 个敌人时,对象不是可调用对象
问题描述
我设法创建了一种方法来访问列表中的每个敌人并检测它是否被击中......我认为......除了问题。我的问题是,每次我想创建多个敌人时,我都会收到错误“敌人不是可调用对象”
老实说,我不知道这里出了什么问题。我看过其他帖子,一篇类似的帖子分享了一些关于“确保我不让我的对象=其他任何东西”的内容。但是,除了将其添加到列表的位置之外,我的对象不会在其他任何地方调用。
循环外
Enemies = []
print("Enemies at start: ",len(Enemies))
它返回“0”
在 while 循环中创建敌人
if len(Enemies) <= 5:
Enemies.append(Enemy(random.randint(0,500),-50,70,70))
#Spawns an enemy while the list is still less than 5 not really relevant and should be removed after code below is fixed.
print("Enemies at creation point: ",len(Enemies))
for Enemy in Enemies:
#Enemies.append(Enemy(random.randint(0,500),-50,70,70))
print("Created")
if Enemy.health <= 0:
Enemies.pop(Enemies.index(Enemy))
print("Destroyed")
else:
print("Skipping")
错误:“敌人”对象不可调用
我希望输出只是在屏幕上随机位置生成这些敌人。而5个不同时存在。所以一开始,它不会再产生敌人。但是,当一个被摧毁时,会产生一个新的。
解决方案
您的错误是您对类定义Enemy
和变量使用相同的名称for Enemy in Enemies
PEP 8中有一个很好的规则——Python 代码样式指南对变量使用小写名称,对类名使用驼峰式名称(第一个大写字母)
所以你应该有
enemies = []
print("Enemies at start:", len(enemies))
if len(enemies) <= 5:
enemies.append(Enemy(random.randint(0,500),-50,70,70))
#Spawns an enemy while the list is still less than 5 not really relevant and should be removed after code below is fixed.
print("Enemies at creation point: ", len(enemies))
for enemy in enemies:
#enemies.append(Enemy(random.randint(0,500),-50,70,70))
print("Created")
if enemy.health <= 0:
enemies.pop(enemies.index(enemy))
print("Destroyed")
else:
print("Skipping")
如您所见,我Enemy
仅在Enemy(random.randint(0,500),-50,70,70)
. 在我使用的其他地方enemy
顺便说一句:即使是 SO 中的编辑器也知道这个规则,它使用浅蓝色来显示类Enemy
并使代码更具可读性。
推荐阅读
- sql - SQL中有没有办法通过自反属性组合对?
- oracle - 索引的重叠
- angular - AOT(Angular)中预编译是什么意思
- python - 如何连续运行可以从节点接收命令的 Python 脚本
- kubernetes - 什么是入口控制器,如何创建它?
- apache - 在 Apache 服务器中使用 vue js SPA 刷新页面时如何修复“未找到”?
- css - Nexus 7 和像素 2 的媒体查询是什么?
- javafx - 将 Windows 更新到 1903(2019 年 5 月)后 JavaFX 无法创建阶段
- python - 为什么在单击“开始”按钮后主循环(此代码中的“运行”)没有响应?
- php - 强制在 PHP 中将数组添加到 JSON 的单个元素中