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)
