Fórum Cálculo animação sprite, visual Studio c++. #619861
22/04/2023
0
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:
OBS: Onde esta escrito mais: é o sinal +
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
Curtir tópico
+ 0
Responder
Posts
24/04/2023
Arthur Heinrich
Para exibir um sinal de mais, dá para utilizar a tag html "+"
Não sei se entendi bem. Mas vamos imaginar o seguinte:
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
Gostei + 0
24/04/2023
Mysql_2013
Para exibir um sinal de mais, dá para utilizar a tag html "+"
Não sei se entendi bem. Mas vamos imaginar o seguinte:
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)