| Задать в классе действие для любого объекта другого класса | 
|  | 
| 
| 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, спасибо за развернутый ответ)
 |  |  |  |  |