Проблема в следующих строках:
exes.set(i, i + xSpeeds.get(i));
whys.set(i, i + ySpeeds.get(i));
То, что вы хотите там сделать, это добавить скорость к текущему значению exes / whys по индексу i. Но что вы на самом деле делаете, так это устанавливаете их на индекс + скорость. Поскольку индекс никогда не изменится, также как и позиции.
Чтобы исправить это, замените его следующим:
exes.set(i, exes.get(i) + xSpeeds.get(i));
whys.set(i, whys.get(i) + ySpeeds.get(i));
Обновление
При изменении только этого ваш код по-прежнему не будет работать должным образом, потому что обнаружение столкновений:
if(exes.get(i) > width || exes.get(i) <= 0)
{
print("side wall hit");
xSpeeds.set(i, i*= slope);
}
if(whys.get(i) > height || whys.get(i) <= 0)
{
print("roof hit");
ySpeeds.set(i, i*= slope);
}
не обнаруживает столкновения для фактической позиции, потому что это будет позиция (exes, whys) +initPos, так что это должно быть
if (exes.get(i) + initPosX.get(i) > width || exes.get(i) + initPosX.get(i) <= 0)
{
//the code
}
if (whys.get(i) + initPosY.get(i) > height || whys.get(i) + initPosY.get(i) <= 0)
{
//the code
}
Однако, если бы вы запустили его сейчас, вы бы получили ошибку. Это потому, что вы переходите на что-то негативное. вместо i*= slope
просто используйте int(i * slope)
(поскольку int * float возвращает число с плавающей точкой, вы должны преобразовать результат в int с помощью int () ).
Кроме того, выопять же не нужен индекс, а текущее значение индекса:
xSpeeds.set(i, int(xSpeeds.get(i) * slope); //the same for ySpeeds