Сохранен 81
https://2ch.hk/b/res/86716883.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Аноним 20/02/15 Птн 10:19:19 #1 №86716883 
14244167591520.jpg
C++ тред.
Опять я. У меня возникла проблема. Есть класс AbstractObject. От него наследуется класс AirplaneObject. У класса AirplaneObject есть метод shootRockets();. В классе AbstractObject есть массивvector AbstractController'ов. С помощью наследования от этого класса я хочу создавать контроллеры, которые потом буду подключать к объектам. Что-то вроде скриптов лол. В данном случае -хочу создать контроллер, который будет вызывать метод shootRockets(); каждые 5 секунд. Как мне сделать, чтобы я мог получить доступ к объекту из контроллера? Могу добавить в метод update аргумент с типом AbstractObject, но каждый раз кастовать его в нужный тип я заебусь. В джаве есть прекрасная возможность - generic types. Пишешь T extends AbstractObject и при наследовании указываешь, какой тип должен быть у T. И он обязательно должен быть расширенным от AbstractObject. Как реализовать такое в C++? Прочитал про шаблоны - с ними такого сделать нельзя.
Аноним 20/02/15 Птн 10:20:31 #2 №86716947 
14244168314540.jpg
Бампаю приколами.
Аноним 20/02/15 Птн 10:20:44 #3 №86716962 
И хули ты забыл в /b/ макака?
Аноним 20/02/15 Птн 10:20:57 #4 №86716977 
14244168573980.jpg
Аноним 20/02/15 Птн 10:20:59 #5 №86716981 
>>86716883

*parent используй. /thread
Аноним 20/02/15 Птн 10:21:13 #6 №86716994 
>>86716962
Тут быстрее.
Аноним 20/02/15 Птн 10:21:30 #7 №86717011 
>>86716981
Нет, подробнее.
Аноним 20/02/15 Птн 10:22:03 #8 №86717038 
14244169239980.jpg
Аноним 20/02/15 Птн 10:22:32 #9 №86717061 
14244169527440.jpg
Аноним 20/02/15 Птн 10:23:06 #10 №86717082 
14244169868880.jpg
Аноним 20/02/15 Птн 10:23:38 #11 №86717115 
14244170185850.png
Аноним 20/02/15 Птн 10:24:01 #12 №86717131 
14244170419740.jpg
Аноним 20/02/15 Птн 10:24:11 #13 №86717140 
>>86716883
> даунина не знает про родителя
Чёт вголос мда...
Аноним 20/02/15 Птн 10:24:25 #14 №86717152 
>>86717011

https://rsdn.ru/forum/cpp/305848.all

Вот тут вроде норм объяснено.
Аноним 20/02/15 Птн 10:29:42 #15 №86717417 
>AbstractObject
Назови просто Object или лучше Entity.
>AirplaneObject
Просто Airplane. Пользователи твоего фреймворка и так поймут что все классы должны наследоваться от Object, так везде. Это слово Object тут просто не нужно.
>AbstractController
Если у тебя есть классы с названиями содержащими "Controller", "Manager", "Provider" и так далее, это признак плохого дизайна. Нужно переработать его так, чтобы все классы отражали какие-то ощутимые сущности.
У тебя пиздец там какой-то напридуман. Лучше выкинь это всё и сформулируй задачу на русском языке.
Аноним 20/02/15 Птн 10:29:56 #16 №86717434 
Зачем тебе этот петушиный язык? Пиши на Джаве, будь илитным
Аноним 20/02/15 Птн 10:32:37 #17 №86717564 
14244175574490.png
Вот, даже примерную картинку набросал. Как сделать без перекастования AbstractObject в AirplaneObject?
Аноним 20/02/15 Птн 10:33:16 #18 №86717595 
Нахуя тебе в AbstractObject "контроллеры" для всех подклассов? Это же абстрактный объект, он ничего не должен знать о потомках. Не логичнее ли связывать контроллеры с конкретными дочерними классами.
Аноним 20/02/15 Птн 10:33:41 #19 №86717615 
>>86717434
Он быстрее. Если тут у меня 400 обновляющихся объектов дают 20 фпс, то на джаве 20фпс дают уже 100 обновляющихся объектов.
Аноним 20/02/15 Птн 10:36:23 #20 №86717752 
>>86717595
Из всех контроллеров можно выделить что-то абстракное. Например, я хочу выделить метод update(), который будет почти одинаковым для всех контроллеров.
Аноним 20/02/15 Птн 10:37:31 #21 №86717811 
>>86717564
Во-первых нельзя полиморфный объект передавать по значению, потому что у тебя копируется только та часть объекта, которая принадлежит к AbstractObject, а все члены, добавленные в AirplanObject у тебя отвалятся, что приведет к распидорашиванию памяти. Передавать надо по ссылке (AbstractObject& object, double delta). Алсо, всегда вместо float используй double.
Аноним 20/02/15 Птн 10:38:22 #22 №86717847 
>>86717417
> Пользователи твоего фреймворка и так поймут что все классы должны наследоваться от Object
Нет. AbstractObject - это объекты, которые будут присутствовать в игре. У них есть свой Entity и SceneNode, а так же набор контроллеров.
Аноним 20/02/15 Птн 10:40:18 #23 №86717942 
shootRockets
>launchMissiles, ёба
Аноним 20/02/15 Птн 10:41:02 #24 №86717976 
>>86717942
Ебло стяни, валет
Аноним 20/02/15 Птн 10:41:36 #25 №86718004 
14244180967720.png
>>86717811
Алсо вот исправленная версия. Недоглядел, когда первую рисовал. Может, ты это имел ввиду?ссылка со здёздочкой же
Аноним 20/02/15 Птн 10:42:11 #26 №86718033 
>>86717976
у АНГЛОГОВОРЯЩЕГО пилорахи ВОЗМУЩЕНИЕ
Аноним 20/02/15 Птн 10:42:22 #27 №86718046 
>>86718004
И вместо точки ->, конечно же.
Аноним 20/02/15 Птн 10:43:43 #28 №86718099 
14244182235140.png
>>86718046
Кароче блядь вот финальный вариант.
Аноним 20/02/15 Птн 10:45:13 #29 №86718166 
>>86718033
> пилорахи
Бедолага ты успокойся
Ато по клавишам уже не попадаешь
Аноним 20/02/15 Птн 10:45:42 #30 №86718189 
>>86718099
Хуйня какаято
Аноним 20/02/15 Птн 10:45:53 #31 №86718201 
>>86718004
Нет, это по указателю. По указателю тоже можно, но не желательно.
Аноним 20/02/15 Птн 10:45:56 #32 №86718204 
14244183567660.jpg
Не тонем.
Аноним 20/02/15 Птн 10:46:38 #33 №86718242 
>>86718099
Чет всё равно непонятна за дизайн.
Если есть АiroplaneСontroller и АbstrractController, в схеме нет ограничения, что АiroplaneСontroller будет только у Аiroplane. Чому Controller - внешний по отношению к Object?
Аноним 20/02/15 Птн 10:47:03 #34 №86718257 
>>86718201
Почему не желательно?до сегодняшнего дня думал, что ссылка и указатель - одно и то же
Аноним 20/02/15 Птн 10:48:30 #35 №86718313 
>>86718242
А за этим я буду следить сам. Другого дизайна не придумал. Может я долбоёб и изобретаю велосипед, когда всё сделано за меня?
Controller - это контроллер для объекта. Каким он ещё должен быть?
Аноним 20/02/15 Птн 10:50:52 #36 №86718418 
14244186523050.png
Аноним 20/02/15 Птн 10:51:38 #37 №86718446 
14244186987910.jpg
Аноним 20/02/15 Птн 10:52:28 #38 №86718484 
14244187485150.jpg
Аноним 20/02/15 Птн 10:53:02 #39 №86718508 
14244187828230.jpg
Аноним 20/02/15 Птн 10:53:48 #40 №86718548 
14244188288920.jpg
Аноним 20/02/15 Птн 10:55:23 #41 №86718623 
14244189238210.jpg
Аноним 20/02/15 Птн 10:56:31 #42 №86718668 
14244189915190.jpg
Аноним 20/02/15 Птн 10:56:51 #43 №86718685 
14244190112590.jpg
Заканчиваются приколы. Аноны, выручайте.
Аноним 20/02/15 Птн 10:57:47 #44 №86718739 
14244190678240.jpg
Аноним 20/02/15 Птн 10:59:10 #45 №86718802 
>>86716883
Ты объясни языком что тебе сделать надо, а то хуету какую-то лепишь, в крестах так никто не пишет.
Аноним 20/02/15 Птн 10:59:13 #46 №86718806 
>>86717615
>400 обновляющихся объектов дают 20 фпс

Охуеть какая у тебя неповоротливая хуета. Ты бы там посидел, пооптимизировал обновлялки своих самолетов с ракетами.
Аноним 20/02/15 Птн 10:59:16 #47 №86718808 
>>86716883
Ты, конечно - мудак. Но книгу посоветую: Приемы объектно-ориентированного проектирования. Паттерны проектирования.
Э. Гамма, Р. Хелм, Р. Джонсон и Д. Влиссидес

И да, описывай задачу не как ебанутый первак, которой ток на пашкале то и может писать. (ну или бейск, лол)
Аноним 20/02/15 Птн 10:59:59 #48 №86718834 
>>86718313
А почему не реализовывать контроллер этот твой внутри объекта?
Аноним 20/02/15 Птн 11:02:12 #49 №86718933 
>>86718418
Откуда эта пикча? Это ж биологичка наша бывшая
Аноним 20/02/15 Птн 11:02:28 #50 №86718948 
14244193487720.jpg
>>86718834
А если мне потребуется 2 разных контроллера для 2 AirplaneObject'ов?
Аноним 20/02/15 Птн 11:03:07 #51 №86718971 
>>86718802
>>86718808
А хули ещё нужно? Я даже набросал схему. По ней даже я всё понял.
Аноним 20/02/15 Птн 11:03:37 #52 №86718989 
>>86718948
Ну так перегрузи метод внутри класса или задай параметр, который модифицирует поведение контроллера, иначе какой смысл в объектах, если ты для них внешнее апи создаёшь?
Аноним 20/02/15 Птн 11:04:43 #53 №86719049 
>>86718989
Задать параметр, который модифицирует поведение контроллера? А если мне нужно будет в корне поменять это поведение? Через case чтоли все возможные варианты перечислять? Нет, лучше подключить другой контроллер.
Аноним 20/02/15 Птн 11:06:12 #54 №86719122 
>>86718971
UML учи. OMT... ну и вообще. Вигерс в помощью. Проектируй сначала, потом гавнокодь.
Аноним 20/02/15 Птн 11:07:16 #55 №86719185 
>>86718971
Русским языком задачу поставь, на грушах. Всем похуй на твои контроллеры.
Аноним 20/02/15 Птн 11:08:23 #56 №86719248 
>>86718948
Тебе нужна техника под названием double-dispatching.
Аноним 20/02/15 Птн 11:12:53 #57 №86719482 
14244199732210.png
>>86719185
Блядь. Есть дерево, на котором растут яблоки и груши. Червяки могут залезать как в яблоко, так и в грушу. Но для яблок свои червяки, а для груш - другие. У червяков можно взять абстрактную часть и вынести в отдельный класс. То есть все они являются членами класса AbstractChervyack. Для яблок YablokoChervyack, для груш - GrooshaChervyack. Груши с яблоками от этого охуели и решили избавиться от червяков. У червяка с классом YablokoChervyack есть метод UitiIzYablocka, а у червяка с классом GrooshaChervyack есть метод UitiIzGrooshi. Яблоки и груши не хотят кастовать класс AbstractChervyack в классы YablokoChervyack и GrooshaChervyack. Они хотят, чтоб было всё сразу заебись. Как избавиться от этого каста?
Аноним 20/02/15 Птн 11:17:47 #58 №86719745 
14244202670750.jpg
Аноним 20/02/15 Птн 11:18:37 #59 №86719790 
>>86719482
Прочитав эту хуету с грушами, у меня только один вопрос: что нетак с
абстрактчервяк.уйти(абстрактовощ)
Соответственно если у тебя овощ главный
абстрактовощ.избавитьсяот(абстрактчерваяк)
Аноним 20/02/15 Птн 11:18:40 #60 №86719793 
14244203208180.jpg
Аноним 20/02/15 Птн 11:21:06 #61 №86719926 
>>86719790
Из груши червяк уходит спокойно на лапахони у него есть а из яблока - пританцовывая. Эти методы в корне разные. И только червяки знают, как избавить от себя яблоки и груши.
Аноним 20/02/15 Птн 11:22:58 #62 №86720020 
14244205783550.jpg
Аноним 20/02/15 Птн 11:23:43 #63 №86720063 
14244206232270.jpg
Аноним 20/02/15 Птн 11:24:19 #64 №86720096 
14244206598360.jpg
Аноним 20/02/15 Птн 11:25:15 #65 №86720149 
14244207153870.jpg
Аноним 20/02/15 Птн 11:27:48 #66 №86720307 
Ну где же вы? Даже на грушах объяснил, всё равно нихуя никто не понял.
Аноним 20/02/15 Птн 11:35:05 #67 №86720739 
14244213051700.jpg
Аноним 20/02/15 Птн 11:36:43 #68 №86720855 
14244214035490.jpg
Блядь, последний прикол. Тонем.
Аноним 20/02/15 Птн 11:38:59 #69 №86720989 
>>86719482
Виртуально унаследуй UitiIzFrukta для червяков
Аноним 20/02/15 Птн 11:42:27 #70 №86721189 
>>86720989
Был такой вариант. Я его даже реализовал. Но потом мне захотелось, чтобы у объекта было несколько контроллеров. Один его, например, крутит, а второй двигает вперёд. Можно объеденить в 1, но можно и так.
Аноним 20/02/15 Птн 11:44:40 #71 №86721325 
>>86721189
Так сделай методы крутить и двигать для червей. Какие проблемы?
Аноним 20/02/15 Птн 11:45:59 #72 №86721400 
>>86721325
Нет, я хочу большой гибкости.
Аноним 20/02/15 Птн 11:47:28 #73 №86721485 
>>86720855
просто system error какая то, иисус-жид, гитлер ненавидел жидов, он знает толк в траленге
Аноним 20/02/15 Птн 11:47:30 #74 №86721488 
>>86721400
Хуй поймешь что тебе надо. Объясняй нормально.
Аноним 20/02/15 Птн 11:49:18 #75 №86721590 
>>86721488
Хочу, чтобы объект контролировался извне контроллерами, которые лежат в его массиве контроллеров.
Аноним 20/02/15 Птн 11:51:52 #76 №86721727 
>>86721590
Делай простые методы для червей (крутить-вертеть или что тебе там надо). Вызывай их в методе контроллера. Метод контроллера вызывай извне.
Аноним 20/02/15 Птн 11:52:43 #77 №86721781 
>>86721727
А как мне передавать в контроллер нужного червя? Я могу передавать только абстрактного.
Аноним 20/02/15 Птн 11:55:56 #78 №86721975 
>>86721781
Ебт. Написал же про виртуальные методы. Если не знаешь, что это, почитай. А крутить-вертеть можно без наследования (все черви одинаково крутятся).
Аноним 20/02/15 Птн 11:56:20 #79 №86721995 
>>86721975
*Без виртуализации
Аноним 20/02/15 Птн 12:47:46 #80 №86725008 
Прочитал тред и обзмеился с опа-дауна.
Таким даугам, с мозгом засраным хуетой в духе ПОТЕРНЫ ЕТА КРУТА ЧЕМ БОЛЬЛЕ ПОТЕРНОВ ТЕМ ГИБЧИ И АРХИТИКТУРНИИ
AbstractSingletobProxyFactoryBean не забудь имплементировать для каждого объекта сцены, только потом не удивляйся, что фпс упадет с 20 до 10, такова цена за гибкость.
Такой говнокод никогда не сможет работать быстро, тольет plain old data является cache-friendly для процессора. Погугли про data oriented design, вот так делают серьезные игры с хорошим бытродействием, в dice например.
Аноним 20/02/15 Птн 14:20:39 #81 №86730531 
А чо, схема опа имеет права на жизнь. Пусть с ней все будет криво и будет тормозить, но работать будет. От кустов, оп, ты тут не отделаешься. В твоем случае предпочти динамик касты, потому что у тебя слаботипизированно получилось.
comments powered by Disqus

Отзывы и предложения