eh, capisco... evidentemente la velocità della pallina è così alta che nello spazio temporale di un frame riesce ad attraversare un mattoncino...
per risolvere dovresti fare un check migliore:
invece di aumentare le coordinate e poi fare il test, prova a generare delle coordinate intermedie (usando i numeri in floating point se necessario) suddividendo lo spazio del frame in un certo numero di settori, e facendo il check per ogni settore.
Altro metodo potrebbe essere quello di ricavare l'equazione della retta seguita dalla pallina (avendo dx e dy è un gioco da ragazzi) e fare un test di tipo "line to rect", anzichè il test "point to rect" che usi nel tuo codice. Il codice sarebbe un pelo più complesso ma ti consentirebbe di ricavare il tempo di collisione prima ancora che questa avvenga. In questo modo potrai prevedere dopo quanti secondi (o frames) la tua pallina andrà a collidere e potrai quindi diminuire il numero di test necessari. Cioè, se i mattoncini non si muovono mai, e sai che per esempio la prossima collisione avverrà tra 40 frames, puoi benissimo saltare il calcolo delle collisioni per ben 39 volte, risparmiando un discreto numero di calcoli...
Il mio vecchio algoritmo non è così sofisticato comunque, si basa solo sul calcolo della posizione della pallina in termini di griglia, e controlla le celle della griglia adiacenti per detectare una collisione, per questo motivo tutti i mattoncini sono obbligati a stare su una griglia con celle di dimensioni tutte uguali.
|