if not (delay % 10): bullet_sound.play() if is_double_bullet: bullets = bullet1 bullets[bullet2_index].reset((me.rect.centerx , me.rect.centery-33)) bullets[bullet2_index + 1].reset((me.rect.centerx , me.rect.centery+30)) bullet2_index = (bullet2_index + 2) % BULLET2_NUM else: bullets = bullet1 bullets[bullet1_index].reset(me.rect.midright) bullet1_index = (bullet1_index + 1) % BULLET1_NUM
时间: 2023-06-16 10:08:09 浏览: 164
这段代码看起来像是一个游戏中发射子弹的部分。首先,它检查时间延迟是否为10的倍数,如果是,则播放子弹声音。然后,它检查是否启用了双倍子弹模式,如果是,则使用双倍子弹对象数组,并在飞机的上下两侧发射子弹。否则,使用单倍子弹对象数组,并从飞机的右侧发射子弹。在每次发射子弹时,都会更新子弹的索引,以便下一次发射使用下一个子弹对象。
相关问题
for bullet in self.bullets: if bullet.y >= -31: bullet.display() bullet.move() else: deleted_bullets.append(bullet)
这段代码是一个游戏中的子弹管理器的代码。首先,它遍历一个包含所有子弹的列表(self.bullets),对于每一个子弹,判断它的y坐标是否在游戏窗口的上边界之上(上边界的y坐标为-31),如果在游戏窗口内,则展示该子弹并将其移动;如果超出了上边界,则将该子弹添加到一个另外的列表(deleted_bullets)中,以便后续清除。
class HeroPlane(pygame.sprite.Sprite): def __init__(self,screen): pygame.sprite.Sprite.__init__(self) #初始化精灵类 self.image1 = pygame.image.load("D:/PYTHON/pointgame/hero1.jpg") self.rect = self.image1.get_rect() #获取图片大小 self.rect.topleft = [300,700] #获取飞机左上角坐标 self.speed = 10 # 飞机速度 self.screen = screen self.screen_rect = self.screen.get_rect() self.bullets = pygame.sprite.Group() #group方法 类似列表 def key_control(self): # 键盘输入 key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: self.rect.top -= self.speed if key_pressed[K_s] or key_pressed[K_DOWN]: self.rect.bottom += self.speed if key_pressed[K_a] or key_pressed[K_LEFT]: self.rect.left -= self.speed if key_pressed[K_d] or key_pressed[K_RIGHT]: self.rect.right += self.speed if key_pressed[K_SPACE]: bullet = Bullet(self.screen,self.rect.left,self.rect.top) #飞机参数调用 self.bullets.add(bullet) #把子弹放入列表 if self.rect.left < 0:# 控制player不能离开屏幕 self.rect.left = 0 elif self.rect.right > self.screen.rect.right: self.rect.right = self.screen.rect.right 错误是 File "D:/PYTHON/pointgame/pointgame.py", line 124, in <module> main() File "D:/PYTHON/pointgame/pointgame.py", line 117, in main player.key_control() File "D:/PYTHON/pointgame/pointgame.py", line 33, in key_control elif self.rect.right > self.screen.rect.right: AttributeError: 'pygame.surface.Surface' object has no attribute 'rect'怎么修改
问题出在第21行,应该将`self.screen_rect = self.screen.get_rect()`改为`self.screen_rect = self.screen.get_rect()`,即将`screen`改为`screen_rect`。代码如下:
```
class HeroPlane(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self) #初始化精灵类
self.image1 = pygame.image.load("D:/PYTHON/pointgame/hero1.jpg")
self.rect = self.image1.get_rect() #获取图片大小
self.rect.topleft = [300,700] #获取飞机左上角坐标
self.speed = 10 # 飞机速度
self.screen = screen
self.screen_rect = self.screen.get_rect()
self.bullets = pygame.sprite.Group() #group方法 类似列表
def key_control(self):
# 键盘输入
key_pressed = pygame.key.get_pressed()
if key_pressed[K_w] or key_pressed[K_UP]:
self.rect.top -= self.speed
if key_pressed[K_s] or key_pressed[K_DOWN]:
self.rect.bottom += self.speed
if key_pressed[K_a] or key_pressed[K_LEFT]:
self.rect.left -= self.speed
if key_pressed[K_d] or key_pressed[K_RIGHT]:
self.rect.right += self.speed
if key_pressed[K_SPACE]:
bullet = Bullet(self.screen,self.rect.left,self.rect.top) #飞机参数调用
self.bullets.add(bullet) #把子弹放入列表
if self.rect.left < 0:# 控制player不能离开屏幕
self.rect.left = 0
elif self.rect.right > self.screen_rect.right: # 修改这行
self.rect.right = self.screen_rect.right
```
这样应该就能解决报错问题了。
阅读全文