如何在Pygame中移动表面

卢卡斯

我正在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()
河马

它是一个错字。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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章