Ich erstelle ein grundlegendes Panzerspiel und arbeite gerade an der Kanone des Panzers. Ich habe es geschafft, die Waffe um eine Achse rotieren zu lassen und sie bewegt sich, wenn man die "a" und "d" Tasten drückt, aber manchmal, wenn die Waffe gedreht wurde und dann bewegt wird, bewegt sie sich aus irgendeinem Grund nach rechts. Hier ist der Code:Pygame sprite springt herum, nachdem es gedreht und dann bewegt wurde
class tankGun(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = tankGunImage
self.rect = self.image.get_rect()
self.x = 400
self.xx = 410
self.y = 400
self.rect.x = self.x
self.rect.y = self.y
self.angle = 0
self.original = self.image
tankGunList.add(self)
tankGunList.draw(gameDisplay)
def rotate(self, chk):
test = False
if chk == 1:
self.angle += 1
elif chk == 2:
self.angle -= 1
if self.angle > 0 and self.angle < 180:
test = True
else:
if chk == 1:
self.angle = 180
elif chk == 2:
self.angle = 0
if test == True:
self.image = pygame.transform.rotate(self.original, self.angle)
tankGunList.clear(gameDisplay, background)
tankGunList.draw(gameDisplay)
self.rect = self.image.get_rect(center = self.rect.center)
def move(self, chk):
self.x += chk
self.xx = self.x + 10
self.rect.x = self.x
tankGunList.clear(gameDisplay, background)
tankGunList.draw(gameDisplay)
(Randbemerkung: chk entweder +1 eingesandt oder -1 für die Bewegung und 1 oder 2 für die Rotation Es ist nur eine Art und Weise des Erfassens der Taste gedrückt wurde.).
BTW: 'self.x' hat immer den gleichen Wert wie' self.rect.x', so dass Sie nur 'self.rect.x' verwenden können, und entfernen Sie' self.x' - das gleiche mit ' self.y' – furas
es scheint, dass Sie 'tankGunList.draw (gameDisplay)' an drei Stellen verwenden. Sie sollten nur einmal - in Hauptschleife zeichnen – furas