Если я правильно понимаю ваш код, то положение мяча напрямую контролируется ориентацией iPhone (наклон). Таким образом, наклон iPhone вправо приведет к тому, что мяч окажется на правой стороне дорожки (3 часа). Я полагаю, вы, возможно, захотите, чтобы шары ускорение (или, по крайней мере, его скорость) контролировались. Затем вы объединяете ускорение со скоростью и скорость для размещения с учетом ограничений (стенок рельса).
Как это настроено сейчас, я не понимаю, как бы вы контролировали более одного шара (согласно изображению, которое вы разместили).
Тогда для эффекта отскакивания: если вы имеете в виду отскок от стены дорожки, то это будет небольшая модуляция mRadius. Если вы имеете в виду отскок от другого шара, то вы должны модулировать угловое положение (посредством угловой скорости) двух шаров, чтобы отразить реакцию.
РЕДАКТИРОВАТЬ: для интеграции ускорения в скорость, а затем в положение, для этой игры , вы можете сделать с прямоугольной интеграцией 1-го порядка. Кроме того, будет более реалистичным сделать ускорение пропорциональным углу наклона. Учитывая значения ускорения от самого iPhone, вы можете назначить соотношение 1: 1 между ускоренными шариками и показаниями устройства. Итак, вы хотели бы что-то вроде:
BallAccX = AccelX * Am_I_NOT_touching_a_wall_in_X_direction() * Ka
BallVelX = BallVelX + BallAccX * dT * Kv
BallPosX = BallPosX + BallVelX * dT * Kp
Примечание: приведенные выше формулы для скорости и положения: аппроксимация 1-го порядка , но их должно быть достаточно для этой игры.
Ka, Kv, Kp - некоторые коэффициенты пропорциональности. Выберите их, чтобы сделать связь между ощущаемым ускорением и движением мяча, как вам нравится. dT - разница во времени между обновлениями состояния мяча. Функция Am_I_NOT_touching_a_wall_in_X_direction () возвращает 1, если мяч может свободно перемещаться горизонтально (в направлении наклона), и 0 в противном случае.
Расчеты для движения Y симметричны.