GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (117 стр.)

Сообщения на форуме пользователя Andrey (117 стр.)

Мультитекстурирование - OGL - вывод текста?21 янв. 200816:59#4
XoR
а зачем запрещать?
может так прокатит?
glBindTexture(GL_TEXTURE_2D, 0);
Эффективная сортировка21 янв. 200816:20#4
BeInspired
std::sort(YY, YY + sizeof(YY) / sizeof(YY[0]));
Консоль?20 янв. 20081:09#50
Smrad
>Я так понял с 4мя параметрами типа float?
Шаблонный класс вводить. Иди учти матчасть. Или писать 2D игр не может понять что такое шаблоны? Та-же все просто написано.
Для  следующих методов с четырьмя параметрами(ЛЮБОГО ТИПА И ЛЮБЫХ КОМБИНЦИЙ ТИПОВ) подходящих для консольной команды, уже делать не нужно ничего.
>Если да (а я думаю, что да), то я предлагаю тебе пока забросить программирование и идти почитать комбинаторику.
плохо думаешь иди учи матчасть
жжошь пиши исчо,  Тебе видать дальше 2D игр тяжко рассуждать.
Консоль?20 янв. 20080:43#47
Smrad
интересно а где помощь по команде? это очень важно для пользователя. Ты не сможешь написать это в функции. execute
или будешь писать в забиндинном методе?
>А как у забиндить такой метод:
>void Animation::RenderStretch(float, float, float, float);
ввести новый класс с 4 параметрами.
Консоль?18 янв. 200819:30#33
Smrad
>Я согласен, но Andrey выкладывает первым :)
а чего там слабо? мож глянешь что добавишь а потом будешь загонять я круче всех boost рулит?
хорошо я приведу пример 1 команды с 1 переменной. И ка как добавляется. Опущено добавление переменных при выполнение команды.
цеплять еще boost не хочу устраивает такая реализация.
class Console {
...
  class ConsoleCommand {  // базовый класс консольной команды
  protected:
    typedef boost::any any_t;
    // имя команды
    std::string commandName;
    // массив имен типов
    std::vector<std::string> nameTypes;
    // число переменных
    unsigned int numVars;
    // массив указателей на переменные
    std::vector<any_t> ptrVars;
    // Помощь
    std::string help;
    template<typename T>
    T& GetVariable(any_t &val) const
    {
#if defined (_DEBUG) || defined (EXCEPTIONS)
      try {
        // надежное преобразовангие типов
        return *boost::any_cast<T>(&val);
      }
      catch(boost::bad_any_cast& ex) {
        Console::GetSinglenton().AddMessage(Console::ERROR_MESSAGE, "%s%s",
          StdMessage[Console::CPP_EXCEPTION], ex.what());
        static T t;
        return t;
      }
#else
      // быстрое преобразование типов
      return *boost::unsafe_any_cast<T>(&val);
#endif
    }
    template<typename T>
    const T& GetVariable(const any_t &val) const
    {
#if defined (_DEBUG) || defined (EXCEPTIONS)
      try {
        // надежное преобразовангие типов
        return *boost::any_cast<T>(&val);
      }
      catch(boost::bad_any_cast& ex) {
        Console::GetSinglenton().AddMessage(Console::ERROR_MESSAGE, "%s%s",
          StdMessage[Console::CPP_EXCEPTION], ex.what());
        static T t;
        return t;
      }
#else
      // быстрое преобразование типов
      return *boost::unsafe_any_cast<T>(&val);
#endif
    }
  public:
//...
    // выполенеие команды
    virtual bool ExecCommand() const = 0;
//...
    // добавление переменной в массив
    virtual void AddPtrVariable(void *ptrVar) {};
//....
    ConsoleCommand();
    virtual ~ConsoleCommand();
  };
  template<typename ClassName, typename VarType, typename ReturnType>
  class Command1 : public ConsoleCommand {
  public:
    // указатель на функцию котрая вызывается при запуске команды
    // ReturnType - возвращаемый тип
    // VarType - тип переменной
    // ClassName - имя класса
    // указатель на объект класса
    ClassName *object;
    // указатель на метод класса
    ReturnType(ClassName::*ptrFunc) (VarType var);
    // выполенение команды
    virtual bool ExecCommand() const
    {
      if (!object) {
        return false;
      }
      // если нет переменных
      if (ptrVars.empty()) {
        return false;
      }
      // если возвращает
      ReturnType var = (object->* ptrFunc)(GetVariable<VarType>(ptrVars[0]));
      // если не bool
      if (typeid(ReturnType) != typeid(bool)) {
        String res;
        // вывод в строку
        res << var << "\n";
        Console::GetSinglenton().AddMessage(Console::INFO_MESSAGE, "%s", res.c_str());
      }
      return true;
    }
//....

  };
  // добавление команды в консоль с 1 переменной
  // ReturnType - возвращаемый тип
  // VarType* - тип переменной
  // ClassName - имя класса
  template<typename ClassName, typename VarType, typename ReturnType>
  void AddCommand(const std::string &CommandName, ReturnType (ClassName::*Adress) (VarType), ClassName *object, const std::string &Help)
  {
    // проверка на дубль
    if (FindCommand(CommandName)) {
      return;
    }
    // создать новую команду
    ConsoleCommand *command = new Command1<ClassName, VarType, ReturnType>;
    Command1<ClassName, VarType, ReturnType> *command1 = static_cast<Command1<ClassName, VarType, ReturnType> *>(command);
    // присвоить адресс
    command1->ptrFunc = Adress;
    // установить строку помощи
    command1->SetStringHelp(Help);
    // установить указатель на объект
    command1->object = object;
    // добавление команды
    AddCommand(CommandName, command);
    // записать тип
    command->SetNameType(typeid(VarType).name(), 0);
  };
...
использование.
  // Установка угла обзора
  AddCommand(cmdname, &RenderBase::SetFov, render, help);
[code]
Будет ли Opengl 3.0 поддерживать возможности DirectX10?18 янв. 200819:01#15
SNVampyre
>Только вот фишка в том, что драйверы от АТИ не поддерживают ОГЛ 2.1 для своих видеокарт
начиная с 7.12 100% поддержка OpenGL 2.1 в том числе GLSL 1.20
Консоль?18 янв. 200817:51#27
gorus13
я так не говорил. но то что ты говорил то-же не стоит. Просто если чео обидел.
Консоль?18 янв. 200817:49#25
gorus13
ну ну... написал такую которая не тянет ничего?
Консоль?18 янв. 200817:46#24
Aneroun
Я сделал так.
В движке есть классы. Они имеют методы которые делают какие-то задачи.
пример в классе Render есть метод EnableDebug(bool flag) вполне хороший кандидат на консольную команду. зашел в консоль набрал "enabledebug 0" или "enabledebug 1"и все. Render в режиме отладки.
Есть базовый класс ConsoleCommand. там есть несколько вирутальных методов к примеру ExecCommand(). Еще есть по добавлению переменных после парсинга строки с параметрами.
далее я сделал несолько шаблонных классов ConsoleCommand0-ConsoleCommand8 у них разные варинаты указателей на методы классов(у кого-то 2 параметра, или метод константный)
переопределил в каждом классе команды метод ExecCommand и там я вызываю по указателю нужный метод с передачей ему параметров(если есть)
в чем плюcы? не нужно писать функцию для каждой команды. Можно забиндить нужный метод существующего класса.
Ну и в консоле есть метод AddCommand перегруженный шаблонный.
Каких ключевых слов нет в ваших С++ проектах? :).18 янв. 200817:26#262
Smrad
>Ты помнишь чем закончилась твоя попытка написать казуалку с использованием HGE?
у меня не было особого желания заниматься этим
а ты помнишь много ли ты помог 3D проекту?
давай уж не будем ворошить старое?
>some->renderRect( int(x), int(y), int(height), int(width) );
как минимум ты не найдешь участок кода с преобразованием типов что-бы в дальнейшем пересмотреть архитектуру что-бы избавится олт этого.
имея такой код
some->renderRect( static_cast<int>(x), static_cast<int>(y), static_cast<int>(height), static_cast<int>(width) );

тв можешь поиском "static_cast", "const_cast", "reinterpret_cast", "dynamic_cast" пересмотреть код в сторону избавления от преобразований типов.
Консоль?18 янв. 200817:22#21
Smrad
>Дык... так ты же сам участвовал в скелетонах.
кто проект начал? кто изначально там написал что невозможно писать было по нормальному? а как я могу успеть разобраться за короткое время в твоей мега хардкодной архитектуре в которой при подмене текстур нужно перекомпиливать проект? я писал по такому-же принципу как и ты. Сделал все что мог. И по другому переделать не было не времени не желания.
>Там и помереемся, у кого консоль длиннее.
только вот мне делать больше нечего
Здесь больше ничего флудить не буду.
Консоль?18 янв. 200816:49#18
Aneroun
полностью что-ли?
Консоль?18 янв. 200816:33#16
Smrad
>Я просто попросил разрешения. У тебя ведь консолька хорошая? Человеку поможешь.
ты то попросил разрешения явно указав что так делать не нужно.
да вполне устраивает теперь еще редактирование текста есть. ну не говоря про полный доступ ко всему необходимому по изменению параметров.
обратится тогда конечно дам.
>3)Методы которые начинаются с "set" или "update" не должны быть константными :). Молодец, пометил все как mutable. Наверное, ты где-то в книжке прочитал, что >const - это круто.
слуш может хвтатит без понтов или забыл про убогий код скелетонов дак давай я скажу на весь форум что сам не авторитет что-бы к другим цепляться.
помнишь как thow кидал? типа круто где то в книжке исключения есть и это круто. а как хардкодил имена и размеры квадратиков?
>4) А что это за классы у тебя Command1...Command8?
содержат указатели на вызываемые методы классов. Сделаны разные варинаты шаблонов под разное число параметров и под разные методы.
>5) Я ни черта не понял твоем коде и не потому, что я такой тупой ;).
Не знаю почему ты не понял там коментариев дофига. Другие то поняли :) давно еще эта консоль была взята другим человеком в удаленном проекте. Просто тот человек сам писал 3D движок и всетаки он понял.А писателям 2D игр на HGE + модный boost видать этого не дано.
Знаешь ты сам первым начал неуважать других участников форума. Правила форума читал ?
CyberZX
>так ребята и девчата. закончили межличностные разборки. если нечего сказать по теме, то идите мимо. или разбирайтесь в других местах.
прошу прощения но сам свидетель кто первый начал.
Консоль?18 янв. 200815:03#12
Smrad
ты аргументируй а потом пантуйся ^^
Консоль?18 янв. 200814:40#9
dex
>и всетаки шейдеры тут не причем =)))
ну да... что-то я вообще ступил второпях

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр