Oppure

Loading
19/11/16 9:56
Thejuster
Ragazzi scusate ho un piccolo problema.
Magari la soluzione è proprio sotto al mio naso ma non riesco a trovarla
(forse anche per la stanchezza)

Alla pressione di un tasto, un NPC provvede a muoversi nella coordinata assegnata in m_iMove.
quando m_Pos raggiunge m_iMove si può concludere completato lo spostamento.

Ma se tengo premuto esempio Giu, m_iMove viene costantemente aumentata e non riesco
a rendermi conto fin dove andrà a finire.

Perché una pressione, equivale a tot spostamenti di pixel.
Quando completato quello spostamento si ferma
ma se sono più spostamenti, l'NPC Continua a spostarsi per fatti suoi.

Sapete darmi un indizio su come bloccare gli altri movimenti fin quando quello precedente non viene completato?
Vorrei escludere le liste se e possibile.
VOrrei fare tutto tramite variaibli.


   public void Update()
              {

                  if (m_iMoveX != 0 || m_iMoveY != 0)
                      m_iFrame = (m_iFrame + 1) % 16;
                  else
                      m_iFrame = 0;

                  if (m_iPause > 0)
                      --m_iPause;

                  if (m_iMoveX > 0)
                  {
                      m_iPosX += 2;
                      m_iMoveX -= 2;
                  }

                  if (m_iMoveX < 0)
                  {
                      m_iPosX -= 2;
                      m_iMoveX += 2;
                  }

                  if (m_iMoveY > 0)
                  {
                      m_iPosY += 2;
                      m_iMoveY -= 2;
                  }

                  if (m_iMoveY < 0)
                  {
                      m_iPosY -= 2;
                      m_iMoveY += 2;
                  }
              }
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/11/16 10:44
Snogar
Scusa ma se m_iMove rappresenta la fine dello spostamento è normale che se la aumenti in corso d'opera cambia l'ultima posizione ....forse se ho capito bene hai bisogno di una variabile di transazione che rappresenta l'ultima posizione dello spostamento in quel momento.

Cioè m_iMove diventerebbe un Array che contiene i vari spostamenti inviati da tastiera e la variabile ?MUOVO? è l'effettiva cordinata dello spostamento.
aaa
19/11/16 11:00
Thejuster
ho risolto questo problema inserendo questa verifica

in pratica l'NPC si muove su una griglia di blocchi che misurano 32x32 pixel

 pl.m_iMoveY += 32;  //Incremento il movimento da eseguire                        

 pl.m_npcDirection = NPCDirection.Dowm; //Imposto la faccia
 if (pl.m_iMoveY > 32)  //Se premendo GIU l'npc supera lo spostamento consentito di 32 pixel
 pl.m_iMoveY = 32; //Forzo a fargli eseguire lo spostamento di 32 pixel e non di più




con questo ho risolto il problema dello spostamento ma ora mi ritrovo un'altro bug

mostro la screen

s13.postimg.org/sap94oe1z/…

Guarda le coordinate sulla barra del titolo
Musirano

iMoveY 0 (Nessun spostamento in corso)
iPos = 96 (Blocchi di 32 * 3 = 96 )

e qui ci siamo

L'algoritmo dell'NPC
incrementa di +2 la coordinata guarda sopra.
mentre incrementa la coordinata iPos, sottrae lo spostamento a iMove
e qui ci siamo.

Alla pressione del Tasto Giu

 pl.m_iMoveY += 32;                          
                                pl.m_npcDirection = NPCDirection.Dowm;
                                if (pl.m_iMoveY > 32)
                                    pl.m_iMoveY = 32;



Incremento il Movimento di 32 pixel
se continuo o tengo premuto GIU facendo superare il valore di iMove esempio >32, la condizione sottostante,
riporta iMove allo spostamento consentito ovvero di 32.
quindi dovrebbe in questo caso spostarsi di 32 pixel.

ma ciò non accade, mi ritrovo uno spostamento sballato di diversi pixel

s18.postimg.org/wp8rk2tex/…

La coordinata precedente era di 96 + 32 (per il nuovo spostamento) = 128

nella screen mi ritrovo 132
non capisco come sia possibile una cosa del genere.
idee al riguardo?
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/11/16 11:45
Snogar
Noto che lo sballamento è di 4 pixel ....è incrementale? se continuo a spostarlo aumenterà o diminuirà a seconda di dove sposti il personaggio?
aaa
19/11/16 15:29
Thejuster
Si

in diverse occasioni mi sono ritrovato un incremento anche di 8 pixel a volte.
non è sempre di 2.
mire.forumfree.it/ - Mire Engine
C# UI Designer
21/11/16 9:21
Snogar
Scusa se rispondo solo ora ....cmq vorrei capire se l'incremento partendo dalla casella zero (cioè subito dopo che parte il programma la posizione del personaggio senza che tu faccia nulla) ....ho come il sospetto che oltre allo spostamento tu gli infili dentro anche i pixel relativi alla griglia di spostamento.
aaa
21/11/16 11:17
Thejuster
Ciao Snogar,

Abbiamo provato ieri tutto il pomeriggio io e TheDarkJuster mentre eravamo in Chat.
Nulla.

Non siamo riusciti a venirne a capo.

L'NPC parte dalla posizione Fissa Y = 96

La matematica non è un opinione questo lo sappiamo tutti.
Di fatti se gli dico di muoversi di 32, non lo fà, incrementa di qualche pixel il risultato finale.

Ma ho notato una cosa.

Debuggando step by step la funzione dello spostamento.
ad ogni interrupt, funziona tutto perfettamente,

Sottrae 2 a iMove e incrementa 2 ad iPos.

Debuggando passo dopo passo funziona, mentre in RunTime sballa i pixel.

L'unica soluzione plausibile che mi è venuto in mente, e che il gestore dei tasti tramite le DirectX
è nettamente superiore e molto più veloce di qualsiasi altro gestore.

In alcune parti del codice, per gestire bene i tasti, sono stato costretto ad inserire un ciclo di pausa.
altrimenti tipo, Se premo ENTER e come se lo avrei premuto 10 volte consecutivamente.
anche con un piccolissimo tocco.

Per farlo incrementare di 1 dovevi proprio sfiorare il tasto.
penso che il problema sia causato proprio da questo fattore.

Stasera provo a cambiare la gestione dei tasti.
Anziché sfruttare l'input delle DirectX provo a sfruttare l'input del Form al KeyDown.
Essendo molto più lento, dovrebbe funzionare.

Ho appena fatto un test qui da dove lavoro nei 5 minuti di pausa, e col gestore dei tasti del Form
Non sballa. prosegue senza problemi.
mire.forumfree.it/ - Mire Engine
C# UI Designer