Надеюсь, я смогу четко описать свою ситуацию, поскольку всякий раз, когда я пытаюсь описать ее другим на доске или ручке и бумаге, требуется несколько попыток:)
Часть моей программы включает тележку, которая едет вдоль рельса, и тележка движется на двух колесах. Рельсы - это простая линия, которая изгибается вверх и вниз по кривой, а также выравнивается. Для создания уровня я использую NSMutableArray из CGPoints и рисую их на экране.
Мое текущее обнаружение столкновений включает использование каждого колеса x-cordinate и сравнение его с массивом точек x значений. Когда он находится между двумя точками значений x, я могу использовать градиент, чтобы определить, находится ли он ниже / ниже значения y в этой точке. Это прекрасно работает, когда я использую определенные значения X.
Итак, возникает проблема.
Во-первых, у меня есть переднее колесо, которое отлично катится по этой линии с правильной x и правильной позицией y. У меня проблема в создании заднего колеса, которое следует за этим передним колесом. Заднее колесо также точно следует линии, однако это всегда установленное расстояние Х за передним колесом, это оказывается нереальным, так как при подъеме или спуске по крутым склонам расстояние между колесами слишком велико из-за разницы в Y.
Пример:
O ....... O
Hill Пример:
O
........ O
То же расстояние по x, разница по Y, поэтому расстояние по гипотенузе больше и создается впечатление, что колеса разлетаются в стороны. Мне нужно ограничить заднее колесо передним колесом, чтобы расстояние (гипотенуза) всегда было одинаковым. Трудность, с которой я сталкиваюсь, заключается в том, что, поскольку это связано с изменением его положения по оси x, я не могу понять, как он обнаруживает столкновения.
Если я начинаю подниматься в гору, мне нужно изменить его скорость y, чтобы она упала за переднее колесо, поэтому мне нужно изменить его значение x, чтобы оно оставалось на том же истинном расстоянии за колесом, теперь это значение y будет быть неправым, так как он оказывается на полу.
Несколько дней ломал мне мозги и офисы, можете помочь, пожалуйста?