gpt4 book ai didi

python - 无法使用 Pygame 在同一代码中旋转和移动 Sprite

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:11 25 4
gpt4 key购买 nike

我被布置了制作自上而下的射击游戏的作业,但每次我让我的 Sprite 旋转时,移动线都会停止工作,每次我让 Sprite 移动时,旋转线都会开始失败。我一生中从未使用过 Pygame,但我认为问题在于我对 self 命令缺乏了解。不要隐瞒,告诉我我错得有多离谱,就像我说的,我以前没有接触过 Pygame,而且我只编码了大约 5 个月,所以无论如何,有些代码行可能是多余的。

import pygame
import math

class Player(pygame.sprite.Sprite):

def __init__(self,x,y):
super().__init__()
self.image = pygame.image.load("blue.png")
self.movex = 0 # move along X
self.movey = 0 # move along Y
self.orig_img = self.image
self.pos = pygame.math.Vector2(x,y)
self.rect = self.image.get_rect(center=self.pos)
self.vel = pygame.math.Vector2(0, 0)

def update(self):
self.rect.x = self.rect.x + self.movex
self.rect.y = self.rect.y + self.movey
self.rotate()
self.pos += self.vel
self.rect.center = self.pos

def move(self,x,y):
#https://opensource.com/article/17/12/game-python-moving-player - movement source
self.movex += x
self.movey += y

def rotate(self):
rel_x, rel_y = pygame.mouse.get_pos() - self.pos
angle = -math.degrees(math.atan2(rel_y, rel_x))
self.image = pygame.transform.rotozoom(self.orig_img, angle, 1)
self.rect = self.image.get_rect(center=self.pos)


player = Player(200,300)
steps = 10
sprite_list = pygame.sprite.Group()
sprite_list.add(player)

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT or event.key == ord('a'):
player.move(-steps,0)

    if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == ord('a'):
player.move(steps,0)

我希望能够在相同的代码中移动和旋转,我现在不介意口吃。抱歉,如果我粘贴了太多代码,我真的不知道问题出在哪里,所以我决定提供更多信息比提供更少信息更好。

最佳答案

您必须更改 self.pos 而不是 self.rect,因为 self.rect 是由 self 更新的。方法 rotate() 中的 pos:

def rotate(self):
# [...]
self.rect = self.image.get_rect(center=self.pos) # set self.rect by self.pos

在调用 rotate() 之前,在 update() 中更新 self.pos:

class Player(pygame.sprite.Sprite):

# [...]

def update(self):

#self.rect.x = self.rect.x + self.movex <--- delete
#self.rect.y = self.rect.y + self.movey <--- delete
self.pos = self.pos + pygame.math.Vector2(self.movex, self.movey)

self.rotate()
self.pos += self.vel
self.rect.center = self.pos

关于python - 无法使用 Pygame 在同一代码中旋转和移动 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55812449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com