Саша123
> Спасибо, вот это я и хотел узнать) Откуда информация?
Сложно сказать, из личного опыта наверное :)
> Такой вопрос. Можно ли на вики C4
> http://www.terathon.com/wiki/index.php/Main_Page встроить опцию "русский язык"?
> Я бы мог начать переводить статьи потихоньку.
Предложи им это на форуме, скорее всего народу будет интересно.
bazhenovc
> Предложи им это на форуме, скорее всего народу будет интересно.
Отправил запрос непосредственно автору пока)
К сожалению, английский хромает.
Такой вопрос.
Как генерировать пользовательское событие или сообщение, которое можно где-то перехватить?
Я так понимаю, для перехвата сообщения существует класс Observer, о вот как создать своё сообщение, которое можно было бы перехватить?
Дело в том, что вот есть самодельная кнопка, хотелось бы как-то получать информацию о её нажатии.
Всё оказалось достаточно просто. Кроме Observer есть также и Observable.
И в то же время достаточно сложно.
1. Объявить объект-наблюдатель.
2. Инициализировать его.
3. Сообщить о нём объекту-наблюдаемому.
Саша123
> Всё оказалось достаточно просто. Кроме Observer есть также и Observable.
> И в то же время достаточно сложно.
> 1. Объявить объект-наблюдатель.
Как вариант, указателем на наблюдателя в свойствах контроллера (или чего там должно получать инфу).
> 2. Инициализировать его.
Как вариант, в конструкторе контроллера.
> 3. Сообщить о нём объекту-наблюдаемому.
Функций SetObserver или AddObserver
DanielSky
> Это в у менеджеров можно узнать.
Сделал приблизительно как ты и говорил. А про менеджеры поподробней, пожалуйста, как освободишься.
Саша123
> Сделал приблизительно как ты и говорил. А про менеджеры поподробней,
> пожалуйста, как освободишься.
Если нет проблемы быстродействия, то можно у менеджера выяснить указатель на объект, который надо оповестить или наоборот, на который надо среагировать.
Например, если надо при обновлении контроллера запросить состояние элемента управления, то можно вычислить указатель на него через TheInterfaceMgr->DetectWidget(position).
Переделал демо SimpleBall немножко - убрал стены, увеличил размеры пола. Потолок почему-то не могу выделить и убрать. На сценографе тоже не наблюдается. К чему бы это?
Саша123
> Переделал демо SimpleBall немножко - убрал стены, увеличил размеры пола.
> Потолок почему-то не могу выделить и убрать. На сценографе тоже не наблюдается.
> К чему бы это?
Быть не может. Возможно ты его удалил, а потом случайно сделал undo и он на сценографе спрятался в конец списка, а выделить не можешь потому, что случайно нажал ctrl-H и спрятал его. :)
DanielSky
> Возможно ты его удалил, а потом случайно сделал undo и он на сценографе спрятался в конец списка, а выделить не можешь потому, что случайно нажал ctrl-H и спрятал его. :)
Да, спасибо, всё так и было) В списке он был, просто я его не заметил, а выделить не мог, потому что Ctrl-H)
Рисую программно текстуру, вывожу её на Widget. Линии получаются сглаженные. Как отключить сглаживание конкретно для этого случая?
Так. Проблема решена. Если выводить по целым координатам, сглаживаться не будет.
Позиция Widget имеет три координаты. Однако при Z != 0.0f на экране его не видно (строго говоря, при z == -1.0f его видно).
Я так понимаю, что для отрисовки интерфейса используется ортогональная проекция. Как сделать так, чтобы можно было видеть всю ось Z?
Не могу зарегистрировать контроллер для модели.
Действую так:
/// Tank.h class TankController : public Controller
/// Game.h ModelRegistration *tankModelReg = nullptr; ControllerReg<TankController> *tankControllerReg = nullptr; Model *tank = nullptr;
/// Game.cpp Game::Game() { tankModelReg = new ModelRegistration( kModelTank, "Tank abrams", "abrams", C4::kModelPrecache, kControllerTank); tankControllerReg = new ControllerReg<TankController>( kControllerTank, "Tank abrams"); tank = Model::Get( kModelTank); tank->Preprocess( ); tank->Update( ); }
/// CommandAction : public Action CommandAction::ModelSelect() if( tankModel) { tankController = static_cast<TankController*>( tankModel->GetController( )); if( !tankController->IsSelected( ) && tankController->IsPlayerControlled( )) { /// Вот здесь в tankController->IsSelected() выясняется, что объект TankController не существует. tankController->SetSelected( true); } }
ModelSelect вызывается кликом по модели (проверено). При этом tankModel вполне валиден, а tankController == 0. Я так понимаю, что для tankModel не назначен контроллер, но вроде же я зарегистрировал его в Game::Game().
Наверное, что-то ещё надо сделать? Тем более в конструктор TankController отладчик не заходит О_о.
Ларчик просто открывался. Прежде чем сделать GetController(), оказывается, нужно сделать SetController().
Как получить вершины С4::Model ?
Конкретно стоИт задача нормализовать модель - вписать её в куб со стороной 1.0. Оно-то можно применить какой-нибудь SetTransform(). Только вот чтобы применять, нужно узнать scale, а для этого нужно подсчитать BoundingBox(), а для этого нужно вершины знать. Где их брать?
Тема в архиве.