pucci ha scritto:
fosse così semplice, non esisterebbero joystick 4-8 vie pensati per il MAME (come l'ultristick plus della ultimarc).
la necessità di un limitatore 8-4 vie (meccanio o elettronico che sia), serve proprio ad evitare che premendo per sbaglio una diagonale il gioco non faccia niente.
prova a giocare a donkey kong con un joystick 8 vie, e a salire una scala in un momento concitato. se preso dalla frenesia premi la diagonale, posso succedere diverse cose "strane" come ad esempio: il giocatore rimane fermo (e muori) il giocatore continua ad andare nelle precedente direzione (e muori)
ci sono tanti siti e scritti vari che parlano del problema (un classico dei MAMEcab purtroppo)
quindi il limitatore purtroppo serve

Eh no, purtroppo stai facendo un pò di confusione, Pucci..

Il fatto che un joystick a 4 direzioni funzioni intrinsecamente meglio di un 8 sui giochi che sono stati programmati per 4 direzioni è un fatto assodato.. ma questo non cambia il discorso sui limitatori elettronici!
Io sinceramente non mi sono preso la briga di andare a leggere il codice di Mame, ma vi assicuro che non ce n'è bisogno!
Seguitemi un attimo nel ragionamento, che anche se un pò da programmatori, non è molto complesso credo..
Per semplificare ragioniamo sempre solo sull'alto e sul destra, e quindi diciamo:
- destra = X
- alto = Y
Ora, visto che parliamo di joystick digitali, sia X che Y sono di fatto dei bit (0=spento, 1=acceso).. ok?
Bene, finchè io, con il mio joy a 8 direzioni, tiro solo a dx, o solo in alto, va tutto bene.. ma il problema è appunto quando vado in diagonale, giusto?
In quanto il programma di PacMan (o DonkeyKong, nell'esempio di Pucci) non è pensato per gestire contemporaneamente i 2 bit X e Y accesi insieme..
Ma a questo punto, se io sto tirando in diagonale, che direzione, tra X e Y, per PacMan, *voglio realmente*?
1) destra (ovvero X=1, Y=0)
2) alto (ovvero X=0, Y=1)
3) entrambe (ovvero X=1, Y=1)
Bene, questo è un bel problema, in quanto trattandosi di bit (= logica binaria), non c'è un metodo certo per stabilirlo!
Quindi che si può fare?
La logica più grezza possibile sarebbe
"se il joy è alto-dx, non è nè a dx nè in alto" (tutti 0 => Pacman non si muove), o peggio
"scegline una a caso".. E addio Pacman!
Una logica più evoluta potrebbe essere
"se l'ultima direzione prima della diagonale era dx, continua ad andare a dx, se invece era alto continua ad andare in alto".
Altre finezze si potrebbero inventare, tipo basandosi sulla durata dell'ultima direzione certa (
"se il joy è stato per 10ms a dx vale dx"), o chissà che altro, ma l'incertezza di base rimane!
..Bene, posto che questa incertezza è inevitabile quale miracolo potrebbe mai fare un circuitino da 30 euro rispetto a una macchina come un PC, capace di campionare e calcolare miliardi di bit al secondo?
Qualsiasi logica, anche la più fine, sarà sempre inevitabilmente inesatta.. questo vale per Mame (dove, trattandosi di un programma molto evoluto, è molto probabile che siano state introdotte le migliori logiche possibili, che nemmeno sto a pensare), come per il circuitino in questione (dove per forza di cose avran potuto far meno)!
Quindi l'unica soluzione veramente valida.. è usare il restrittore meccanico, che la elimina "alla radice"! Oppure accontentarsi, come facciamo tutti
Ora vi ho convinto un pò?
Beh, in ogni caso, grazie per avermi fatto fare questa lezioncina di programmazione spicciola!
