В последнее время я пытаюсь создать то, что всегда хотел, но никогда не имел ни навыков, ни времени - компьютерную игру. Если быть точнее, дань уважения/клон одной из многих моих любимых игр. Чтобы начать с чего-то простого, я решил создать классическую 2D-платформу на основе серии Castlevania.
Будучи программистом на Ruby, я решил использовать Gosu. Затем я решил, что не хочу изобретать велосипед, поэтому я собираюсь использовать Chipmunk.
Через несколько дней у меня возникли необъяснимые проблемы с обнаружением столкновений. Я добавил функции рисования граничных рамок, просто чтобы посмотреть, что, черт возьми, происходит.
Как видите, Бельмонт сталкивается с блоками стен, которых он и близко не касается. Поскольку демонстрационная игра, включенная в gosu gem, работает нормально, должно быть, я делаю что-то не так, я, вероятно, не совсем понимаю, как определяется и добавляется в пространство полигон Shape
. Я почти уверен, что на самом деле это не то место, где я его рисую.
В игре есть общедоступный репозиторий, так что вы можете увидеть, как определены стены (Brush < Entity
) и игрок (Player < Entity
), и что они действительно имеют простую форму прямоугольного многоугольника. Стены не добавляются в пространство (они разбойничьи), добавляется только игрок. Я пытался отладить игру и посмотреть, где находится body
, но все выглядело нормально.
https://github.com/ellmo/castellvania
Игрок падает медленно, но вы можете управлять им стрелками вверх/влево/вправо. Кнопка с тильдой (~
) показывает ограничивающие поля, а поля столкновений должны быть всегда видны.
Мне нужна помощь, чтобы понять, что я делаю неправильно.