Четверг, 28 Ноября 2024, 03:53

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Результаты поиска
AlexeyBondДата: Воскресенье, 06 Января 2013, 20:53 | Сообщение # 1 | Тема: Пожалуйста, проверьте код на грубые ошибки
был не раз
Сейчас нет на сайте
Saitei, исключительно средствами glut - никак.
Для вывода текста существуют различные способы - можно использовать функции WinAPI и wgl, а можно, например, грузить текстуру с нарисованными символами и выводить соответствующие её фрагменты. У NeHe есть несколько уроков на эту тему ( 13, 14, 15, 17 ).
AlexeyBondДата: Воскресенье, 06 Января 2013, 14:28 | Сообщение # 2 | Тема: Пожалуйста, проверьте код на грубые ошибки
был не раз
Сейчас нет на сайте
Цитата (Saitei)
Код
void timer(int = 0)     
{
     display();
     glutTimerFunc(33,timer,0);
}


этого делать не обязательно т.к. ты уже передал glut указатель на функцию отрисовки, и он сам вызовет её когда надо.

Все коды клавиш определены где-то в заголовках винды, и выглядят примерно так: VK_* ( VK_LEFT, VK_ESCAPE etc. ).

По поводу этикета: я склонен считать, что каждый программист имеет право на собственный стиль. Я, например, никогда не пишу названия функций с маленькой буквы, и всегда перехожу на новую строку перед { в начале функции.
Но, думаю, каждый может писать так как ему удобнее, главное соблюдать единство стиля.
AlexeyBondДата: Пятница, 04 Января 2013, 09:59 | Сообщение # 3 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
goldsphere, правильно. Старая функция просто меняла спрайт и выводила его, а новая меняет его, выводит, ждёт, потом снова меняет и выводит, а между сменами спрайтов вывода графики не происходит.
И ещё: пожалуй, задам наводящий вопрос: где вызывается Gfx_EndScene( ) и что она делает?
AlexeyBondДата: Четверг, 03 Января 2013, 22:21 | Сообщение # 4 | Тема: [C++] Считывание матрицы из файла
был не раз
Сейчас нет на сайте
Цитата (netcha)
Теперь просто пустое поле

А что, собственно, было до того?
AlexeyBondДата: Четверг, 03 Января 2013, 22:01 | Сообщение # 5 | Тема: [C++] Считывание матрицы из файла
был не раз
Сейчас нет на сайте
Ну, вроде бы, всё правильно, за исключением
Код
ifstream file("data\\conf\\l_0.t", "r");

правильнее будет так:
Код
ifstream file("data\\conf\\l_0.t", ifstream::in);
AlexeyBondДата: Четверг, 03 Января 2013, 19:15 | Сообщение # 6 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Цитата (goldsphere)
Смысл данного кода, при нажатие на клавишу отобразить на пол секунды другую текстуру и вернуть потом прежнюю.


Похоже, проблема в том, что всё это происходит в течение одного кадра, т.е. один спрайт просто накладывается на другой, и только потом это всё выводится.
AlexeyBondДата: Четверг, 03 Января 2013, 18:03 | Сообщение # 7 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Цитата (goldsphere)
массив должен быть глобальным.


А в чём, собственно, проблема?
Можно же создать глобальный объект для массива, а память выделять только тогда, когда становится известно, сколько её нужно ( при загрузке данных из файла в данном случае ).
Например это можно сделать так:
Код

class Map
{
private:
   int* Data;
   int  sizeX, sizeY;
public:
   Map( )
   :Data(NULL),sizeX(0),sizeY(0)
   {};
   ~Map( )
   {
     if( Data ) delete [] Data;//Если память была выделена, освобождаем её.
   }
   void Alloc( int x, int y )
   {//Выделить память под массив размером x на y
     Data = new int[(sizeX = x)*(sizeY = y)];
   }
   
   int& operator () ( int y, int x )
   {//Получение ссылки на элемент  a[y][x]
     if( (x >= sizeX)||(y>=sizeY) )
       throw;//выход за пределы массива
     return Data[x+sizeX*y];
   }
};

//Объявляем глобальный объект
Map map;
.
.
.
   //Перед записью в массив:
   map.Alloc( newSzX, newSzY );

   //И доступ к элементу:
   map( i, j ) = n;

AlexeyBondДата: Среда, 02 Января 2013, 14:39 | Сообщение # 8 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Цитата (goldsphere)
Принцип в том, что после размер будет браться из файла


В таком случае, использовать шаблон - неправильное решение т.к. аргументы передаваемые в шаблон можно определить только на этапе компиляции ( из исходного кода ), а изменить их во время исполнения невозможно.
В данном случае рекомендую использовать динамическое выделение памяти с помощью оператора new или функций malloc/calloc и имитацию двухмерного массива с использованием одномерного.
AlexeyBondДата: Четверг, 27 Декабря 2012, 11:44 | Сообщение # 9 | Тема: Работа с файлами
был не раз
Сейчас нет на сайте
Похоже, дело в том, что в конце выводимой строки отсутствует завершающий символ ('\0').
В чём точно причина, сказать не могу, но вот ошибки, которые сразу бросаются в глаза:

Код
char* nc = new char[std::strlen(ch1) + std::strlen(ch2)]();

Здесь не выделяется память под тот самый '\0'.

Код
char* tmp = new char();
fgets(tmp,100,f);

Здесь в массив из одного символа записывается сразу 100 (удивительно, что программа вообще работает).

Код
cc("\0",r);

Этот вызов вообще ничего не делает.

И вообще: память используется очень нерационально, как и время( нужно заново разбирать файл чтобы найти каждое следующее значение ).
AlexeyBondДата: Вторник, 25 Декабря 2012, 16:21 | Сообщение # 10 | Тема: Подскажите компилятор
был не раз
Сейчас нет на сайте
Для изучения C++ под Windows больше подходит Microsoft Visual Studio ( версии 2005 Express Edition вполне достаточно ).
При использовании других IDE, в особенности Code::Blocks может возникнуть много проблем с настройкой.
AlexeyBondДата: Суббота, 22 Декабря 2012, 16:58 | Сообщение # 11 | Тема: Загрузка файла в память?
был не раз
Сейчас нет на сайте
Можно, например, так:

Код

int LoadFileToMemory( const char* fileName, char** data )
{
   FILE* f = fopen( fileName, "rb" );
   fseek( f, 0, SEEK_END );
   int sz = ftell( f );
   fseek( f, 0, SEEK_SET );
   *data = (char*)malloc( sz );
   fread( *data, 1, sz, f );
   fclose( f );
   return sz;
};
//Использовать так:
char* modelData;
int size = LoadFileToMemory( "myfile.ply", &modelData );
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг