22 Сентября 2024, 08:44:28
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Quest3D > Программирование > OO?!
OO?!
(Прочитано 37791 раз)
  1 2 [3] 4
Печать
anval | *** | Постоялец | Сообщений: 148 | «Ответ #30 10 Августа 2009, 14:37:38 »
Re: OO?! |
30
Всем привет.Разбираюсь с примером Патрикаhttp://forum.quest3d.com/index.php?topic=67133.0

Не могу понять как сделать ObjectUpdate-Override.Если в стандартной схеме все просто-прилепил интерфейс object к любому объекту - override update и делай ,что хочешь,то тут идет ссылка на него.
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #31 10 Августа 2009, 21:43:09 »
Re: OO?! |
31
Если тебе не хватает метода Update, то дорисуй его в интерфейсе Object.
Просто тут объект уже разделен на некоторые составляющие части. Отделяют логику отрисовки объекта от некоторых ресурсов с помощью которых будет отрисован данный объект. Для того чтобы ресурсы можно было подгружать динамически. В данном примере ресурс -- это некая геометрия с некой текстурой и настройками материала. Логика -- это место положения объекта. Object решает в каком месте ему отобразить свою модельку и вызывает метод render у своей модельки с определённым координатами. Важно понимать что вызов 3D Object ченела это просто вызов функции отрисовки геометрии с указаными параметрами: матрица положения, матрица смещения, перечень сюрфейсов(где каждый сюрфейс это тоже структура неких параметров собранных вместе). Сколько раз ты вызовеш 3D Object ченел, столько раз будет выполнена отрисовка.
Если тебе захочется например сделать так чтоб твой объект умел переключать емиссив цвет у своей модельки, ну там для подсветки при наведении мышкой. То надо будет у метода render из IModel интерфейса добавить параметр emissive vector и в каждой подгружаемой модельке приклеить этот параметр в нужном месте. А вот в логике Object-а уже проверять не наведена ли мышка сейчас на него, и рендерить свою модельку с соответствующим параметром.
anval | *** | Постоялец | Сообщений: 148 | «Ответ #32 11 Августа 2009, 08:39:49 »
Re: OO?! |
32
Привет.Меня инересует Updete-Override т.е.например,разное движение бокса и тора.Т.е.в обычной схеме в интерфейсе iObject я воткннул движение для бокса.И этот интерфейс прилепил к боксу.К тору я воткнул этот же интерфейс,но с Upd-override и приделал свое движение.Здесь же ,видимо,надо слепить отдельные интерфейсы для каждого типам объектов.
mixey | ** | Пользователь | Сообщений: 74 | «Ответ #33 12 Сентября 2009, 18:29:13 »
Re: OO?! |
33
Позвольте задать несколько вопросов по теории, дабы лучше все понять!  Улыбающийся

1) Насколько я понял, то такой странный канал под названием THIS отражает принцип Полиморфизма в ОО? Вопрос собственно такой, правильно ли я понял и можно ли объяснить как это работает, а то чтот не догоняю. Ведь по идее он не нужен, так как объекты определенного класса и так знают, что они это они, а не другие!  Веселый

2) По идее ОО подход можно применить и без набора инструментов для работы с ОО (просто будет не удобно и долго, что не оправдает ОО)? Ведь это же просто метод такой или я чего-то не догоняю и есть какая-то великая тайнаСтроит глазки
redis | ** | Пользователь | Сообщений: 89 | «Ответ #34 18 Сентября 2009, 15:31:26 »
Re: OO?! |
34
Здраствуйте уважаемые квестовцы, я могу даже разрешить себя отпинать ради получения ответа на свой нубски-ламерский вопрос, чем различаетсе array между ОО ? Конкретно интересует сложность освоения, гибкость использования, удобство использования и производительность (FPS)
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #35 18 Сентября 2009, 18:59:54 »
Re: OO?! |
35
1) Насколько я понял, то такой странный канал под названием THIS отражает принцип Полиморфизма в ОО? Вопрос собственно такой, правильно ли я понял и можно ли объяснить как это работает, а то чтот не догоняю. Ведь по идее он не нужен, так как объекты определенного класса и так знают, что они это они, а не другие!  Веселый

THIS это всегда ссылка на тот класс инстанс у которого вызывается этот метод
_Методы_ определённого класса итак знают ссылки на свои объекты только в языках высокого уровня. Им эта ссылка передаётся как неявный параметр, доступ к нему можно получить с помощью ключевого слова this. Просто когда ты обращаешься к методу не указывая у какого класс инстанса её надо вызвать, то компилятор сам подставляет вызов у себя. Так же и со свойствами.
В квесте же нету компилятора как такового, и никто за тебя там сам ничо не подставит, поэтому надо явно указывать у кого ты вызываешь метод.

2) По идее ОО подход можно применить и без набора инструментов для работы с ОО (просто будет не удобно и долго, что не оправдает ОО)? Ведь это же просто метод такой или я чего-то не догоняю и есть какая-то великая тайнаСтроит глазки

Тут ты абсолютно прав
mixey | ** | Пользователь | Сообщений: 74 | «Ответ #36 06 Октября 2009, 18:02:39 »
Re: OO?! |
36
Скажите, чем отличается элемент интерфейса Function: ChannelCaller от  Channel Caller ? Непонимающий
Denil-Tornado | **** | Старожил | Сообщений: 313 | «Ответ #37 06 Октября 2009, 18:16:02 »
Re: OO?! |
37
а где ты его нашёл?

Я знаю что Function: ChannelCaller исползуется для сборки ОО
А Channel Caller используется для зборки голого проекта
mixey | ** | Пользователь | Сообщений: 74 | «Ответ #38 06 Октября 2009, 19:32:41 »
Re: OO?! |
38
Может я чо не так написал, ну вот на скринах покажу:

* Снимок1.PNG (16.76 Кб, 383x331 - просмотрено 2134 раз.)

* Снимок2.PNG (12.21 Кб, 270x331 - просмотрено 2139 раз.)
Denil-Tornado | **** | Старожил | Сообщений: 313 | «Ответ #39 06 Октября 2009, 20:00:33 »
Re: OO?! |
39
В первом случае ты назначаешь функцию работы, а во воторм ты чисто используешь канал.
« Последнее редактирование: 06 Октября 2009, 20:05:13 от Denil-Tornado »
mixey | ** | Пользователь | Сообщений: 74 | «Ответ #40 06 Октября 2009, 21:04:08 »
Re: OO?! |
40
Конечно уже готовиться справка по ОО, но вопросов у меня много, не могу ждать!  Веселый
В общем был бы очень благодарен, если бы мне на пальцах объяснили зачем нужны так называемые Сеттеры и Геттеры.
А еще есть вопрос такого плана - как мне для объектов одного класса, использующих какую-либо функцию, сделать так чтобы эта функция была разной для каждого конкретного объекта... Ну тут хотя бы в общих чертах...
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #41 06 Октября 2009, 21:48:45 »
Re: OO?! |
41
Экземпляры одного и того же класса не могут иметь разные функции, только данные, в зависимости от которых функция уже может срабатывать по разному.
Разными функции могут быть у одного и того же интерфейса используемого в разных классах.
Если тебе надо чтоб у двух объектов одна и та же функция работала по разному, то создай им разные классы. Определи нужный тебе интерфейс в обоих этих классах, и определи нужную тебе функцию для каждого класса. Когда потом будешь использовать экземпляры этого класса, то обращаться будешь всё так же через общий для них интерфейс, как если бы это был один и тот же класс.

Что касается геттеров и сеттеров, то тут сложнее)) В первую очередь это ограничение для самого себя -- ты устанавливаешь чё можно делать с твоим объектом через этот интерфейс, а чё нельзя. И во вторую очередь ты позволяешь классу контролировать то как именно будет происходить то что можно.
Самый простой пример -- класс который рисует строку на экране, и у него есть сеттер для строки. Когда надо рисовать строку на экране, то класс будет вызывать ченел Textout каждый фрейм со строкой из свойств объекта и прочими такими параметрами. Но если захочется оптимизировать работу этого класса, то нужно будет сделать рендер этой строки в текстуру при изменении строки, а потом в каждом фрейме выводить эту текстуру. Textout тяжелее чем CopyImage. Соответственно ты просто в сеттере добавляешь функционал рендера строки в текстуру. При этом интерфейс не меняеться, правила его использования тоже. Тебе не нужно будет менять все места где у тебя использовался твой класс, достаточно будет поменять только реализацию интерфейса, в одном месте.
Надеюсь ответил на твой вопрос.
mixey | ** | Пользователь | Сообщений: 74 | «Ответ #42 06 Октября 2009, 22:40:41 »
Re: OO?! |
42
Ого! Пасиба Огромное! Мега Информативный ответ!
А срабатывание функции в зависимости от данных объекта делается обычной логикой (ну то есть switch, expression) или есть какие-то особенные прием?
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #43 15 Октября 2009, 18:03:45 »
Re: OO?! |
43
Вопрос не в тему, но быстра ли организация ОО? каким образом она компилируется? создаются ли при этом лишние интерфейсы ?

И стоит ли смотреть на Луа скрипт, для загрузок моделей?
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #44 15 Октября 2009, 20:59:32 »
Re: OO?! |
44
я вобщем не совсем понял про скорость организации ОО -- если ты спрашиваешь о скорости создания ОО структуры то тут от опыта зависит. Компилируеться она как и всё в квесте на лету, или тут я тоже не понял о чём речь. Интерфейсы, ну только те что ты создаёш сам...

Применение ОО не отменяет использования других фич квеста, в том числе и луа, это просто способ организации программы. Я пользуюсь луа для загрузки цгр файлов и для вызова паблик ченелов потом из таких файлов
 
  1 2 [3] 4
Печать
 
Quest3D - Русскоязычное сообщество > Quest3D > Программирование > OO?!
Перейти в: