Я работаю над своей первой нетривиальной игрой на C ++ и уже несколько дней сражаюсь с причудливыми гейзенгами и тому подобным. Это совсем не весело для меня, потому что это не логично. (По крайней мере, не для меня, так как я совсем не хардкор, когда дело доходит до более эзотерических, низкоуровневых вещей.) Это очень расстраивает, потому что некоторые ошибки можно «исправить», поместив произвольные window.draw()
или же std::cout
звонки. Я думал, что проблема заключалась в свисающих указателях, и это все еще может быть, но я думаю, что прояснил их. Прямо сейчас проблема заключается в том, что сущности думают, что могут умереть, когда я касаюсь моей мыши в верхней части экрана, несмотря на то, что нет кода, который велел бы им это делать. (На самом деле, нет кода, удаленно связанного с положением мыши и y = 0.) Во всяком случае …
Я думаю, что я сузил проблему (или по крайней мере одну проблему) до одной строки кода, и я думаю, что могу исправить ошибку, немного изменив архитектуру. Но я хочу, чтобы это был опыт обучения, и я не знаю, почему это происходит. Вот что я считать происходит.
У меня есть суперкласс GameEntity с подклассом Soldier, который также является Launcher (который наследует из ничего). Я думаю, что это множественное наследование является частью проблемы, потому что класс Launcher имеет метод запуска с параметрами GameEntity. Таким образом, я думаю, что было бы возможно рекурсивно вызвать метод запуска, если GameEntity передал в метод является пусковая установка. Я только что понял, что это, вероятно, происходило в какой-то момент, так как игра зависала в методе запуска. По сути, я хочу знать, вызывает ли этот потенциал рекурсии из-за полиморфизма и множественного наследования странные проблемы, и почему. Пока я не знаю, что я делаю, я буду намного более консервативен с полиморфизмом и указателями.
Действительно, любые предложения будут очень полезны. Спасибо!
Похоже, у вас есть проблема с четким определением ответственности и сотрудничества ваших классов. Выбор наследования должен следовать из этих отношений, найденных в дизайне.
Вы можете добавить поле для целей отладки, launchable
и проверьте, что ваш Launcher
запускает только те вещи, которые можно запустить. Также проверьте, что ваш Launcher
Сами объекты не запускаются. Как побочный эффект, это мешает вам запустить себя.
Других решений пока нет …