如何在 pygame 中移动表面[重复]

问题描述 投票:0回答:1

我正在 pygame 中制作游戏,我试图移动 self.jetRect,它是 Surface (jetSurface) 的矩形区域,但是当我尝试更新矩形的坐标时,我收到 TypeError: ' tuple' 对象不可调用。我认为这与元组不可变这一事实有关,但我不知道如何解决这个问题。

import pygame
pygame.init()

clock = pygame.time.Clock()

# Screen setup
screen_width = 600
screen_height = 600

screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Jet Fighter Game")

# Colors
black = (0, 0, 0)
white = (255, 255, 255)
grey = (100, 100, 100)

# Classes
class PLAYER1:
    def __init__(self):
        self.jetSurface = pygame.image.load("player1 - blackJet.png")
        self.x = 100
        self.y = 100
        self.speed = 5
        self.jetRect = self.jetSurface.get_rect(center = (self.x, self.y))
        self.angle = 0
        self.rotatedJet = self.jetSurface

    def rotateJet(self, surface, angle):
        key = pygame.key.get_pressed()

        if key[pygame.K_a]:
            self.angle += 10
            self.rotatedJet = pygame.transform.rotozoom(surface, angle, 1)
            self.jetRect = self.rotatedJet.get_rect(center=(self.x, self.y))

        if key[pygame.K_d]:
            self.angle -= 10
            self.rotatedJet = pygame.transform.rotozoom(surface, angle, 1)
            self.jetRect = self.rotatedJet.get_rect(center=(self.x, self.y))

        if self.angle >= 360:
            self.angle = 0

        screen.blit(self.rotatedJet, self.jetRect)

    def moveJet(self):
        key = pygame.key.get_pressed()

        if key[pygame.K_w]:
            self.y -= self.speed

        self.jetRect.center(self.x, self.y)



class PLAYER2:
    pass

class BULLET:
    pass


class MAIN:
    def __init__(self):
        self.player1 = PLAYER1()

    def rotateJets(self):
        self.player1.rotateJet(self.player1.jetSurface, self.player1.angle)
    def moveJets(self):
        self.player1.moveJet()

main = MAIN()

# Main loop
run = True

while run:

    # Checking for events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        # Drawing on screen
        screen.fill(grey)

        # Movement and Collisions
        main.rotateJets()
        main.moveJets()

        pygame.display.flip()
        clock.tick(60)

pygame.quit()
python pygame
1个回答
-1
投票

这是一个错字。

self.jetRect.center
(self.x, self.y)
的元组,所以当你这样做时
self.jetRect.center(self.x, self.y)
,您正在执行
(self.x, self.y)(self.x, self.y)
,因此会出现
calling a tuple
的错误消息。

我认为你的意思是像

self.jetRect.center = (self.x, self.y)

这样分配元组
© www.soinside.com 2019 - 2024. All rights reserved.