![]() |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
"Тупых юзеров" в гугле не банят.
Да и к тому же. Это что за "юзер" должен быть, чтоб ему был интересен тест скорости вывода картинок? |
Ответ: Вопросы по XNA.
Я думаю, все играли в столь известную игру как Crimsonland. Не могли бы вы подсказать, каким образом разработчики добились одного интересного эффекта: следа от пули? Интересует именно такая версия, как в этой игре, то есть след прозрачен в том месте, откуда был произведён выстрел, и полностью непрозрачен там, где сейчас расположена пуля.
Скриншот(трафик, 1.4мб) |
Ответ: Вопросы по XNA.
Цитата:
с градиентом белого цвета градация от $FFFFFFFF до $FFFFFF00 Тобеж от абсолютно прозрачного до полностью непрозрачного. 2) Считаем угол от места выстрела до пули 3) Считаем дистанцию от места выстрела до пули 4) Хватаем наш градиентный спрайт за точку (0 ,height * 0.5) *если спрайт горизонтально ориентирован поворачиваем на выведенный ранее угол, скейлим на половину дистанции и двигаем на половину дистанции. На векторах будет даже проще сделать. Но я привык к косинусам синусам :B |
Ответ: Вопросы по XNA.
Спасибо! Метод сложно назвать высокотехнологичным, но думаю по скорости не будет сильно уступать какому-нибудь шейдерному способу.
Правда про векторы теперь можно подробнее? У меня проблема в том, что мне не то что бы привычно делать через синусы и косинусы, а то что я не знаю как можно делать по-другому:) |
Ответ: Вопросы по XNA.
Способ использования спрайта будет намного шустрее чем какими либо шейдерами симуляция шлейфа с неординарным поведением.
Если 3Д, можно тупо создать квад, который будет тянуться до максимальной длины, и иметь текстуру которая будет корректно накладываться чтобы не скукоживаться с растяжкой квада. |
Ответ: Вопросы по XNA.
О, ну тогда тем более хорошо.
Вопрос по векторам еще актуален. |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Новый вопрос. Что такое "this"? Не в переводе с английского, конечно, а в XNA.
UPD И ещё появился вопрос по рандомизации в C#. Как здесь надо описать аналог SeedRnd? Или есть что-то стандартное? Обычный Random не нужен, так как не случайный он совсем. P.S. было бы забавно, если бы Randomize ответил:) . |
Ответ: Вопросы по XNA.
Цитата:
У стандартного рандома в конструкторе по умолчанию сбивание по времени стоит, так что он случайный должен быть. Но можно и указать явным образом число на которое он собъется. Random r = new Random(); int a=r.next(5) (a будит целым числом из множества (0;1;2;3;4)) int a=r.next(3,6) (a будит целым числом из множества (3;4;5)) Ну если хочется задать SeedRnd самому: Random r = new Random(DateTime.Now.Millisecond + DateTime.Now.Second*1000); Но опять же это не обязательно. Кстати заметил недочет. int a=r.next(5,6) выдает только 5. (соответсвенно все верно) int a=r.next(5,4) выдает ошибку времени выполнения. (тоже все правильно) int a=r.next(5,5) выдает только 5. Хотя судя по логике должен выдавать ошибку, кто-то < и <= перепутал, когда писал функцию. =) |
Ответ: Вопросы по XNA.
Спасибо!
Возможно это не ошибка, а фича. a∈[b,c] лучше чем a∈[b,c). |
Ответ: Вопросы по XNA.
Cannot autodetect which importer to use for "World\World1.txt". There are no importers which handle this file type. Specify the importer that handles this file type in your project. Content\World\World1.txt
Не понимаю как решить вот эту проблему, раньше не сталкивался, проблема появилась, когда я начал ресурсы одного проекта перемещать в другой ну в общем со всем кодом, просто я название наугад выбрал и в процессах оно скажем так... неприлично по английски звучало поэтому создал проект с другим именем и все начал перемещать. |
Ответ: Вопросы по XNA.
Возникла проблема с методом GetTexture(). Почему-то, у меня выдаёт на него ошибку, мол такого метода не существует, однако он точно существует.
И ещё. Можно ли как-то применить пиксельный шейдер сразу ко всему экрану, не используя GetTexture? То есть мне шейдёр нужен только для пост-обработки, и GetTexture() как раз то что нужно, но у меня этот метод почему-то не работает:( UPD Узнал в чём проблема. Оказывается, в XNA 4.0 нету метода GetTexture(), вместо этого, сам RenderTarget2D и есть готовая текстура. |
Ответ: Вопросы по XNA.
Нужна помощь с реализацией теней в 2D, а именно в теоритической части. Сам я придумал только один способ, но он должен быть крайне медленным.
В общем, вот в чем моя идея. После того как мы получили рендер сцены, в пиксельном шейдере меняем бэкграунд на белый(даже лучше на прозрачный). На это уйдет первый пасс. Второй пасс уходит на следующие: Для каждого пикселя ищем угол от центра до него(до центра потому что источник света в центре), и зная угол, через синусы и косинусы приравниваем цвет этого пикселя к тому цвету пикселя, что лежит немного дальше. Таким образом, если пиксель рядом с предметом, что отбрасывает тень, то он(пиксель) станет черным. Хотя таким способом тени будут очень короткие, поэтому можно сделать еще один пасс на такую же функцию. Но можно и не делать, если длинные тени не нужны. Ну а потом накладываем на наш рендер то, что у нас получилось. И как это все будет по скорости? И есть ли у вас другие предложения по этой теме? |
Ответ: Вопросы по XNA.
Цитата:
пусть вектор от центра до пикселя x,y, тогда синус - x/sqrt(x*x+y*y), косинус y/sqrt(x*x+y*y) или наоборот А можно ещё лучше. Не искать синус и косинус. взять вектор (x,y), умножить его на 1.005 например и получить координаты чуть более дальнего пикселя (надо ещё прибавить половину ширины и высоты экрана). Правда, по увеличению расстояния от центра экрана тени тоже будут удлиняться |
Ответ: Вопросы по XNA.
А как на HLSL из координат получить вектор?
|
Ответ: Вопросы по XNA.
пара чисел - координаты, float2 уже сами по себе вектор. их можно складывать, умножать и т.п.
Пусть float2 А-вектор до источника, float2 В-вектор до пикселя (их координаты) тогда С = (В-А)*1.01f+А - чуть более дальняя точка от источника света |
Ответ: Вопросы по XNA.
Огромное спасибо!
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Ребята, не подскажите как SpriteSortMode.BackToFront по скорости? Сильно уступает Deffered? А то нужно глубину спрайтам делать, а рисовать их так, чтобы глубина оставалась правильной как-то неудобно.
|
Ответ: Вопросы по XNA.
не сильно уступает. для обычных нужнд хватает с головой. только есть небоьшая особенность - чем слабее комп - тем большая вероятность что спрайты(текстуры) отренжереные на растоянии глубины(>0.02f), на одном месте, будут "моргать"(время от времени будут друг друга перекрывать)
|
Ответ: Вопросы по XNA.
Спасибо! А "два" это к чему относится?:)
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Гм, а нет ли способа этого избежать? Это ведь может сильно надоедать, если всё скакать будет. Или всё же следует рисовать всё по порядку?
З.Ы. для второй прорисовки придётся бегать по большому массиву, так что это действительно нежелательно. |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Не в этом беда. Если говорить про тайлы, то это равносильно тому, что тайлы пересекаются. И в этой ситуации уже ничего не поможет?
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Вложений: 1
Цитата:
|
Ответ: Вопросы по XNA.
Это я к примеру говорил:)
Если говорить о твоей схеме, то проблема в том, что кусты пересекаются. Кусты это отдельный массив, поэтому присваивать каждому кусту отдельную глубину неудобно. |
Ответ: Вопросы по XNA.
Ладно, с этим вопрос решен. Как оказалось, быстрее будет 2 пробега по массиву сделать, чем использовать BackToFront режим.
Теперь у меня возник вопрос про UnloadContent(). Далеко не во всех примерах люди хоть что-нибудь писали в зоне UnloadContent(), поэтому и я ничего не писал. Но сейчас подумал, что если бы все было автоматически, этой зоны бы вообще не было. В общем, необходимо ли выгружать контент при выходе из игры вручную, или XNA самостоятельно справится? |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Спасибо.
Возникло два вопроса. Первый, ответ на который мне очень нужен, и второй, который нужен просто для ознакомления. Если у меня есть вектор позиции игрока и вектор скорости, то для получения новой координаты игрока нужно сложить эти два вектора? Или все же умножить их? Просто если делать с умножением, то ничего не работает из-за того, что если вектор позиции равен 0, то никуда объект не сдвинется. А если складывать, то есть ли в этом смысл? Ведт тогда можно было сразу менять х и у вектора позиции. Второй вопрос связан с 3Д миром. Что из себя представляет LinePick? Каким образом он работает? Я знаю, что это как бы луч который мы пускаем из камеры куда-нибудь, и благодаря нему мы можем узнать много инфы о пикнутом предмете( расстояне до него, его тип и тд). Но как обрабатывается в компьюетере? И еще. Где вообще можно узнать действительно верную информациюо о том, что для чего нужно, как это работает и так далее. Просто сейчас я смутно представляю для чего что в компьютере нужно, а о том как оно работает я вообще ничего не знаю:( Это довольно плохо для программиста, как я считаю. |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Я поэтому и спросил, есть ли в этом смысл.
|
Ответ: Вопросы по XNA.
Цитата:
pos+=speed; тоже самое что pos.X+=speed.X; pos.Y+=speed.Y; но зачем писать больше?:) |
Ответ: Вопросы по XNA.
Зачем так делать? Можно сразу тогда сразу изменять координаты pos на какое-то число. То есть нажата стрелка вверх - уменьшать Y и так далее.
Мне нужно векторное перемещение для того, чтобы не было бага с двойной скорости, когда нажимаешь сразу клавишу вверх и вбок. Знаю как можно это исправить без векторов( Cos45*speed), но это не торт, когда вектора есть. |
Ответ: Вопросы по XNA.
Цитата:
Код:
Float spd = 3f; // Это скорость перемещения. |
Ответ: Вопросы по XNA.
А чем отличается Normalize вектор от обычного?
|
Ответ: Вопросы по XNA.
Цитата:
по сути, тоже умножение на cos45 для твоего случая. |
Ответ: Вопросы по XNA.
Нужна помощь с рисованием текстуры. Максимальное разрешение текстуры 4096x4096. А если мне нужна текстура, в разы больше этой? Как тогда обойти это ограничение?
|
Ответ: Вопросы по XNA.
Рисовать несколько текстур (с) кэп
|
Ответ: Вопросы по XNA.
Не подходит. Неудобно генерировать, а если генерировать криво, мир будет шовным.
|
Ответ: Вопросы по XNA.
Цитата:
PS и не генерируй криво ;) |
Ответ: Вопросы по XNA.
То есть, как я понимаю, все равно придется разбивать все на более мелкие текстуры?
Просто я думал, есть какой-то другой выход. Вот в 3Д же процедурные миры цельными делают, насколько я знаю. |
Ответ: Вопросы по XNA.
Цельными миры не делают, в том же майнкрафте чанки.
|
Ответ: Вопросы по XNA.
Погодите-ка. То есть получается, что от процедурного мира нету толка, раз и его нужно на части разбивать?
|
Ответ: Вопросы по XNA.
Почему нет? Процедурный мир - "бесконечный мир". Разве можно заранее "бесконечный мир" сделать? Плюс есть разнообразие всегда, при старте новой игры.
|
Ответ: Вопросы по XNA.
Ага, с бесконечным и случайным мирами понятно.
Но все же, разве нет хоть какой-нибудь выгоды в использовании процедурного мира по сравнению с обычным, если речь идет не о бесконечных и случайных мирах? Я уверен в том, что по памяти процедурный мир выигрывает. Ведь фактически, нужно хранить лишь переменные, что влияют на генерацию ландашафта для того, чтобы ландшафт все время был одинаковый. Но вряд ли это единственный плюс. |
Ответ: Вопросы по XNA.
Посмотри на карты гугла или яндекса. Тоже все из квадратных ячеек ;)
|
Ответ: Вопросы по XNA.
Вообще тебе надо искать что-то типа gigatexture (megatexture) и стримминг.
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Объемы данных растут просто. Я начинал с жесткого диска в 200Мб, сейчас у меня в сумме 3,5Тб. Если посчитать, то в сравнение с 2Тб мой первый винт имел объем в 10000 раз меньше. А скорость его была в 0,7Мб. - всего примерно в 100-200 раз меньше.
|
Ответ: Вопросы по XNA.
Ясно.
Так, всё же с векторами какие-то проблемы. Код:
{ З.Ы. знаю что дело можно исправить, если добавить Код:
playerSpeed = Vector2.Zero; |
Ответ: Вопросы по XNA.
playerSpeed.Normalize(); от нулевого вектора будет непонятно что, это же приводит вектор к единичной длине. А так ты сначала делаешь вектор по X = -5, а потом снова ноль и вот результат.
|
Ответ: Вопросы по XNA.
Можно ли сделать двумерный массив списков? Ну или одномерный.
Если да, то как? |
Ответ: Вопросы по XNA.
Двухмерный:
PHP код:
|
Ответ: Вопросы по XNA.
Спасибо.
Вот как раз вопрос по инициализации новых вещей. Возьмем к примеру класс Random. Почему, если в самом классе Game1 написать Random rnd; , а затем в методе Initialize() Random rnd= new Random(); то инициализация будет не полной, что ли. То есть в том же методе Update() уже нельзя будет написать rnd.Next(), будет писать что rnd null. А если написать в классе game1 random rnd=new random(), то уже и в методе update() можно использовать rnd? |
Ответ: Вопросы по XNA.
вероятно надо объявлять как Random rnd = null;
Если ругается компилятор, то строка выше это поправит, если ошибка рантаймовая, то получается, что Update вызывается раньше Initialize() PS: было бы хорошо приводить текст ошибки ;) |
Ответ: Вопросы по XNA.
а зачем тебе глобальная ссылка на объект рандом если ты его создаешь все равно для каждого случая отдельно?
|
Ответ: Вопросы по XNA.
Если я его для каждого случая отдельно создавать буду, какой же это рандом. Он одно и то же число выдавать будет.
|
Ответ: Вопросы по XNA.
Для разных чисел надо задавать разный сид.
|
Ответ: Вопросы по XNA.
Цитата:
пили тогда сразу Random rnd = new Random() глобально. Но, когда ты создаешь новый объект Random, он и так сбивается. Можешь вручную сбивать на time*1000. |
Ответ: Вопросы по XNA.
Я не создаю для каждого случая отдельно. Создаю глобально. Мне не выгодно заново создавать, так как придется уж слишком много раз это делать:)
|
Ответ: Вопросы по XNA.
Рандом можно инициализировать примерно так:
PHP код:
|
Часовой пояс GMT +4, время: 17:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot