解决python入门与实践 出现'Group' object has no attribute 'get_rect

解决python入门与实践 出现'Group' object has no attribute 'get_rect

题目描述

get_rect()应该是pygame中的一种方法,为什么不能使用?而是被当成Group()中的变量

题目来源及自己的思路

已经将所有函数和类合并,直接复制运行即可,请大神解答一下

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
alien_invasion.py(主程序)

import sys

import pygame

from pygame.sprite import Sprite

from pygame.sprite import Group

import game_functions as gf

class Settings():

def __init__(self):

self.screen_width = 1200

self.screen_height = 800

self.bg_color = (230,230,230)

self.ship_speed_factor = 2.5

self.bullet_speed_factor = 1

self.bullet_width = 3

self.bullet_height = 10

self.bullet_color = 60,60,60

self.bullets_allowed = 3

self.alien_speed_factor = 1

self.fleet_drop_speed = 10

self.fleet_direction = 1

class Ship:

def __init__(self,ai_settings,screen):

self.screen = screen

self.ai_settings = ai_settings

self.image = pygame.image.load('images/ship.bmp')

self.rect = self.image.get_rect()

self.screen_rect = screen.get_rect()

class Bullet(Sprite):

# 对飞行子弹的管理

def __init__(self,ai_settings,screen,ship):

# 在飞船所处位置创建子弹

super(Bullet,self).__init__()

self.screen =screen

class Alien(Sprite):

def __init__(self,ai_settings,screen):

super(Alien,self).__init__()

self.screen = screen

self.ai_settings = ai_settings

# 加载图片确认rect

self.image = pygame.image.load('images/alien.bmp')

self.rect = self.image.get_rect()

# 每个外星人在屏幕左上角

self.rect.x = self.rect.width

self.rect.y = self.rect.height

# 存储外星人的位置

self.x = float(self.rect.x)

def blitme(self):

self.screen.blit(self.image,self.rect)

def update(self):

self.x += self.ai_settings.alien_speed_factor

self.rect.x = self.x

def check_edges(self):

screen_rect = self.screen.get_rect()

if self.rect.right >= screen_rect.right:

return True

elif self.rect.left <= 0:

return True

def update(self):

self.x += (self.ai_settings.alien_speed_factor *

self.ai_settings.fleet_direction)

self.rect.x = self.x

def get_number_aliens_x(ai_settings,alien_width):

avaliable_space_x = ai_settings.screen_width - 2 * alien_width

number_aliens_x = int(avaliable_space_x / (2 * alien_width))

return number_aliens_x

def get_number_rows(ai_settings,ship_height,alien_height):

avaliable_space_y = (ai_settings.screen_height -

(3 * alien_height) - ship_height)

number_rows = int(avaliable_space_y / (2 * alien_height))

return number_rows

def create_alien(ai_settings,screen,aliens,alien_number,row_number):

alien = Alien(ai_settings,aliens)

alien_width = alien.rect.width

alien.x = alien_width + 2 * alien_width *alien_number

alien.rect.x = alien.x

alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number

aliens.add(alien)

def create_fleet(ai_settings, screen, ship, aliens):

# 创建一个外星人,并计算一行有几个外星人

alien = Alien(ai_settings,screen)

number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)

number_rows = get_number_rows(ai_settings, ship.rect.height,

alien.rect.height)

# 创建第一行外星人

for row_number in range(number_rows):

for alien_number in range(number_aliens_x):

create_alien(ai_settings, screen, aliens, alien_number,

row_number)

def check_fleet_edges(ai_settings, aliens):

for alien in aliens.sprites():

if alien.check_edges():

change_fleet_direction(ai_settings, aliens)

break

def run_game():

pygame.init()

ai_settings = Settings()

screen = pygame.display.set_mode(

(ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption("Alien Invasion")

# 创建一个飞船

ship = Ship(ai_settings,screen)

# 创建一个用于储存子弹的编组和一个外星人编组

bullets = Group()

aliens = Group()

# 创建外星人群

gf.create_fleet(ai_settings,screen,ship,aliens)

# 开始游戏主循环

while True:

gf.update_aliens(ai_settings,aliens)

run_game()

你期待的结果是什么?实际看到的错误信息又是什么?

可以直接运行方法get_rect()
实际看到:

 File "D:/python/alien_invasion/untitled0.py", line 145, in <module>

run_game()

File "D:/python/alien_invasion/untitled0.py", line 142, in run_game

gf.update_aliens(ai_settings,aliens)

File "D:\python\alien_invasion\game_functions.py", line 112, in update_aliens

check_fleet_edges(ai_settings, aliens)

File "D:\python\alien_invasion\game_functions.py", line 101, in check_fleet_edges

if alien.check_edges():

File "D:\python\alien_invasion\alien.py", line 37, in check_edges

screen_rect = self.screen.get_rect()

以上是 解决python入门与实践 出现&#x27;Group&#x27; object has no attribute &#x27;get_rect 的全部内容, 来源链接: utcz.com/a/159725.html

回到顶部