Terathon Software C4Форум

Вопросы по С4 (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
19:35, 2 ноя 2014

Саша123
> Спасибо, вот это я и хотел узнать) Откуда информация?
Сложно сказать, из личного опыта наверное :)

> Такой вопрос. Можно ли на вики C4
> http://www.terathon.com/wiki/index.php/Main_Page встроить опцию "русский язык"?
> Я бы мог начать переводить статьи потихоньку.
Предложи им это на форуме, скорее всего народу будет интересно.

#16
20:01, 2 ноя 2014

bazhenovc
> Предложи им это на форуме, скорее всего народу будет интересно.
Отправил запрос непосредственно автору пока)
К сожалению, английский хромает.

#17
20:51, 8 ноя 2014

Такой вопрос.
Как генерировать пользовательское событие или сообщение, которое можно где-то перехватить?
Я так понимаю, для перехвата сообщения существует класс Observer, о вот как создать своё сообщение, которое можно было бы перехватить?
Дело в том, что вот есть самодельная кнопка, хотелось бы как-то получать информацию о её нажатии.

#18
22:47, 8 ноя 2014

Всё оказалось достаточно просто. Кроме Observer есть также и Observable.
И в то же время достаточно сложно.
1. Объявить объект-наблюдатель.
2. Инициализировать его.
3. Сообщить о нём объекту-наблюдаемому.

#19
23:44, 8 ноя 2014

Саша123
> Всё оказалось достаточно просто. Кроме Observer есть также и Observable.
> И в то же время достаточно сложно.
> 1. Объявить объект-наблюдатель.
Как вариант, указателем на наблюдателя в свойствах контроллера (или чего там должно получать инфу).
> 2. Инициализировать его.
Как вариант, в конструкторе контроллера.
> 3. Сообщить о нём объекту-наблюдаемому.
Функций SetObserver или AddObserver

+ Показать
#20
0:06, 9 ноя 2014

DanielSky
> Это в у менеджеров можно узнать.
Сделал приблизительно как ты и говорил. А про менеджеры поподробней, пожалуйста, как освободишься.

#21
0:16, 9 ноя 2014

Саша123
> Сделал приблизительно как ты и говорил. А про менеджеры поподробней,
> пожалуйста, как освободишься.
Если нет проблемы быстродействия, то можно у менеджера выяснить указатель на объект, который надо оповестить или наоборот, на который надо среагировать.
Например, если надо при обновлении контроллера запросить состояние элемента управления, то можно вычислить указатель на него через TheInterfaceMgr->DetectWidget(position).

#22
0:25, 9 ноя 2014

Переделал демо SimpleBall немножко - убрал стены, увеличил размеры пола. Потолок почему-то не могу выделить и убрать. На сценографе тоже не наблюдается. К чему бы это?
Изображение

#23
0:47, 9 ноя 2014

Саша123
> Переделал демо SimpleBall немножко - убрал стены, увеличил размеры пола.
> Потолок почему-то не могу выделить и убрать. На сценографе тоже не наблюдается.
> К чему бы это?
Быть не может. Возможно ты его удалил, а потом случайно сделал undo и он на сценографе спрятался в конец списка, а выделить не можешь потому, что случайно нажал ctrl-H и спрятал его. :)

#24
10:21, 9 ноя 2014

DanielSky
> Возможно ты его удалил, а потом случайно сделал undo и он на сценографе спрятался в конец списка, а выделить не можешь потому, что случайно нажал ctrl-H и спрятал его. :)
Да, спасибо, всё так и было) В списке он был, просто я его не заметил, а выделить не мог, потому что Ctrl-H)

#25
12:36, 9 ноя 2014

Рисую программно текстуру, вывожу её на Widget. Линии получаются сглаженные. Как отключить сглаживание конкретно для этого случая?
Изображение
Так. Проблема решена. Если выводить по целым координатам, сглаживаться не будет.

#26
14:35, 9 ноя 2014

Позиция Widget имеет три координаты. Однако при Z != 0.0f на экране его не видно (строго говоря, при z == -1.0f его видно).
Я так понимаю, что для отрисовки интерфейса используется  ортогональная проекция. Как сделать так, чтобы можно было видеть всю ось Z?

#27
22:02, 20 ноя 2014

Не могу зарегистрировать контроллер для модели.
Действую так:

/// 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 отладчик не заходит О_о.

#28
22:38, 20 ноя 2014

Ларчик просто открывался. Прежде чем сделать GetController(), оказывается, нужно сделать SetController().

#29
11:25, 27 ноя 2014

Как получить вершины С4::Model ?
Конкретно стоИт задача нормализовать модель - вписать её в куб со стороной 1.0. Оно-то можно применить какой-нибудь SetTransform(). Только вот чтобы применять, нужно узнать scale, а для этого нужно подсчитать BoundingBox(), а для этого нужно вершины знать. Где их брать?

Страницы: 1 2 3 4 Следующая »
Terathon Software C4Форум

Тема в архиве.