gloomyBrain, если я правильно понимаю, что то, что вы описываете будет работать примерно таким образом:
То есть начинается итерация, происходят следующие действия:
1. Я знаю, насколько мне нужно сдвинуть персонажа, на vx и vy.
2. Я беру длину его предполагаемого пути и, начиная с конечной точки, "шагаю" до текущего положения, на один пиксель. При каждом шаге я проверяю, пересечет ли персонаж (в иллюстрации это точка) клетку. Если не пересекает — обрываю цикл и подправляю его vx и vy так, чтобы при их применении персонаж (точка) точно не пересек клетку.
3. Применяю vx и vy к координатам персонажа.
И вот получается траббл, он изображен в самой правой стороне. Красным показан путь точки при данном алгоритме. Зеленым — то, что мне кажется правильным и, одновременно, то, что у меня не получается.
В чем я ошибаюсь, объясните пожалуйста?