我正在寫一個小游戲。我想從同一個類創建兩個物件并將它們組合成一個組。但是在創建第二個物件時,出現錯誤“AttributeError: 'Enemy' object has no attribute 'get_rect'”
這是與問題相關的代碼
class Enemy(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = enemy
self.rect = self.image.get_rect()
self.rect.center = (200, 200)
self.speedx = random.randint(1, 10)
self.speedy = random.randint(1, 10)
self.collis = 0
self.enemy_health = 5
self.enemy_rect = pygame.rect.Rect((self.rect.x 35, self.rect.y 20), (35, 15))
self.skin = 0
self.skin_index = 0
self.skins = [enemy, enemy_1, enemy_2]
self.left_skins = [pygame.transform.flip(self.skins[0], True, False),
pygame.transform.flip(self.skins[1], True, False),
pygame.transform.flip(self.skins[2], True, False)]
self.move_enemy = 1
def update(self, collis):
self.enemy_rect = pygame.rect.Rect((self.rect.x 35, self.rect.y 20), (35, 15))
if self.move_enemy == 1:
if self.collis < 1:
self.speedx = random.randint(1, 2)
self.speedy = random.randint(1, 2)
if player.player_x_pos > self.rect.x:
self.rect.x = self.speedx
self.skin = 1
if self.skin % 10 == 0:
self.skin_index = 1
if self.skin_index > 2:
self.skin_index = 0
self.image = self.skins[self.skin_index]
if player.player_y_pos 50 > self.rect.y:
self.rect.y = self.speedy
self.skin = 1
if self.skin % 10 == 0:
self.skin_index = 1
if self.skin_index > 2:
self.skin_index = 0
self.image = self.skins[self.skin_index]
if player.player_x_pos < self.rect.x:
self.rect.x -= self.speedx
self.skin = 1
if self.skin % 10 == 0:
self.skin_index = 1
if self.skin_index > 2:
self.skin_index = 0
self.image = self.left_skins[self.skin_index]
if player.player_y_pos 50 < self.rect.y:
self.rect.y -= self.speedy
self.skin = 1
if self.skin % 10 == 0:
self.skin_index = 1
if self.skin_index > 2:
self.skin_index = 0
if player.player_x_pos < self.rect.x:
self.image = self.left_skins[self.skin_index]
else:
self.image = self.skins[self.skin_index]
else:
self.collis = 0
# if self.enemy_health <= 0:
# del enemy
print('Health:', self.enemy_health)
if self.move_enemy == 2:
if self.rect.y <= 550:
self.rect.y = 2
else:
self.rect.y -= 2
enemy = Enemy()
enemy2 = Enemy()
enemy2.rect.center = (100, 100)
scene_1_sprites.add(enemy2)
scene_1_sprites.add(enemy)
但是該類具有必要的屬性
我試影像這樣創建第二個物件:enemy2 = 敵人
但最終只有一個物件
uj5u.com熱心網友回復:
是的,當然 anEnemy沒有get_rect方法。錯誤資訊非常清楚。這里的問題是:
class Enemy(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = enemy #<--- self.rect = self.image.get_rect()
這是因為enemy本身就是一個Enemy物件:
enemy = Enemy()
您很可能enemy對pygame.Surface(image) 的物件實體和Enemy. 您不能對 2 個不同的事物(變數)使用相同的名稱。所以創建第一個enemy"會起作用,但所有后續的都會失敗。
更改影像名稱:
enemy = pygame.image.load(....)
enemy_image = pygame.image.load(....)
class Enemy(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = enemy_image #<---
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532188.html
標籤:Python班级游戏属性
