Ir para conteúdo
  • 0

[Dúvida] Rotação do Armor Stand


LuizB

Pergunta

Olá, estou tentando fazer um rotação na cabeça do armor stand, eu obtive sucesso, porém eu queria uma rotação suave.


Rotação: 

[media]0_1r2zYxyPo[/media]

 

Código: 

 

new BukkitRunnable() {
			float rotation = 0f;
			int xRotation = 0;
			boolean up = true;
			public void run() {
				if(running) {
					setRotation(rotation, xRotation);
					
					/*for(float i=.0f; i<=.6; i=i+.1f) {
						Location newLoc = loc.clone().add(0.1, .07, -i).add(0, xRotation, 0);
						
					//	arc(loc.clone().add(0.1, .07, -i), newLoc);
						
					}*/
					
					if(up) {
						if(rotation >= 4) {
							up = !up;
							
							xRotation = xRotation - 1;
							rotation = rotation - .200f;
						} else {
							xRotation = xRotation + 1;
							rotation = rotation + .200f;
						}
					} else {
						if(rotation <= -4) {
							up = !up;
							
							xRotation = xRotation + 1;
							rotation = rotation + .170f;
						} else {
							rotation = rotation - .170f;
							xRotation = xRotation - 1;
						}
					}
				} else {
					this.cancel();
				}
			}
		}.runTaskTimer(plugin, 0, 2);
Editado por Cuthmf
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

Eu fiz uns testes aqui e na minha opinião seu código está meio zoado...

É só setar o Yaw...

		new BukkitRunnable() {
			@Override
			public void run() {
				Location location = stand.getLocation();
				location.setYaw(location.getYaw() +5.5F); //modifica ai a "suavidade"
				stand.teleport(location);
			}
		}.runTaskTimer(this, 1L, 1L);

Obs: "stand" é a variável do armor stand.

Link para o comentário
Compartilhar em outros sites

Você queria deixar a animação menos "teleportando"? se for isso aonde está "rotation = rotation - .200f;" é só você diminuir o valor do float para exemplo "rotation += 0.050F", que assim ela já vai girar mais "suave", e para compensar na velocidade você pode mudar a task de 2 ticks para 1 tick

Link para o comentário
Compartilhar em outros sites

Eu fiz uns testes aqui e na minha opinião seu código está meio zoado...

É só setar o Yaw...

		new BukkitRunnable() {
			@Override
			public void run() {
				Location location = stand.getLocation();
				location.setYaw(location.getYaw() +5.5F); //modifica ai a "suavidade"
				stand.teleport(location);
			}
		}.runTaskTimer(this, 1L, 1L);

Obs: "stand" é a variável do armor stand.

Cara quase deu certo, o problema é que deu pra perceber que ta teleportando.

Link para o comentário
Compartilhar em outros sites

Diminui o "5.5F"... Põem uns 2.5F ou menos...

Deu quase certo, o problema é que eu queria que girasse só a cabeça.

 

 

 

Você queria deixar a animação menos "teleportando"? se for isso aonde está "rotation = rotation - .200f;" é só você diminuir o valor do float para exemplo "rotation += 0.050F", que assim ela já vai girar mais "suave", e para compensar na velocidade você pode mudar a task de 2 ticks para 1 tick

Não mudou nada.

Link para o comentário
Compartilhar em outros sites

Deu quase certo, o problema é que eu queria que girasse só a cabeça.

 

 

 

Não mudou nada.

Use o método setHeadPose ué...

 

@Edit:

Esquece, o setHeadPose pede um EulerAngle como parâmetro e ele modifica apenas o x, y, z.

Acho que não tem como se não teleportar a ArmorStand...

 

Documentação do ArmorStand: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/ArmorStand.html

Editado por TequilAxBr
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...