forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Вопросы по XNA. (http://forum.boolean.name/showthread.php?t=16854)

radiobutton 08.06.2012 18:13

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Костян (Сообщение 229840)

Ну блин если писать программу, то по твоей логике её должны использовать только программисты??
Нет, тогда почему если задают вопрос от лица "ЮЗЕРА", который, предположим,тупой нуб, ему, понятно для него, не отвечают?

Если захотят выложить для нубов, то выложат еще и установочники библиотек. А так файлик для тех кто програмирует на XNA и у них уже установлены соответствующие библиотеки.:)

Nikich 08.06.2012 18:35

Ответ: Вопросы по XNA.
 
"Тупых юзеров" в гугле не банят.
Да и к тому же. Это что за "юзер" должен быть, чтоб ему был интересен тест скорости вывода картинок?

Nikich 14.06.2012 16:57

Ответ: Вопросы по XNA.
 
Я думаю, все играли в столь известную игру как Crimsonland. Не могли бы вы подсказать, каким образом разработчики добились одного интересного эффекта: следа от пули? Интересует именно такая версия, как в этой игре, то есть след прозрачен в том месте, откуда был произведён выстрел, и полностью непрозрачен там, где сейчас расположена пуля.
Скриншот(трафик, 1.4мб)



Randomize 14.06.2012 17:08

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 230341)
Я думаю, все играли в столь известную игру как Crimsonland. Не могли бы вы подсказать, каким образом разработчики добились одного интересного эффекта: следа от пули? Интересует именно такая версия, как в этой игре, то есть след прозрачен в том месте, откуда был произведён выстрел, и полностью непрозрачен там, где сейчас расположена пуля.
Скриншот(трафик!)



1) Берём спрайт (рисуем в photoshop, paint.net или генерируем програмно)
с градиентом белого цвета
градация от $FFFFFFFF до $FFFFFF00
Тобеж от абсолютно прозрачного до полностью непрозрачного.
2) Считаем угол от места выстрела до пули
3) Считаем дистанцию от места выстрела до пули
4) Хватаем наш градиентный спрайт за точку (0 ,height * 0.5) *если спрайт горизонтально ориентирован
поворачиваем на выведенный ранее угол, скейлим на половину дистанции и двигаем на половину дистанции.

На векторах будет даже проще сделать. Но я привык к косинусам синусам :B

Nikich 14.06.2012 17:17

Ответ: Вопросы по XNA.
 
Спасибо! Метод сложно назвать высокотехнологичным, но думаю по скорости не будет сильно уступать какому-нибудь шейдерному способу.
Правда про векторы теперь можно подробнее? У меня проблема в том, что мне не то что бы привычно делать через синусы и косинусы, а то что я не знаю как можно делать по-другому:)

moka 14.06.2012 19:30

Ответ: Вопросы по XNA.
 
Способ использования спрайта будет намного шустрее чем какими либо шейдерами симуляция шлейфа с неординарным поведением.

Если 3Д, можно тупо создать квад, который будет тянуться до максимальной длины, и иметь текстуру которая будет корректно накладываться чтобы не скукоживаться с растяжкой квада.

Nikich 14.06.2012 20:24

Ответ: Вопросы по XNA.
 
О, ну тогда тем более хорошо.
Вопрос по векторам еще актуален.

Igor 15.06.2012 01:32

Ответ: Вопросы по XNA.
 
Цитата:

Вопрос по векторам еще актуален.
Без векторов никак. Вектор в 2д - пара чисел. (по Х и У) Зная их, можно найти направление и длину. Вектора можно умножать на вещественные числа, например, прибавлять к вектору позиции произведение вектора скорости и времени. Для вращения, перемещения, изменения масштаба 3д векторов используются матрицы (4*4).
Кватернионы можно назвать четырёхмерными векторами. При их помощи можно задать направление модели или описать вращения.

Nikich 16.06.2012 16:05

Ответ: Вопросы по XNA.
 
Новый вопрос. Что такое "this"? Не в переводе с английского, конечно, а в XNA.
UPD
И ещё появился вопрос по рандомизации в C#. Как здесь надо описать аналог SeedRnd? Или есть что-то стандартное?
Обычный Random не нужен, так как не случайный он совсем.
P.S. было бы забавно, если бы Randomize ответил:) .

radiobutton 16.06.2012 18:33

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 230482)
Новый вопрос. Что такое "this"? Не в переводе с английского, конечно, а в XNA.
UPD
И ещё появился вопрос по рандомизации в C#. Как здесь надо описать аналог SeedRnd? Или есть что-то стандартное?
Обычный Random не нужен, так как не случайный он совсем.
P.S. было бы забавно, если бы Randomize ответил:) .

this ето c# синтаксис, а не xna. this это ссылка объекта на себя.

У стандартного рандома в конструкторе по умолчанию сбивание по времени стоит, так что он случайный должен быть. Но можно и указать явным образом число на которое он собъется.

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. Хотя судя по логике должен выдавать ошибку, кто-то < и <= перепутал, когда писал функцию. =)

Nikich 16.06.2012 18:42

Ответ: Вопросы по XNA.
 
Спасибо!
Возможно это не ошибка, а фича.
a∈[b,c] лучше чем a∈[b,c).

Nextovoy 16.06.2012 21:03

Ответ: Вопросы по 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
Не понимаю как решить вот эту проблему, раньше не сталкивался, проблема появилась, когда я начал ресурсы одного проекта перемещать в другой ну в общем со всем кодом, просто я название наугад выбрал и в процессах оно скажем так... неприлично по английски звучало поэтому создал проект с другим именем и все начал перемещать.

Nikich 17.06.2012 17:35

Ответ: Вопросы по XNA.
 
Возникла проблема с методом GetTexture(). Почему-то, у меня выдаёт на него ошибку, мол такого метода не существует, однако он точно существует.
И ещё. Можно ли как-то применить пиксельный шейдер сразу ко всему экрану, не используя GetTexture? То есть мне шейдёр нужен только для пост-обработки, и GetTexture() как раз то что нужно, но у меня этот метод почему-то не работает:(
UPD
Узнал в чём проблема. Оказывается, в XNA 4.0 нету метода GetTexture(), вместо этого, сам RenderTarget2D и есть готовая текстура.

Nikich 18.06.2012 11:44

Ответ: Вопросы по XNA.
 
Нужна помощь с реализацией теней в 2D, а именно в теоритической части. Сам я придумал только один способ, но он должен быть крайне медленным.
В общем, вот в чем моя идея. После того как мы получили рендер сцены, в пиксельном шейдере меняем бэкграунд на белый(даже лучше на прозрачный). На это уйдет первый пасс. Второй пасс уходит на следующие:
Для каждого пикселя ищем угол от центра до него(до центра потому что источник света в центре), и зная угол, через синусы и косинусы приравниваем цвет этого пикселя к тому цвету пикселя, что лежит немного дальше. Таким образом, если пиксель рядом с предметом, что отбрасывает тень, то он(пиксель) станет черным. Хотя таким способом тени будут очень короткие, поэтому можно сделать еще один пасс на такую же функцию. Но можно и не делать, если длинные тени не нужны. Ну а потом накладываем на наш рендер то, что у нас получилось.
И как это все будет по скорости? И есть ли у вас другие предложения по этой теме?

Igor 18.06.2012 12:15

Ответ: Вопросы по XNA.
 
Цитата:

Для каждого пикселя ищем угол от центра до него(до центра потому что источник света в центре), и зная угол, через синусы и косинусы
Можно узнать синусы и косинусы без нахождения угла.
пусть вектор от центра до пикселя x,y, тогда синус - x/sqrt(x*x+y*y), косинус y/sqrt(x*x+y*y) или наоборот
А можно ещё лучше. Не искать синус и косинус. взять вектор (x,y), умножить его на 1.005 например и получить координаты чуть более дальнего пикселя (надо ещё прибавить половину ширины и высоты экрана). Правда, по увеличению расстояния от центра экрана тени тоже будут удлиняться

Nikich 18.06.2012 12:24

Ответ: Вопросы по XNA.
 
А как на HLSL из координат получить вектор?

Igor 18.06.2012 12:30

Ответ: Вопросы по XNA.
 
пара чисел - координаты, float2 уже сами по себе вектор. их можно складывать, умножать и т.п.
Пусть float2 А-вектор до источника, float2 В-вектор до пикселя (их координаты)
тогда С = (В-А)*1.01f+А - чуть более дальняя точка от источника света

Nikich 18.06.2012 12:55

Ответ: Вопросы по XNA.
 
Огромное спасибо!

Dream 18.06.2012 14:32

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nextovoy (Сообщение 230505)
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
Не понимаю как решить вот эту проблему, раньше не сталкивался, проблема появилась, когда я начал ресурсы одного проекта перемещать в другой ну в общем со всем кодом, просто я название наугад выбрал и в процессах оно скажем так... неприлично по английски звучало поэтому создал проект с другим именем и все начал перемещать.

Если ещё не исправил - то проблема в том что контет экспортеры выставлены для этого файла

Nikich 20.06.2012 19:09

Ответ: Вопросы по XNA.
 
Ребята, не подскажите как SpriteSortMode.BackToFront по скорости? Сильно уступает Deffered? А то нужно глубину спрайтам делать, а рисовать их так, чтобы глубина оставалась правильной как-то неудобно.

Dream 21.06.2012 13:00

Ответ: Вопросы по XNA.
 
не сильно уступает. для обычных нужнд хватает с головой. только есть небоьшая особенность - чем слабее комп - тем большая вероятность что спрайты(текстуры) отренжереные на растоянии глубины(>0.02f), на одном месте, будут "моргать"(время от времени будут друг друга перекрывать)

Nikich 21.06.2012 13:40

Ответ: Вопросы по XNA.
 
Спасибо! А "два" это к чему относится?:)

Dream 21.06.2012 13:54

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 230910)
Спасибо! А "два" это к чему относится?:)

Это я о своём. удалил

Nikich 21.06.2012 16:49

Ответ: Вопросы по XNA.
 
Гм, а нет ли способа этого избежать? Это ведь может сильно надоедать, если всё скакать будет. Или всё же следует рисовать всё по порядку?
З.Ы. для второй прорисовки придётся бегать по большому массиву, так что это действительно нежелательно.

Dream 21.06.2012 17:55

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 230933)
Гм, а нет ли способа этого избежать? Это ведь может сильно надоедать, если всё скакать будет. Или всё же следует рисовать всё по порядку?
З.Ы. для второй прорисовки придётся бегать по большому массиву, так что это действительно нежелательно.

Просто не следует рисовать текстуры которые будут лежать друг на друга на слоях с разницей меньше 0.02f, есшли ты делаешь тайловую землю допустим, и у тебя текстуры(тайлы) стоят впритык друг к другу, то можно использовать один слой и будет нормально

Nikich 21.06.2012 21:55

Ответ: Вопросы по XNA.
 
Не в этом беда. Если говорить про тайлы, то это равносильно тому, что тайлы пересекаются. И в этой ситуации уже ничего не поможет?

Igor 22.06.2012 12:26

Ответ: Вопросы по XNA.
 
Цитата:

И в этой ситуации уже ничего не поможет?
Там есть разные режимы. Например, когда ты думаешь что нарисовал много-много тайлов, а реально процессор их отсортировал и только потом по порядку вывел на экран. Он, наверно, медленнее, но не должно быть проблем с почти одинаковыми значениями глубины

Dream 22.06.2012 12:43

Ответ: Вопросы по XNA.
 
Вложений: 1
Цитата:

Сообщение от Nikich (Сообщение 230960)
Не в этом беда. Если говорить про тайлы, то это равносильно тому, что тайлы пересекаются. И в этой ситуации уже ничего не поможет?

Зачем они пересекаются?!

Nikich 22.06.2012 13:05

Ответ: Вопросы по XNA.
 
Это я к примеру говорил:)
Если говорить о твоей схеме, то проблема в том, что кусты пересекаются. Кусты это отдельный массив, поэтому присваивать каждому кусту отдельную глубину неудобно.

Nikich 23.06.2012 17:05

Ответ: Вопросы по XNA.
 
Ладно, с этим вопрос решен. Как оказалось, быстрее будет 2 пробега по массиву сделать, чем использовать BackToFront режим.
Теперь у меня возник вопрос про UnloadContent(). Далеко не во всех примерах люди хоть что-нибудь писали в зоне UnloadContent(), поэтому и я ничего не писал. Но сейчас подумал, что если бы все было автоматически, этой зоны бы вообще не было. В общем, необходимо ли выгружать контент при выходе из игры вручную, или XNA самостоятельно справится?

Dream 24.06.2012 16:35

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231212)
Ладно, с этим вопрос решен. Как оказалось, быстрее будет 2 пробега по массиву сделать, чем использовать BackToFront режим.
Теперь у меня возник вопрос про UnloadContent(). Далеко не во всех примерах люди хоть что-нибудь писали в зоне UnloadContent(), поэтому и я ничего не писал. Но сейчас подумал, что если бы все было автоматически, этой зоны бы вообще не было. В общем, необходимо ли выгружать контент при выходе из игры вручную, или XNA самостоятельно справится?

При выходе не нужно. Но можно(нужно) сделаь чтбы выгружались текстуры которые используются в меню, когда начинается сама игра и наоборот

Nikich 25.06.2012 02:45

Ответ: Вопросы по XNA.
 
Спасибо.
Возникло два вопроса. Первый, ответ на который мне очень нужен, и второй, который нужен просто для ознакомления.
Если у меня есть вектор позиции игрока и вектор скорости, то для получения новой координаты игрока нужно сложить эти два вектора? Или все же умножить их? Просто если делать с умножением, то ничего не работает из-за того, что если вектор позиции равен 0, то никуда объект не сдвинется. А если складывать, то есть ли в этом смысл? Ведт тогда можно было сразу менять х и у вектора позиции.
Второй вопрос связан с 3Д миром. Что из себя представляет LinePick? Каким образом он работает? Я знаю, что это как бы луч который мы пускаем из камеры куда-нибудь, и благодаря нему мы можем узнать много инфы о пикнутом предмете( расстояне до него, его тип и тд). Но как обрабатывается в компьюетере? И еще. Где вообще можно узнать действительно верную информациюо о том, что для чего нужно, как это работает и так далее. Просто сейчас я смутно представляю для чего что в компьютере нужно, а о том как оно работает я вообще ничего не знаю:( Это довольно плохо для программиста, как я считаю.

radiobutton 25.06.2012 02:49

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231334)
Спасибо.
Возникло два вопроса. Первый, ответ на который мне очень нужен, и второй, который нужен просто для ознакомления.
Если у меня есть вектор позиции игрока и вектор скорости, то для получения новой координаты игрока нужно сложить эти два вектора? Или все же умножить их? Просто если делать с умножением, то ничего не работает из-за того, что если вектор позиции равен 0, то никуда объект не сдвинется. А если складывать, то есть ли в этом смысл? Ведт тогда можно было сразу менять х и у вектора позиции.

А сложение векторов это по твоему что?:)

Nikich 25.06.2012 02:59

Ответ: Вопросы по XNA.
 
Я поэтому и спросил, есть ли в этом смысл.

radiobutton 25.06.2012 03:04

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231337)
Я поэтому и спросил, есть ли в этом смысл.

Ну допустим вектор позиции называется pos, а скорости speed.

pos+=speed;

тоже самое что

pos.X+=speed.X;
pos.Y+=speed.Y;

но зачем писать больше?:)

Nikich 25.06.2012 03:12

Ответ: Вопросы по XNA.
 
Зачем так делать? Можно сразу тогда сразу изменять координаты pos на какое-то число. То есть нажата стрелка вверх - уменьшать Y и так далее.
Мне нужно векторное перемещение для того, чтобы не было бага с двойной скорости, когда нажимаешь сразу клавишу вверх и вбок. Знаю как можно это исправить без векторов( Cos45*speed), но это не торт, когда вектора есть.

radiobutton 25.06.2012 03:35

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231339)
Зачем так делать? Можно сразу тогда сразу изменять координаты pos на какое-то число. То есть нажата стрелка вверх - уменьшать Y и так далее.
Мне нужно векторное перемещение для того, чтобы не было бага с двойной скорости, когда нажимаешь сразу клавишу вверх и вбок. Знаю как можно это исправить без векторов( Cos45*speed), но это не торт, когда вектора есть.

Код:

Float spd = 3f;  // Это скорость перемещения.
Vector Speed = Vector2.Zero;  //вектор направления движения.
bool isMoved=false;

if нажато вверх {    Speed+= new Vector2(0,-1); isMoved=true;}
if нажато вниз {    Speed+= new Vector2(0,1); isMoved=true;}
if нажато влево {    Speed+= new Vector2(-1,0); isMoved=true;}
if нажато вправо {    Speed+= new Vector2(1,0); isMoved=true;}

if (isMoved)
{
    Speed.Normalize();  //X и Y изменяются, так что длина вектора стает равной 1
    Speed*=spd;
    pos+=Speed;
}

Что-то типа такого можешь сделать.:)

Nikich 25.06.2012 15:45

Ответ: Вопросы по XNA.
 
А чем отличается Normalize вектор от обычного?

radiobutton 25.06.2012 15:51

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231375)
А чем отличается Normalize вектор от обычного?

Сохраняет направление, но его длина становится равной единице.
по сути, тоже умножение на cos45 для твоего случая.

Nikich 25.06.2012 17:14

Ответ: Вопросы по XNA.
 
Нужна помощь с рисованием текстуры. Максимальное разрешение текстуры 4096x4096. А если мне нужна текстура, в разы больше этой? Как тогда обойти это ограничение?

radiobutton 25.06.2012 17:15

Ответ: Вопросы по XNA.
 
Рисовать несколько текстур (с) кэп

Nikich 25.06.2012 17:22

Ответ: Вопросы по XNA.
 
Не подходит. Неудобно генерировать, а если генерировать криво, мир будет шовным.

pax 25.06.2012 17:51

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231396)
Не подходит. Неудобно генерировать, а если генерировать криво, мир будет шовным.

Гугли pixel perfect rendering

PS и не генерируй криво ;)

Nikich 25.06.2012 19:58

Ответ: Вопросы по XNA.
 
То есть, как я понимаю, все равно придется разбивать все на более мелкие текстуры?
Просто я думал, есть какой-то другой выход. Вот в 3Д же процедурные миры цельными делают, насколько я знаю.

pax 25.06.2012 21:00

Ответ: Вопросы по XNA.
 
Цельными миры не делают, в том же майнкрафте чанки.

Nikich 25.06.2012 21:31

Ответ: Вопросы по XNA.
 
Погодите-ка. То есть получается, что от процедурного мира нету толка, раз и его нужно на части разбивать?

pax 25.06.2012 21:33

Ответ: Вопросы по XNA.
 
Почему нет? Процедурный мир - "бесконечный мир". Разве можно заранее "бесконечный мир" сделать? Плюс есть разнообразие всегда, при старте новой игры.

Nikich 25.06.2012 21:52

Ответ: Вопросы по XNA.
 
Ага, с бесконечным и случайным мирами понятно.
Но все же, разве нет хоть какой-нибудь выгоды в использовании процедурного мира по сравнению с обычным, если речь идет не о бесконечных и случайных мирах?
Я уверен в том, что по памяти процедурный мир выигрывает. Ведь фактически, нужно хранить лишь переменные, что влияют на генерацию ландашафта для того, чтобы ландшафт все время был одинаковый.
Но вряд ли это единственный плюс.

pax 26.06.2012 10:53

Ответ: Вопросы по XNA.
 
Посмотри на карты гугла или яндекса. Тоже все из квадратных ячеек ;)

pax 26.06.2012 12:02

Ответ: Вопросы по XNA.
 
Вообще тебе надо искать что-то типа gigatexture (megatexture) и стримминг.

Nikich 26.06.2012 12:58

Ответ: Вопросы по XNA.
 
Цитата:

Этот факт хорошо известен пользователям со стажем: загрузка игр, антивирусное сканирование, дефрагментация, форматирование и т. д. на современных (2009) компьютерах длится куда дольше, чем на компьютерах 10-летней давности.
ЯННП. Мы деградируем, что ли?

pax 26.06.2012 13:30

Ответ: Вопросы по XNA.
 
Объемы данных растут просто. Я начинал с жесткого диска в 200Мб, сейчас у меня в сумме 3,5Тб. Если посчитать, то в сравнение с 2Тб мой первый винт имел объем в 10000 раз меньше. А скорость его была в 0,7Мб. - всего примерно в 100-200 раз меньше.

Nikich 26.06.2012 14:11

Ответ: Вопросы по XNA.
 
Ясно.
Так, всё же с векторами какие-то проблемы.
Код:

{
            playerMoves = false;
            if (Keyboard.GetState().IsKeyDown(Keys.D))
            {
                playerSpeed.X += 5;
                playerMoves=true;
            }
            if (Keyboard.GetState().IsKeyDown(Keys.A))
            {
                playerSpeed.X -= 5;
                playerMoves = true;
            } 
            if (Keyboard.GetState().IsKeyDown(Keys.W))
            {
                playerSpeed.Y -= 5;
                playerMoves = true;
            } 
            if (Keyboard.GetState().IsKeyDown(Keys.S))
            {
            playerSpeed.Y += 5;
            playerMoves = true;
            }
            if (playerMoves == true)
            {
                playerSpeed.Normalize();
                playerSpeed *= playerAbsSpeed;
                playerPosition += playerSpeed;
            }
        }

Если нажать влево, а затем вправо, Player улетает непонятно куда( если мониторить playerPosition то улетает он в NaN,NaN ). Что я не так сделал?
З.Ы. знаю что дело можно исправить, если добавить
Код:

playerSpeed = Vector2.Zero;
в самое начало, но интересует из-за чего происходит непонятка с координатами без этой строчки.

pax 26.06.2012 14:48

Ответ: Вопросы по XNA.
 
playerSpeed.Normalize(); от нулевого вектора будет непонятно что, это же приводит вектор к единичной длине. А так ты сначала делаешь вектор по X = -5, а потом снова ноль и вот результат.

Nikich 26.06.2012 23:10

Ответ: Вопросы по XNA.
 
Можно ли сделать двумерный массив списков? Ну или одномерный.
Если да, то как?

pax 26.06.2012 23:37

Ответ: Вопросы по XNA.
 
Двухмерный:
PHP код:

public List<int>[,] myListsArray

Но не забудь каждую ячейку массива инициализировать новым списком.

Nikich 26.06.2012 23:56

Ответ: Вопросы по XNA.
 
Спасибо.
Вот как раз вопрос по инициализации новых вещей. Возьмем к примеру класс Random. Почему, если в самом классе Game1 написать Random rnd; , а затем в методе Initialize() Random rnd= new Random(); то инициализация будет не полной, что ли. То есть в том же методе Update() уже нельзя будет написать rnd.Next(), будет писать что rnd null. А если написать в классе game1 random rnd=new random(), то уже и в методе update() можно использовать rnd?

pax 27.06.2012 00:45

Ответ: Вопросы по XNA.
 
вероятно надо объявлять как Random rnd = null;
Если ругается компилятор, то строка выше это поправит, если ошибка рантаймовая, то получается, что Update вызывается раньше Initialize()

PS: было бы хорошо приводить текст ошибки ;)

radiobutton 27.06.2012 01:18

Ответ: Вопросы по XNA.
 
а зачем тебе глобальная ссылка на объект рандом если ты его создаешь все равно для каждого случая отдельно?

Nikich 27.06.2012 10:02

Ответ: Вопросы по XNA.
 
Если я его для каждого случая отдельно создавать буду, какой же это рандом. Он одно и то же число выдавать будет.

pax 27.06.2012 10:04

Ответ: Вопросы по XNA.
 
Для разных чисел надо задавать разный сид.

radiobutton 27.06.2012 11:46

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 231589)
Если я его для каждого случая отдельно создавать буду, какой же это рандом. Он одно и то же число выдавать будет.

А ты и так его создаешь для каждого случая отдельно :)
пили тогда сразу Random rnd = new Random() глобально.

Но, когда ты создаешь новый объект Random, он и так сбивается.
Можешь вручную сбивать на time*1000.

Nikich 27.06.2012 11:51

Ответ: Вопросы по XNA.
 
Я не создаю для каждого случая отдельно. Создаю глобально. Мне не выгодно заново создавать, так как придется уж слишком много раз это делать:)

pax 27.06.2012 11:52

Ответ: Вопросы по XNA.
 
Рандом можно инициализировать примерно так:
PHP код:

new Random(unchecked((int) (DateTime.Now.Ticks >> 32))); 



Часовой пояс GMT +4, время: 17:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot