Ir para o conteúdo
  • 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

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.