Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NuGuN

[pygame] Alterar o eixo de rotação da imagem

Recommended Posts

NuGuN

Boas!

O meu problema é o seguinte... Preciso rodar uma imagem e para isso comecei por utilizar algo deste genero:

...
self.image = pygame.transform.rotate(self.baseImage, -self.direction.angle)
...
self.imageW, self.imageH = self.image.get_size()
...
drawPosition = self.image.get_rect().move(self.position.x - self.imageW / 2, self.position.y - self.imageH / 2)
self.screen.blit(self.image, drawPosition)

Esse código funciona, mas, roda a imagem em torno do seu proprio eixo. Agora imaginando que eu quero roda por exemplo a torre de um tanque de guerra... o ponto que eu quero que sirva para eixo de rotação não é o centro da imagem mas sim um bocado mais atraz...

Imaginando que isto é uma torre, onde o X é a 'cabeça' da torre, os '-' são o cano e o '|' é o eixo de rotação.

Com esse código que eu tenho, o esquema seria algo deste genero:

X-------

    |

E eu queria algo deste genero

X-------

|

Algém me consegue dizer como posso fazer isto?

Cumps

Share this post


Link to post
Share on other sites
chuckytuh

eu de python nada sei mas vendo

drawPosition = self.image.get_rect().move(self.position.x - self.imageW / 2, self.position.y - self.imageH / 2)

algo me diz que deves mudar ai os parametros para a funçao move, nao?

Share this post


Link to post
Share on other sites
flyingFox99

Não sei se já resolveu, mas eu estava com um problema parecido recentemente para resolver eu fiz o seguinte:

Eu usei conceitos de trigonometria kkk

olha esse método que usei para fazer órbitas:

usei a biblioteca math para calcular o seno e cosseno e obter o Pi.

def orbita(self, velocidade, Raio, sizeImage):

  self.pos_x = self.wCenter + Raio * math.cos(velocidade*self.angulo/180*math.pi)
  self.pos_y = self.hCenter + Raio * math.sin(velocidade*self.angulo/180*math.pi)

  self.angulo += 1

  if self.angulo == 360:
  	self.angulo = 0

  return (self.pos_x, self.pos_y)

Qualquer duvida é só falar.

 

obs: 8 anos depois

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.