Понедельник, 25 Ноября 2024, 15:09

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблемы с путем к файлу
daffy-doomerДата: Вторник, 06 Января 2015, 13:09 | Сообщение # 1
частый гость
Сейчас нет на сайте
Использую библиотеку DevIL
Код
void LoadTexture(char st1[250],int i)
{
char name[250];
char filename[200]="gfx\\";
GetModuleFileNameA(NULL, name, 250);

for(int j=strlen(name);name[j]!='\\';j--)
name[j]='\0';

strcat(name, filename);
TextureImage texture10;

strcpy(filename,name);
strcat(filename,st1);
puts(filename);//
ilLoadImage((ILstring)filename);
int err = ilGetError();
if(err != IL_NO_ERROR)
{
cout << "Error an loading textures!" << endl;
getch();
exit(1);
}
...

Рядом с исполняемым файлом есть папка gfx, в ней лежит изображение, название которого прописывается.

Код именно на путь до файла объявляемого в методе. Puts показывает путь, а сама библиотека его не видит... В чем ошибка?

Добавлено (06 января 2015, 13:09)
---------------------------------------------
При использовании прописания прямого пути, ничего не изменяется.
Но стоит вместо IlLoadImage() вписать IlLoad, вылетает вот такое, вместе с крашем:


Сообщение отредактировал daffy-doomer - Вторник, 06 Января 2015, 13:10
MrFiringДата: Среда, 07 Января 2015, 08:08 | Сообщение # 2
был не раз
Сейчас нет на сайте
Цитата daffy-doomer ()
char name[250];
char filename[200]="gfx\\";
GetModuleFileNameA(NULL, name, 250);

for(int j=strlen(name);name[j]!='\\';j--)
name[j]='\0';

strcat(name, filename);
TextureImage texture10;

strcpy(filename,name);
strcat(filename,st1);


Зачем столько заморочек для того чтобы получить путь?

В аргументах функции можно использовать указатель на char.
Поскольку папка с текстурами находится в директории с экзешником то путь можно записать так:

"./gfx/texture1.png"

Код

#include <sstream> //Класс для форматирования строк.

void LoadTexture(const char* FileName, int i)
{
      const char* dir = "./gfx/";
          
      stringstream str; //Создаём поток ввода-вывода строки

      str << dir << FileName; //Добавляем наши строки в конец строки потока

      ilLoad(IL_PNG, str.str().c_str()); // с помощью str.str().c_str() получаем строку
          
       int err = ilGetError();     
       if(err != IL_NO_ERROR)     
       {     
          cout << "Error an loading textures!" << endl;     
          getch();     
          exit(1);     
       }     

        ...
}


Сообщение отредактировал MrFiring - Среда, 07 Января 2015, 08:22
daffy-doomerДата: Четверг, 08 Января 2015, 22:49 | Сообщение # 3
частый гость
Сейчас нет на сайте
MrFiring, да, метод не работает biggrin
"Error an loading textures!" выводит это)))
А вот из консоли puts(FileName)
Код
test.png

P.S. у меня юникод)))
OpenGOOДата: Пятница, 09 Января 2015, 00:51 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Вот так еще проще было бы
Код
const string dir = "./gfx/";
string path = dir + FileName;


Какую конкретно ошибку возвращает функция ilLoadImage?

Если у тебя винда. Совпадает ли путь где находится исполняемый файл, с путём который показывает в консоле эта команда
Код
system("cd");
?
Для неё надо добавить заголовочный файл cstdlib


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
falcowareДата: Пятница, 09 Января 2015, 01:34 | Сообщение # 5
старожил
Сейчас нет на сайте
daffy-doomer, ну если уникод то char испльзовать нельзя. Используй char_t
OpenGOOДата: Пятница, 09 Января 2015, 02:07 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата falcoware ()
Используй char_t

Что за тип такой, может wchar_t?


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
daffy-doomerДата: Пятница, 09 Января 2015, 13:49 | Сообщение # 7
частый гость
Сейчас нет на сайте
OpenGOO, falcoware либа DevIL просто отказывалась читать даже прямой путь к файлу. Юзаю FreeImage happy
12334qДата: Пятница, 09 Января 2015, 17:09 | Сообщение # 8
был не раз
Сейчас нет на сайте
100% верное средство
Код


std::string    str = "sfx//";
str += name;

//использование str

str.c_str();

/////////////////////////////////////////////
//для широких символов (wide)  wchar_t*
//std::wstring    wstr = "sfx//";



если нет то значит проблема в использовании движка. может он символы как то не так читает не в той кодировке
хотя там проблема с указателем. было бы проще если IDE была на английском языке


Сообщение отредактировал 12334q - Пятница, 09 Января 2015, 17:35
MrFiringДата: Пятница, 09 Января 2015, 19:57 | Сообщение # 9
был не раз
Сейчас нет на сайте
Цитата 12334q ()
Код
"sfx//"

Если уж на то пошло,то тут нужны два задних слеша либо вообще один обычный.Или я чего-то не знаю?


Сообщение отредактировал MrFiring - Пятница, 09 Января 2015, 20:01
12334qДата: Пятница, 09 Января 2015, 20:22 | Сообщение # 10
был не раз
Сейчас нет на сайте
MrFiring, так можно и одну /
у мена и так и так по разному всё работает главное \\ два раза чтоб эскейп последовательности не было

........ хотя \\ это и есть эск.последовательность чтобы вывести обратный слэш


Сообщение отредактировал 12334q - Пятница, 09 Января 2015, 20:26
MrFiringДата: Пятница, 09 Января 2015, 20:45 | Сообщение # 11
был не раз
Сейчас нет на сайте
Цитата 12334q ()
у мена и так и так по разному всё работает главное \\ два раза чтоб эскейп последовательности не было


"//" я такой записи еще не видел.Следовательно принял за неправильную..

Цитата 12334q ()
........ хотя \\ это и есть эск.последовательность чтобы вывести обратный слэш


Это я знаю.
12334qДата: Пятница, 09 Января 2015, 21:34 | Сообщение # 12
был не раз
Сейчас нет на сайте
Цитата MrFiring ()
..

у вас двоеточие упало
  • Страница 1 из 1
  • 1
Поиск:

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