我得到了做自上而下的射击游戏的功课,但是每次我使精灵旋转时,运动线就会停止工作,并且每当我使精灵移动时,旋转线就会开始失效。我一生中从未使用过Pygame,但我认为问题出在我对自我命令的理解不足。不要隐瞒我是怎么错的,就像我说我以前从未接触过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)
我希望能够在相同的代码内移动和旋转,我现在不介意结结巴巴。抱歉,如果我粘贴了太多的代码,我真的不知道问题出在哪里,所以我决定最好多提供信息。
答案 0 :(得分:0)
您必须更改self.pos
而不是self.rect
,因为self.rect
是由self.pos
在rotate()
方法中更新的:
def rotate(self): # [...] self.rect = self.image.get_rect(center=self.pos) # set self.rect by self.pos
在调用self.pos
之前更新update()
中的rotate()
:
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