我想访问我的玩家位置,我try 跟踪Moving a Sprite Class from outside of the original Class in pygame,但我得到了"AttributeError:‘GroupSingle’对象没有属性‘rect’".我需要进入障碍类内的玩家位置.

这是我的代码:

import pygame
import os
import random
from sys import exit
pygame.init()
os.system("cls")

WIDTH = 288
HEIGHT = 512
FPS = 60

JUMP_POWER = 60
GRAVITY = 0.15
GAME_ACTIVE = 1

OBSTACLE_INTERVAL = 1000
AWAY_FROM_BIRD = 100

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("assets/images/player/bird.png").convert_alpha()
        self.rect = self.image.get_rect(center = (WIDTH/4, HEIGHT/2))
        self.gravity_store = 0

        self.jump_sfx = pygame.mixer.Sound("assets/audio/jump.wav")
        self.jump_sfx.set_volume(0.1)

    def player_input(self):
        for event in event_list:
            if event.type == pygame.KEYDOWN:
                if self.rect.bottom <= 0:
                    pass
                else:
                    if event.key == pygame.K_SPACE:
                        self.gravity_store = 0
                        self.rect.y -= JUMP_POWER 
                        self.jump_sfx.play()

    def gravity(self):
        self.gravity_store += GRAVITY
        self.rect.y += self.gravity_store
        print(int(self.gravity_store), int(clock.get_fps()))
    
    def collision(self):
        if self.rect.colliderect(ground_rect):
            GAME_ACTIVE = 0

    def update(self):
        self.player_input()
        self.gravity()
        self.collision()

class Obstacles(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("assets/images/obstacles/pipe-green.png")

    def obstacle_spawn(self):
        #I want to access player position here
        print(player.rect.x)
        self.rect = self.image.get_rect(midleft = (0, 0))

    def update(self):
        self.obstacle_spawn()

SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Mama Bird")
clock = pygame.time.Clock()

background_surf = pygame.image.load("assets/images/background/background-day.png")
ground_surf = pygame.image.load("assets/images/background/base.png")
ground_rect = ground_surf.get_rect(topleft = (0, HEIGHT-112))

player = pygame.sprite.GroupSingle()
player.add(Player())

obstacle = pygame.sprite.Group()
obstacle.add(Obstacles())

OBSTACLESPAWN = pygame.USEREVENT + 1
pygame.time.set_timer(OBSTACLESPAWN, OBSTACLE_INTERVAL)

while True:
    event_list = pygame.event.get()
    for event in event_list:
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    SCREEN.blit(background_surf, (0,0))

    player.draw(SCREEN)
    player.update()

    for event in event_list:
        if event.type == OBSTACLESPAWN and GAME_ACTIVE == 1:
            obstacle.update()
            obstacle.draw(SCREEN)

    SCREEN.blit(ground_surf, ground_rect)

    pygame.display.update()
    clock.tick(FPS)

我试图看看它是否可以使用"print(player.rect.x)"访问播放器位置.得到了这个错误:

Traceback (most recent call last):
  File "c:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird\main.py", line 98, in <module>
    obstacle.update()
  File "C:\Users\46722\AppData\Local\Programs\Python\Python310\lib\site-packages\pygame\sprite.py", line 539, in update
    sprite.update(*args, **kwargs)
  File "c:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird\main.py", line 65, in update
    self.obstacle_spawn()
  File "c:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird\main.py", line 61, in obstacle_spawn
    print(player.rect.x)
AttributeError: 'GroupSingle' object has no attribute 'rect'
PS C:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird>

推荐答案

playerpygame.sprite.Group()的一个实例:

player = pygame.sprite.GroupSingle()
player.add(Player())

使用sprite属性访问pygame.sprite.GroupSingle中的pygame.sprite.Sprite:

print(player.rect.x)

print(player.sprite.rect.x)

Python相关问答推荐

在函数内部使用eval(),将函数的输入作为字符串的一部分

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

从webhook中的短代码(而不是电话号码)接收Twilio消息

点到面的Y距离

Pystata:从Python并行运行stata实例

根据另一列中的nan重置值后重新加权Pandas列

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

将9个3x3矩阵按特定顺序排列成9x9矩阵

在极性中创建条件累积和

如何从数据库上传数据到html?

如何在UserSerializer中添加显式字段?

joblib:无法从父目录的另一个子文件夹加载转储模型

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

如何创建引用列表并分配值的Systemrame列

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

如何在GEKKO中使用复共轭物

如何从比较函数生成ngroup?

如何重新组织我的Pandas DataFrame,使列名成为列值?

将字节序列解码为Unicode字符串

如何将django url参数传递给模板&S url方法?