Пятница, 19 Апреля 2024, 21:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Задать в классе действие для любого объекта другого класса
Задать в классе действие для любого объекта другого класса
smach1Дата: Среда, 06 Июня 2012, 15:48 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте. Нужна помощь в следующем вопросе: есть ли возможность задать взаимодействие одного класса с любым объектом другого класса. Например есть класс block и класс man. Если использовать в классе block имя конкретного объекта класса man то это ясно и просто. А вот если создать 100-200 или гораздо больше объектов класса man то этот метод явно не подходит. Есть ли интересно решение моего вопроса?
ganstermДата: Среда, 06 Июня 2012, 16:09 | Сообщение # 2
частый гость
Сейчас нет на сайте
Массив или другая подобная структура поможет решить.
В классе man делаете массив block'ов и взаимодействуете с нужным
MatouДата: Среда, 06 Июня 2012, 16:09 | Сообщение # 3
Исходный коТ
Сейчас нет на сайте
Если я правильно понял то что тебе нужно, то надо создать в классе список указателей на объекты к которым ты собираешься посылать запросы (т.е. вызывать методы этих объектов). Этот список делают динамическим, т.е. по мере жизни объекта класса в него добавляются соответствующие указатели.




Сообщение отредактировал Matou - Среда, 06 Июня 2012, 16:10
smach1Дата: Четверг, 07 Июня 2012, 13:32 | Сообщение # 4
был не раз
Сейчас нет на сайте
Нее, я неправильно сформировал вопрос. Массив указателей - это ясно. Но у меня существует не один экземпляр man, а несколько. И десятки тысяч элементом в массиве класса block. Проверять столкновение или иное взаимодействие каждого объекта класса man со всеми возможными координатами массива класса block - ресурсоемко как то. А вот если задать прямо в классе block проверку на столкновение с объектом класса man и соответствующее действие - получается гораздо более экономично. Но вот тут то и встает проблема того, что я могу проверить лишь столкновение с конкретным объектом класса, имя которого уже знаю заранее.
Если только экземпляр man тоже сделать массивом... Надо подумать над этим. А вообще хотелось бы узнать о возможности оперировать с абстрактным экземпляром класса
RUNGOGET2THECHOPAHДата: Понедельник, 25 Июня 2012, 07:17 | Сообщение # 5
участник
Сейчас нет на сайте
smach1,
Если отталкиваться от твоего примера (man - игрок, block - препятствие, например), то можно вести учет близлежащих блоков (в качестве одного из полей класса man есть массив или список блоков, находящихся в радиусе N от игрока) и проверять столкновения только с ними. То, как вести этот "учет", зависит от того, как ты хранишь в памяти эти самые блоки.
mendozaДата: Понедельник, 25 Июня 2012, 15:47 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Создавай динамический массив существующих объектов block, и взаимодействуй с ними всеми путем итератором.

Where's your meds?
AnarchystДата: Понедельник, 25 Июня 2012, 15:48 | Сообщение # 7
Chaotic Evil
Сейчас нет на сайте
По-моему держать массив блоков в классе игрока - довольно странный подход. Я бы сделал отдельный класс, который будет хранить текущий уровень, массив блоков, врагов и т.п.

Good отстой, Neutral - параша, Evil, хой, победа наша!
RUNGOGET2THECHOPAHДата: Понедельник, 25 Июня 2012, 17:29 | Сообщение # 8
участник
Сейчас нет на сайте
Anarchyst, я не совсем правильно выразился. Массив не блоков, а указателей на них или их координат. И именно на блоки, которые рядом с игроком, а не на все. Как вариант - метод класса man, выдающий массив указателей на близлежащие блоки (если знаем координаты игрока, и у всех блоков размеры одинаковые, то можно реализовать метод, который вообще константное время работает). Таким образом не надо проверять столкновения со всеми десятками тысяч препятствийДоступно только для пользователей.
AnarchystДата: Понедельник, 25 Июня 2012, 17:30 | Сообщение # 9
Chaotic Evil
Сейчас нет на сайте
RUNGOGET2THECHOPAH, а, ну так да.

Good отстой, Neutral - параша, Evil, хой, победа наша!
smach1Дата: Воскресенье, 08 Июля 2012, 12:47 | Сообщение # 10
был не раз
Сейчас нет на сайте
Интересно, почему никому не пришло в голову, что это клон Super Mario?) Успех Minecraft многим вскружил голову, но глупо все же рассчитывать начинающему программисту на повторение этого успеха, когда даже основ не знаешь. Нет, я всего лишь заменил абстрактные задачи на воплощение в жизнь конкретного проекта, очень упрощенного.
RUNGOGET2THECHOPAH, спасибо за развернутый ответ)
Форум игроделов » Программирование » C/C++ » Задать в классе действие для любого объекта другого класса
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг