繁体   English   中英

如何在 pygame 中移动曲面

[英]How to move a surface in pygame

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

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)这样的元组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM