Cálculo animação sprite, visual Studio c++.

22/04/2023

0

C++

Boa tarde!
Estou criando um pequeno game 2d em directx11, estou na para de animar os sprite.
Veja mina duvida:
Tenho uma folha de sprite com 18 quadros, 3 linha com 6 colunas.
Consigo fazer a animação de modo bem manual. Problema é que se precisar aumentar as colunas ou linhas preciso mudar todo o código da animação.
Gostaria se alguém ai puder me ajudar a fazer este código mais automático.

esse e o código:

float *v = new float[m_NumRow];
	for (size_t i = 0; i < m_NumRow; i++)
	{
		v[i] = i*(1.0f/m_NumRow);
	}
	float t = 0,  k = 1.0f/m_NumRow;
	if (currentFrame >= m_NumCol)
	{
		t = v[1];
	}
	if (currentFrame >= (m_NumCol mais m_NumCol))
	{
		t = v[2];
	}
	if (currentFrame < m_NumCol)
		t = v[0];

	m_vertices[0].uv.x = (float)(currentFrame) / m_NumCol;
	m_vertices[0].uv.y = t mais k;

	m_vertices[1].uv.x = (float)(currentFrame) / m_NumCol;
	m_vertices[1].uv.y = t;  

	m_vertices[2].uv.x = (float)(currentFrame + 1.0f) / m_NumCol;
	m_vertices[2].uv.y = t;

	m_vertices[3].uv.x = (float)(currentFrame + 1.0f) / m_NumCol;
	m_vertices[3].uv.y = t mais k;


OBS: Onde esta escrito mais: é o sinal +
Mysql_2013

Mysql_2013

Responder

Posts

24/04/2023

Arthur Heinrich

Para exibir um sinal de mais, dá para utilizar a tag html "&plus;"

Não sei se entendi bem. Mas vamos imaginar o seguinte:

   0     1     2     3     4     5     6
   |     |     |     |     |     |     |   x
0 -+-----+-----+-----+-----+-----+-----+--->
   |  0  |  1  |  2  |  3  |  4  |  5  |
1 -+-----+-----+-----+-----+-----+-----+
   |  6  |  7  |  8  |  9  | 10  | 11  |
2 -+-----+-----+-----+-----+-----+-----+
   | 12  | 13  | 14  | 15  | 16  | 18  |
3 -+-----+-----+-----+-----+-----+-----+
   |
 y v


Você quer calcular os vértices v[0] a v[3] de tal forma que:


v1 +---------------+ v2
   |               |
   |               |
   |               |
   |               |
   |               |
   |               |
v0 +---------------+ v3

Ex.: Para current_frame = 8

v1=(2,1) +-------+ v2=(3,1)
         |       |
         |   8   |
         |       |
v0=(2,2) +-------+ v3=(3,2)

Supondo que current_frame, m_NumRow e m_NumCol são valores inteiros, você pode calcular:

V[1].x = current_frame % m_NumCol
V[1].y = current_frame / m_NumCol
V[0].x = V[1].x
V[0].y = V[1].y+1
V[2].x = V[1].x+1
V[2].y = V[1].y
V[3].x = V[1].x+1
V[3].y = V[1].y+1

Responder

24/04/2023

Mysql_2013

Para exibir um sinal de mais, dá para utilizar a tag html "&plus;"

Não sei se entendi bem. Mas vamos imaginar o seguinte:

   0     1     2     3     4     5     6
   |     |     |     |     |     |     |   x
0 -+-----+-----+-----+-----+-----+-----+--->
   |  0  |  1  |  2  |  3  |  4  |  5  |
1 -+-----+-----+-----+-----+-----+-----+
   |  6  |  7  |  8  |  9  | 10  | 11  |
2 -+-----+-----+-----+-----+-----+-----+
   | 12  | 13  | 14  | 15  | 16  | 18  |
3 -+-----+-----+-----+-----+-----+-----+
   |
 y v

Você quer calcular os vértices v[0] a v[3] de tal forma que:


v1 +---------------+ v2
   |               |
   |               |
   |               |
   |               |
   |               |
   |               |
v0 +---------------+ v3

Ex.: Para current_frame = 8

v1=(2,1) +-------+ v2=(3,1)
         |       |
         |   8   |
         |       |
v0=(2,2) +-------+ v3=(3,2)

Supondo que current_frame, m_NumRow e m_NumCol são valores inteiros, você pode calcular:

V[1].x = current_frame % m_NumCol
V[1].y = current_frame / m_NumCol
V[0].x = V[1].x
V[0].y = V[1].y+1
V[2].x = V[1].x+1
V[2].y = V[1].y
V[3].x = V[1].x+1
V[3].y = V[1].y+1



vlw.
consegui.

m_vertices[0].uv.x = (m_currentFrame % m_numColunms) * m_spriteData.TextureSize.x;
m_vertices[0].uv.y = (m_currentFrame / m_numColunms) * m_spriteData.TextureSize.y &plus m_spriteData.TextureSize.y;

m_vertices[1].uv.x = (m_currentFrame % m_numColunms) * m_spriteData.TextureSize.x;
m_vertices[1].uv.y = (m_currentFrame / m_numColunms) * m_spriteData.TextureSize.y;

m_vertices[2].uv.x = (m_currentFrame % m_numColunms) * m_spriteData.TextureSize.x &plus m_spriteData.TextureSize.x;
m_vertices[2].uv.y = (m_currentFrame / m_numColunms) * m_spriteData.TextureSize.y;

m_vertices[3].uv.x = (m_currentFrame % m_numColunms) * m_spriteData.TextureSize.x &plus m_spriteData.TextureSize.x;
m_vertices[3].uv.y = (m_currentFrame / m_numColunms) * m_spriteData.TextureSize.y &plus m_spriteData.TextureSize.y;

m_spriteData.TextureSize y x é um valor fixo obtido na inicialização.

Agora posso usar sprites de quanta colunas e linhas eu quiser sem precisar muda o código.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar