34 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 357
|
|||||||||||
1 | |||||||||||
Проблемы, связанные с ContentManager и загрузкой/выгрузкой контента31.12.2010, 13:40. Показов 10304. Ответов 106
Метки нет (Все метки)
Краткая сводка:
1) Рабочий пример загрузки текстуры 2) RootDirectory нельзя изменить после присвоения. Однако это не мешает инициализировать её абсолютным путём, например: "C:\\" 3) Пример загрузки в случае RootDirectory = "Content" (расширения при загрузке не указываются):
__А) создавать ContentManager на каждый ассет. __Б) создать свой класс. наследуя от ContentManager 6) Способ загрузки эффектов, текстур, моделей и т.д. в реальном времени (динамическая компиляция). 7) Чтобы игра не зависала при длительных загрузках, загружать нужно в отдельном потоке, используя классы Thread/Task и т.д. ___________________________________________________________ Помогите, не пойму в чем проблема, в участке кода spriteTexture = content.Load<Texture2D>(@"all\textures\qwerty1"); выскакивает исключение Error loading "all\textures\qwerty1". File not found. Хотя в проект добавлен каталог all и в нем textures и внутри файл qwerty1.jpg, и через проект изображение открывается. Я даже задавал полный путь - то же самое пишет.
0
|
31.12.2010, 13:40 | |
Ответы с готовыми решениями:
106
Проблемы с выгрузкой файлов Проблемы с выгрузкой информации в Excel Настройки Биос, связанные с загрузкой? Отслеживание изменений URL на сайте с динамической загрузкой контента |
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
01.02.2012, 22:03 | 21 |
Как раз по теме. Я делаю редактор. Идея такая. Временно загрузил модель (текстуру и прочее), подошла, сохраняешь в ту папку, с которой будешь брать уже скомпилированную модель (.xnb).
Программа должна сама знать.Теоретически, это необходимо только для файлов с моделями (меши). Здесь два варианта, либо сделать свой импортер, который будет читать .fbx и сохранять список файлов текстур для этой модели. Либо научиться читать сам файл .xnb, и при копировании считывать с него файлы текстур. Но как прочитать эти файлы?
0
|
za5
|
01.02.2012, 22:52
#22
|
0
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
02.02.2012, 14:17 | 23 |
Не понял, какой вариант можно без импортера?
Все таки хотелось бы автоматизировать процесс, какие файлы надо копировать. А то недоработок в XNA еще много, не может найти файл текстуры, а пишет совсем другую ошибку.
0
|
02.02.2012, 16:00 | 24 |
здесь не нужно изменять импортер для того чтобы получить список текстур. просто в новую папку компилировать и считывать список текстур, потом просто считывать список текстур при наличии txt.
а... всё. понял. ты же имеешь ввиду ещё и свои текстуры. тогда да. просто три строчки в твоём импортере и готово.
0
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
02.02.2012, 17:46 | 25 |
Понятно, что, как всегда, приходится изворачиваться и находить пути решения. Но, чем дальше в глубь XNA, тем "лес" становится темнее, дремучее и не понятнее.
Например, в том же примере, создает файл model.xnb и к нему текстуру cat_0.xnb из файла текстуры cat.tga Сразу возникает вопрос, где найти название этого файла в проге (cat_0.xnb) и как формируется имя файла (ведь оно не совпадает с cat.tga)? Все перерыл, а намека нет. Если я буду использовать ту же текстуру для другой модели, то что произойдет, он создаст новое имя файла, в котором будет та же текстура и придется два раза одно и то же грузить? Подскажи пожалуйста какие, а то совсем уже не понимаю логики разработчиков XNA.
0
|
za5
|
|||||
03.02.2012, 00:50
#26
|
|||||
Не по теме: добавь вот эту строчку после // Build this new model data.
... есть подозрение, что эта цифра добавляется на случай предотвращения совпадений имён при наличии одноимённых текстур с разными расширениями, может предположить, что нет одноимённых текстур т.е. всегда будет добавляться только _0. хотя нет... тут же ещё сложный вопрос как заставить отменить повторную загрузку( ведь исходника "ModelProcessor" нет. Добавлено через 9 минут ещё намёк может быть найден путём просмотра FBXImporter.dll
0
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
03.02.2012, 04:26 | 27 |
В общем, сырая эта XNA. Только для примитивных игр.
Например, ContentManager может очистить только весь загруженный контент (модели, текстуры и прочее). Получается, что я не могу удалять выбранные мною контенты, если они мне не нужны в реадкторе игры. Наверное надо попробовать еще SlimDX.
0
|
03.02.2012, 21:40 | 28 |
вчера смотрел декомпилятором этот fbximporter.dll contentprocessor.dll кучу процессоров для составных частей модели пересмотрел кучу классов contentwriter'ов увидел как всё это сложно а также увидел место где в итоге всё сохраняется. т.е. самому здесь что-либо поменять пока вряд ли можно. для распаковки этого fbx, там юзается встроенная в дллку fbxsdk та самая, которую можно скачать. так что есть посмотреть на fbxsdk?
и ещё одна непонятка: почему не хочешь грузить одну и ту же текстуру, что в двух fbx'ах два раза например. и как часто в разных fbx'ах оказываются тестуры с одинаковыми именами?... здесь видимо просто надо как-то получить список текстур с помощью fbxsdk (если не подходит тот способ который я описал в одной строчке и который сохраняет нам список скомпилированных текстур , дающий нам право при перемещении какой-то модели не переносить её текстуру, которая также используется соседней моделью - т.е. будем знать, что её надо скопировать либо удалить вообще, в случае если в директории не осталось моделей юзающих эту текстуру) имхо не стоит судить о хне только потому, что чем-то неустроила работа с контентом.) может потом что-нибудь добавят в этом плане. кто знает.
1
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
03.02.2012, 22:11 | 29 |
Контент менеджер имеет только contentManager.Unload();, которой удаляется весь загруженный контент. Просто другого метода в нем не предусмотрено для удаления контента.
Так что и нечего писать. Добавлено через 3 минуты По поводу текстур. Тут трудно предположить что и когда будет использоваться, а если еще разные люди делают. Программа должна работать не зависимо кто как создает модели и на чем. Можно одну и ту же текстуру грузить 100 раз, вот только для производительности как это будет выглядеть? Добавлено через 10 минут Как я вижу работу редактора игры. Кто-то сделал модель, дал мне ее, я подключил ее в редактор, посмотрел, сохранил в списке. Потом новая модель. Потом сотая модель. Если два разных человека для двух моделей использовали одну и ту же текстуру, то грузиться она будет в память дважды. Но тут еще коллизия наступит. Модели с текстурами будут сохраняться в одной папке. Первая модель компилируется и создает текстуру, добавляя "_0", вторая добавит, наверное уже "_1" к названию текстуры. В итоге я сам запутаюсь, они разные или одинаковые.
0
|
04.02.2012, 21:47 | 30 | |||||
http://create.msdn.com/en-US/sample/xnb_format
http://create.msdn.com/en-US/s... extensions Добавлено через 3 минуты другого метода и не нужно. если ты говоришь об вот этом куске
1
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
|
04.02.2012, 22:17 | 31 |
Смущает следующее:Model = contentManager.Load<Model>("Model"); - добавляется конкретная модель.
Далее contentManager может добавить еще несколько моделей, например (не буду обрамлять в тег кода), Model1 = contentManager.Load<Model>("Model1");, Model2 = contentManager.Load<Model>("Model2"); Да я могу обнулить любую модель, Model1 = null; Но как при этом себя поведет contentManager при следующей загрузке Model1 = contentManager.Load<Model>("Model1");? В коде показано, что modelViewerControl.Model = null; и contentManager.Unload(); Выходит contentManager где-то держит список загруженного контента. Но метода Remove() для конкретного метода нет. Ведь не случайно разработчик не ограничился только первой строчкой modelViewerControl.Model = null; Скорее всего при закладывании логики в XNA не подумали, что придется грузить контент динамически, а не только через компилирование. Потому, что если только через компилирование, то понятно, что весь контент загружается на стадии компиляции и предусматривать выгрузку одного какого-то контента нет смысла.
0
|
05.02.2012, 23:25 | 32 | |||||
в принципе да. у меня тоже ошибку выдал когда попытался кое-что сделать. может тогда через List<ContentManager> т.е. каждая модель будет ассоциирована со своим как ContentManager? и ещё:
порылся в методах и увидел некоторую protected readasset, честно говоря, исходя из её описания можно написать свой контэнт мэнэджэр наследуя и переопределяя
Добавлено через 23 часа 25 минут отсюда очевидный вывод: если мы не можем чего-либо сделать, то это не значит, что это нельзя сделать )
1
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
||||||||||||||||
06.02.2012, 11:35 | 33 | |||||||||||||||
Тогда еще подскажите как правильно удалять с
0
|
07.02.2012, 21:43 | 34 |
вот это:
List<IDisposable> disposableAssets = new List<IDisposable>(); заменить на Dictionary<IDisposable, string> disposableAssets = new Dictionary<IDisposable, string>(); а дальше ясно. вызываем Dispose() потом удалять из loadedassets, потом из dispassets по имени. или так не работает?
0
|
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
|
||||||
08.02.2012, 03:19 | 35 | |||||
Проблема в том, что как добавить?
Вот здесь:
И еще, я проверял, на одну запись модели записывается несколько IDisposable объектов. Что там происходит в ReadAsset, не понятно.
0
|
13.06.2012, 23:41 | 36 | |||||
Вроде все правильно...
вот ошибка... как исправить?
0
|
22 / 22 / 1
Регистрация: 17.07.2011
Сообщений: 53
|
|
14.06.2012, 01:24 | 37 |
скорее всего в LoadContent перенести эту строчку
0
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|
02.08.2012, 06:23 | 38 |
День добрый. Два вопроса, как бы альтернатива друг другу:
1. Как загрузить шейдер из .fx файла без контент менеджера? 2. Как создать экземпляр контент менеджера без класса Game (в простом WindowsForms проекте), если есть только GraphicsDevice?
0
|
brony
77 / 57 / 4
Регистрация: 02.01.2012
Сообщений: 521
|
|
02.08.2012, 17:58 | 39 |
Мне кажется было бы легче к xna game проекту подключить формы стандартного окна чем наоборот
0
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|
02.08.2012, 18:06 | 40 |
Не в данном случае. Нужно именно без Game.
0
|
02.08.2012, 18:06 | |
02.08.2012, 18:06 | |
Помогаю со студенческими работами здесь
40
Подскажите совет как разобраться с загрузкой разного контента Оптимизация и доработка выпадающего меню с загрузкой, посредством Ajax, контента Проблемы с загрузкой Проблемы с загрузкой HDD Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |