Fórum Cálculo animação sprite, visual Studio c++. #619861

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
   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 "&plus;"

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
   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

Ler Mais...



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

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

Aceitar