無法生成矩形的副本,但只能在頂部旋轉

我需要在pygame中為我的“Flappy Bird”提供一個管道產卵系統。我已經對它進行了編碼,這樣我就可以產生一個管道,但我需要在頂部有一個管道,旋轉180度,中間有一個小空間,這樣我的鳥就可以在其間飛行。現在我只有一個錯誤。(我將添加碰撞和管道列表,以便它們保留在屏幕上)。

這是我的代碼:

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
VOLUME = 0.15

OBSTACLE_INTERVAL = 500
OBSTACLE_SPACE = 100
AWAY_FROM_BIRD = 150

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(VOLUME)

        self.hit_sfx = pygame.mixer.Sound("assets/audio/hit.wav")
        self.hit_sfx.set_volume(VOLUME)

    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
    
    def collision(self):
        global GAME_ACTIVE
        if self.rect.colliderect(ground_rect):
            self.hit_sfx.play()
            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):
        player_x = player.sprite.rect.x
        obstacle_height1 = random.randint((HEIGHT/2)-150, HEIGHT-150)
        self.rect = self.image.get_rect(midtop = (player_x+AWAY_FROM_BIRD, obstacle_height1))

        obstacle.draw(SCREEN)

        self.image = pygame.image.load("assets/images/obstacles/pipe-green.png")
        obstacle_height2 = self.rect.midtop
        heightlist = list(obstacle_height2)
        y = heightlist[1]
        y = y - OBSTACLE_SPACE
        del heightlist[1]
        heightlist.append(y)
        obstacle_height2 = tuple(heightlist)
        self.image = pygame.transform.rotate(self.image, 180)
        self.rect = self.image.get_rect(bottom = (player_x+AWAY_FROM_BIRD, obstacle_height2))

        obstacle.draw(SCREEN)

    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")
background_rect = background_surf.get_rect()
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()

    if GAME_ACTIVE == 1:
        SCREEN.blit(background_surf, background_rect)

        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)

以下是錯誤:

Traceback (most recent call last):
  File "C:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird\main.py", line 121, 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 86, in update
    self.obstacle_spawn()
  File "C:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird\main.py", line 81, in obstacle_spawn     
    self.rect = self.image.get_rect(bottom = (player_x+AWAY_FROM_BIRD, obstacle_height2))
TypeError: invalid rect assignment
PS C:\Users\46722\Documents\Programmering\Python\yesman\Pygame\Mama Bird> 

? 最佳回答:

bottom參數只影響矩形的y坐標。因此,只能指定單個值,而不能指定元組。如果要設置x和y坐標,必須使用bottomleftmidbottombottomright(請參見pygame.Rect)。此外obstacle_height2需要是s的單個值,而不是列表。e、 g.self.rect.top

obstacle_height2 = self.rect.top
self.image = pygame.transform.rotate(self.image, 180)
self.rect = self.image.get_rect(midbottom = (player_x+AWAY_FROM_BIRD, obstacle_height2))

此外,您需要使用pygame.transform.flip沿y軸翻轉管道圖像:

self.image = pygame.image.load("assets/images/obstacles/pipe-green.png")
self.image = pygame.transform.flip(self.image, False, True)
主站蜘蛛池模板: 国产裸体舞一区二区三区| 人妻精品无码一区二区三区| 亚洲AV无码一区二区三区性色| 日韩精品久久一区二区三区| 久久久久久综合一区中文字幕| 精品国产日韩亚洲一区91| 99精品一区二区免费视频| 激情内射亚州一区二区三区爱妻| 无码中文字幕人妻在线一区二区三区 | 国产成人久久一区二区三区 | 成人国产精品一区二区网站公司| 久久久久久综合一区中文字幕 | 中文字幕无码免费久久9一区9| 日韩精品人妻一区二区三区四区 | 日本中文字幕一区二区有码在线| 国产一区中文字幕在线观看| 国产成人综合一区精品| 国产精品高清一区二区三区不卡| 久久精品视频一区二区三区| 久久久久久人妻一区精品| 精品一区二区三区四区在线| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费人妻精品一区二区三区| 女同一区二区在线观看| 久久久无码精品人妻一区| 无码人妻精品一区二区三区99性 | 无码人妻一区二区三区在线| 日韩制服国产精品一区| 韩国福利一区二区三区高清视频 | 国产一区二区在线看| 亚洲一区二区三区偷拍女厕| 国内偷窥一区二区三区视频| 久久婷婷久久一区二区三区| 蜜桃传媒视频麻豆第一区| 久久一区二区三区精品| 奇米精品视频一区二区三区| 日韩精品无码一区二区三区不卡 | 成人精品视频一区二区| 春暖花开亚洲性无区一区二区| 八戒久久精品一区二区三区| 一区二区三区免费视频网站|