Non per demoralizzarti ma ho l'impressione che tu stia sbagliando approccio in tutti i sensi.
Punto primo:
L'algoritmo che stai usando ha sicuramente qualche difetto. Se è frutto di un tuo personale lavoro e lo stai facendo a motivo di studio, ti consiglierei piuttosto di partire da qualcosa di già sviluppato e funzionante, in modo da capirne i meccanismi di funzionamento ed eventualmente procedere poi alle tue modifiche/personalizzazioni/implementazioni.
Vedi ad esempio qualche tutorial come questo:
https://developer.mozilla.org/en-US/..._off_the_walls
Nota che si tratta di un gioco ispirato al classico "breakout"; quel tutorial ha 10 step che illustrano lo sviluppo fino ad ottenere un gioco completo, ma ho linkato il 3° che riguarda la parte in cui si deve determinare la collisione della pallina con i limiti dell'area di gioco e quindi il rimbalzo nel verso opposto (che è ciò che stai cercando di ottenere).
Punto secondo :
A prescindere dallo sviluppo in sé, il modo che stai usando per determinare possibili "bug" nel codice è alquanto impreciso perché non può darti conferma sulla causa del malfunzionamento.
Stranamente invece, non viene eseguita l'istruzione if (y>= 550 || y<=10){dy=-dy}, cioè se
(y>= 550 || y<=10) è true non sia dy=-dy, ma dy resta dy.Tu stai semplicemente monitorando il risultato di quella condizione (che restituisce un valore corretto) e da questo hai arbitrariamente determinato che la precedente condizione non viene eseguita. In realtà stai tralasciando quello che effettivamente deve essere considerato per capire se quella condizione è vista oppure no, che più che altro è ciò che sta al suo interno (la variabile dy).Per controllare quanto ho detto, in alto ho scritto in due caselle di testo i valori di y(top) e della condizione true o false di (y>= 550 || y<=10).
Sarebbe quindi più opportuno monitorare quella variabile (oltre al valore restituito dall'espressione nella condizione).
Ti posso assicurare infatti che quella condizione sta funzionando e fa esattamente quello che gli hai detto di fare; per cui disapprovo la tua conclusione.
Per farla semplice, puoi verificare inserendo una cosa del genere subito dopo quella stessa condizione:
Controllando sulla console del tuo browser potrai verificare che il valore diventa negativo appena si verifica quella condizione.codice:console.log(dy)
Tutto quindi funziona come tu gli hai detto di fare; ciò che hai affermato nell'oggetto della discussione non è corretto.
Per il resto, quando dici che la condizione per dx viene eseguita ma stranamente non hai lo stesso risultato per dy, questo è legato al fatto che il valore di dy viene "alterato" da un'ulteriore espressione prima di quella condizione, a differenza del valore di dx che resta tale prima che sia eseguita la relativa condizione.
Questa è l'espressione che stai usando per variare dy:
Sinceramente non so a cosa ti serva messa lì; se infatti la tolgo mi pare che il tutto funzioni come dovrebbecodice:dy=dx*Math.tan(alfa*3.14159/180);
In conclusione, stai sbagliando qualcosa da qualche parte nel tuo algoritmo, che non riguarda la condizione da te incriminata; per questo sarebbe meglio considerare di iniziare da un qualche tutorial (vedi punto primo), sempre che tu non lo abbia fatto e magari ti sei perso poi nella personalizzazione
Perdona la divagazione, ma chiaramente i miei vogliono essere solo dei consigli, poi vedi tu come ritieni sia meglio procedere.
Buon proseguimento.
EDIT: scusami br1 non avevo visto il tuo intervento e che avevi già fornito la soluzione![]()