Dec-13-2019, 04:38 AM
In the update section I have down below, I have this:
self.image = pygame.transform.rotate(self.ship_img, self.dir) print("before get_rect", self.rect.x, self.rect.y) self.rect = self.image.get_rect() print("after get_rect", self.rect.x, self.rect.y)the output is this:
Hello from the pygame community. https://www.pygame.org/contribute.html init 293 575 cleaning up Menu state stuff update top 293 575 before get_rect 293 575 after get_rect 0 0 update top 0 0 before get_rect 0 0 after get_rect 0 0 update top 0 0I've never faced this before. I want to .get_rect() so the sprite doesn't wiggle when it rotates. Why does this happen?

class Ship(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.ship_img = pygame.Surface((15,10), pygame.SRCALPHA) self.ship_img.fill(red) self.image = self.ship_img self.rect = self.image.get_rect() self.hit_rect = ship_HIT_RECT self.hit_rect.center = self.rect.center self.rect.centerx = x self.rect.centery = y print("init", self.rect.x, self.rect.y) self.hspeed = 0 self.vspeed = 0 self.dir = 0 self.rtspd = 0 self.thrust = False def update(self): print("update top", self.rect.x, self.rect.y) speed = math.sqrt(self.hspeed**2 + self.vspeed**2) if self.thrust: if speed + fd_fric < ship_max_speed: self.hspeed += fd_fric * math.cos(self.dir * math.pi / 180) self.vspeed += fd_fric * math.sin(self.dir * math.pi / 180) else: self.hspeed = ship_max_speed * math.cos(self.dir * math.pi / 180) self.vspeed = ship_max_speed * math.sin(self.dir * math.pi / 180) else: if speed - bd_fric > 0: change_in_hspeed = (bd_fric * math.cos(self.vspeed / self.hspeed)) change_in_vspeed = (bd_fric * math.sin(self.vspeed / self.hspeed)) if self.hspeed != 0: if change_in_hspeed / abs(change_in_hspeed) == self.hspeed / abs(self.hspeed): self.hspeed -= change_in_hspeed else: self.hspeed += change_in_hspeed if self.vspeed != 0: if change_in_vspeed / abs(change_in_vspeed) == self.vspeed / abs(self.vspeed): self.vspeed -= change_in_vspeed else: self.vspeed += change_in_vspeed else: self.hspeed = 0 self.vspeed = 0 self.rect.centerx += self.hspeed self.rect.centery += self.vspeed self.dir += self.rtspd self.image = pygame.transform.rotate(self.ship_img, self.dir) print("before get_rect", self.rect.x, self.rect.y) self.rect = self.image.get_rect() print("after get_rect", self.rect.x, self.rect.y)