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)

Nikich 27.06.2012 11:54

Ответ: Вопросы по XNA.
 
А если просто New Random()? Разве там автоматически сид не выставляется на текущее время?

pax 27.06.2012 12:02

Ответ: Вопросы по XNA.
 
Если два раза подряд создать рандом, там будут одинаковые сиды, вот можно посмотреть пример с результатами:
http://msdn.microsoft.com/ru-ru/library/ctssatww.aspx (третий по счету)

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

Nikich 27.06.2012 12:58

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

radiobutton 27.06.2012 14:28

Ответ: Вопросы по XNA.
 
просто конструктор по умолчанию для рандома сбивает рандом по милисекундам. и поэтому если в одну и туже милисекунду создать, будут одинаковые числа. А если инициализировать тысячными милисекунды, то все норм в принципе =)

Цитата:

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

ты же вроде писал что у тя глобально тока Random rnd;
а rnd = new Random() в функциях типа Update пишешь.

Nikich 31.07.2012 14:29

Ответ: Вопросы по XNA.
 
Существует ли команда для сдвига одномерного массива?
К примеру, есть массив {1,2,2,2,0,1}, а мне нужно получить {1,2,2,2,1}. Или всё же нужно делать ручками?

pax 31.07.2012 14:32

Ответ: Вопросы по XNA.
 
Проще всего скопировать данные в новый массив, в любом случае надо новый размер массива. Так что Array.Copy

Nikich 31.07.2012 15:07

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

Dream 31.07.2012 17:27

Ответ: Вопросы по XNA.
 
только создать новую текстуру, получить ректангл из старой текстуры(там есть типа GetData(Rect) ) и впихнуть в новую

Nikich 03.08.2012 14:24

Ответ: Вопросы по XNA.
 
Можно ли удалить массив из памяти?

pax 03.08.2012 14:35

Ответ: Вопросы по XNA.
 
Присвой ему null. Его со временем подберет сборщик мусора.

Nikich 04.08.2012 12:24

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

ІГРОГРАЙКО 05.08.2012 11:05

Ответ: Вопросы по XNA.
 
После выхода из метода (функции)

Dream 05.08.2012 13:11

Ответ: Вопросы по XNA.
 
по теме http://www.rsdn.ru/article/dotnet/GC.xml

Nikich 25.08.2012 16:18

Ответ: Вопросы по XNA.
 
Как можно использовать метод, написанный в главном классе, в дочернем?

Dream 25.08.2012 16:20

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

Nikich 25.08.2012 16:33

Ответ: Вопросы по XNA.
 
Проблема в том, что метод то "public", а вызвать я не могу.

Dream 25.08.2012 16:56

Ответ: Вопросы по XNA.
 
пример?

Nikich 25.08.2012 17:05

Ответ: Вопросы по XNA.
 
В главном классе Game есть public метод particleAdd(), который мне нужно использовать в классе Player.

Dream 25.08.2012 17:08

Ответ: Вопросы по XNA.
 
ахренеть пример. Player - наследник Game? Game и Player в одной сборке? вствь код Game только с обьявлением функции и код Player с вызовом метода. малоли, может у тебя метод Static а ты пытаешься вызвать его у инстанса или наоборот. ну и т.д.

Nikich 25.08.2012 17:14

Ответ: Вопросы по XNA.
 
Всё, разобрался. Случайно сделал наследником не тот класс:)

Nikich 26.08.2012 17:19

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

                if (Keyboard.GetState().IsKeyDown(Keys.D))
                {
                    playerAngle += MathHelper.PiOver4 / 10;

                }
                if (Keyboard.GetState().IsKeyDown(Keys.A))
                {
                    playerAngle -= MathHelper.PiOver4 / 10;

                }
                if (Keyboard.GetState().IsKeyDown(Keys.W))
                {
                    playerSpeed += new Vector2((float)Math.Cos(playerAngle) * playerAbsSpeed, (float)Math.Sin(playerAngle) * playerAbsSpeed);
                }
                if (Keyboard.GetState().IsKeyDown(Keys.S))
                {
                    playerSpeed += new Vector2(-(float)Math.Cos(playerAngle) * playerAbsSpeed, -(float)Math.Sin(playerAngle) * playerAbsSpeed);
                }

?

Dream 26.08.2012 17:22

Ответ: Вопросы по XNA.
 
ну есть
PHP код:

Vector2.Transform(sourceVectorMatrix.CreateRotationZ(angel)); 


но я отчно не помн сейчас. возможно, если вдруг не будет работать нужно будет перевести в Vector3 это тоесть
PHP код:

Vector3.Transform(new Vector3(sourceVector.X,0,sourceVector.Y), Matrix.CreateRotationZ(angel)); 

но не факт, давно не попадались забыл уже


а, ну конечно можно ещё сразу в матрице всё сделать, или квартенионами пользоваться. в общем вариантов много

Igor 26.08.2012 23:18

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

Nikich 27.08.2012 13:56

Ответ: Вопросы по XNA.
 
Опять вопрос с наследованием. Есть главный класс Game1, дочерний класс Player, и список players( который состоит из Player объектов). Мне же нужно внутри класса Player взаимодействовать с другими объектами из списка players.
Код:

В Game1.cs
public List<Player> players = new List<Player>();
В Player.cs
public class Player:Game1
...
goal = players[0].Position;

В итоге ругается на "индекс за пределами диапазона", хотя это не так:(

pax 27.08.2012 13:59

Ответ: Вопросы по XNA.
 
PHP код:

if(players.Count>0)
{
   
// действие со списком


И ты добавил ли в список игроков до использования?

Nikich 27.08.2012 14:08

Ответ: Вопросы по XNA.
 
Ошибки нет, как и действия:)
Игроков точно добавил, так как они рисуются и обновляются.

pax 27.08.2012 14:11

Ответ: Вопросы по XNA.
 
Эта, так у тебя у каждого игрока свой список. Тебе поможет тока это:
PHP код:

public static List<Playerplayers = new List<Player>(); 


Nikich 27.08.2012 14:15

Ответ: Вопросы по XNA.
 
Спасибо, заработало. А что значит static?

pax 27.08.2012 15:03

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

Сообщение от Nikich (Сообщение 237365)
Спасибо, заработало. А что значит static?

Глобальная (единственная) переменная.

Nikich 29.08.2012 16:43

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

pax 29.08.2012 17:30

Ответ: Вопросы по XNA.
 
Ну с файлами конфигураций работать можно с помощью классов из пространства имен System.Configuration. Посмотри там примеры.

Nikich 29.08.2012 17:49

Ответ: Вопросы по XNA.
 
Выяснилось что легче всего использовать ConfigurationManager, однако у меня его нету. "using System.Configuration" есть, но всё равно компилятор ругается на ConfigurationManager:( Не знаете в чем может быть причина?

pax 29.08.2012 18:08

Ответ: Вопросы по XNA.
 
Там в описании класса написано:
Цитата:

System.Object
--System.Configuration.ConfigurationManager
Пространство имен: System.Configuration
Сборка: System.Configuration (в System.Configuration.dll)
Следовательно надо подключить к проекту сборку System.Configuration.dll

wppt 25.11.2012 21:57

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

Все это мне нужно для реализации заливки опр. конечной территории цветом в моей горе-игре :(

Dream 26.11.2012 14:37

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

wppt 26.11.2012 16:37

Ответ: Вопросы по XNA.
 
Все усложняется тем, что я не знаю, как это сделать :(

pax 26.11.2012 16:50

Ответ: Вопросы по XNA.
 
Рендер в текстуру, потом взять пиксель с текстуры?

wppt 26.11.2012 17:39

Ответ: Вопросы по XNA.
 
Мне это пока ни о чем не говорит :(
Может есть код у кого?

pax 26.11.2012 17:47

Ответ: Вопросы по XNA.
 
Ну вот первая ссылка в гугле http://www.riemers.net/eng/Tutorials...to_texture.php

wppt 26.11.2012 18:02

Ответ: Вопросы по XNA.
 
а как мне это поможет определить цвет пикселя?

pax 26.11.2012 18:19

Ответ: Вопросы по XNA.
 
сначала http://msdn.microsoft.com/ru-ru/libr...tudio.10).aspx
потом http://msdn.microsoft.com/en-us/libr...getdata .aspx
ну и оттуда цвет

wppt 26.11.2012 18:47

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

wppt 26.11.2012 18:52

Ответ: Вопросы по XNA.
 
Что-то вообще не врубаюсь :(

Dream 26.11.2012 19:44

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

wppt 26.11.2012 19:55

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

А если пиксель, например, выбирается щелчком мыши на нем, то как узнать цвет пикселя, не зная, по пикселю какой текстуры я "попал"?

pax 26.11.2012 20:28

Ответ: Вопросы по XNA.
 
Вот есть пример, может поможет
http://www.cyberforum.ru/windows-for...ead328886.html

только снимать не весь экран, а несколько пикселей.

Dream 26.11.2012 20:31

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

PHP код:

RenderTarget2D texture2D = new RenderTarget2D(GraphicsDevice, (int)ScreenResolution.X, (int)ScreenResolution.YfalseSurfaceFormat.ColorDepthFormat.Depth16); ;

...

GraphicsDevice.SetRenderTarget(texture2D);
GraphicsDevice.Clear(Color.Black);

SpriteBatch.Begin(SpriteSortMode.FrontToBack,
                                            
BlendState.NonPremultiplied,
                                            
SamplerState.LinearClamp,
                                            
DepthStencilState.None,
                                            
RasterizerState.CullCounterClockwisenull);
--
рисуешь что надо
SpriteBatch
.End()

GraphicsDevice.SetRenderTarget(null);
GraphicsDevice.Clear(Color.Black);
SpriteBatch.Begin(SpriteSortMode.FrontToBack,
                                            
BlendState.NonPremultiplied,
                                            
SamplerState.LinearClamp,
                                            
DepthStencilState.None,
                                            
RasterizerState.CullCounterClockwisenull);

SpriteBatch.Draw(_texture2D,Vector2.ZeroColor.White);

SpriteBatch.End() 

ну и полнятно рендер таргет не создавать в цикле.
Вот с этой текстуры и бери нужный пиксель через GetData. выставляешь ректанг в 1 пиксель и всё будет ок

wppt 26.11.2012 22:08

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

А где же массив цветов брать? Придется его в лоадконтент задавать?

Вроде бы разобрался!

Может еще вопросы появятся

Dream 27.11.2012 02:39

Ответ: Вопросы по XNA.
 
так и не понял. разобрался или нет?
texture2d.GetData

wppt 27.11.2012 16:58

Ответ: Вопросы по XNA.
 
Разобрался, спасибо, но что делать, если мне (допустим) нужно знать значение цвета пикселя в опр. точке каждый шаг?
Это ж очень снизит производительность!

Dream 27.11.2012 18:09

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

wppt 27.11.2012 21:05

Ответ: Вопросы по XNA.
 
не знаю, у меня fps до 100 понижается


Почему иногда некоторые переменные принимают значение Infinity?

Dream 27.11.2012 21:12

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

Почему иногда некоторые переменные принимают значение Infinity?
деление на ноль или перебор.

wppt 27.11.2012 22:53

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

Сообщение от Dream (Сообщение 244972)
Ну а было сколько? если было намного больше покажи код.

деление на ноль или перебор.

было 2.5k++

А разве при делении на ноль не должно бросаться исключение? А перебор это... ?

wppt 27.11.2012 22:55

Ответ: Вопросы по XNA.
 
Код вот:

Код:

if (mymouse.LeftButton == ButtonState.Pressed)
    {
        try
        {
            texture2D.GetData<Color>(0, new Rectangle(mymouse.X, mymouse.Y, 1, 1), dat, 0, 1);
        }
        catch
        {
            //тут пока ничего
        }
    }

это все в draw

Как исключить бесконечность и в случае, если переменная ей равняется, присваивать переменной ноль? Есть ли встроенный тип для бесконечности?

Dream 27.11.2012 23:21

Ответ: Вопросы по XNA.
 
когда я говори код я имел ввиду хотя-бы класс Game твой.
Уласс целиком. ну или слишком много всего тогда конструктор,LoadContent,Initialize,Draw и Update.
ну и вообще если включать вертикальную синхронизацию - обычно больше 60 фпс никогда не будет. поэтому смысла думать об этом нету покачто

Если число с плавающей точкой(float) делить на 0 -исключение н е выбрасывается.

PHP код:

float.IsInfinity()
float.IsNaN() 

P.S. Не забывай использовать кнопку "Править" и редактируй свои сообщения - добавляя информацию, чтобы не было по несколько твоих постов подряд.

wppt 27.11.2012 23:24

Ответ: Вопросы по XNA.
 
класс, в смысле, класс целиком, или конструктор?

Да кстати можешь подсказать, что быстрее будет?
У меня переменные есть, значения которых только положительные. Как будет быстрее - оформить для них свойства, или каждый раз при изменении проверять, меньше ли они нуля?
Или, может еще способ есть?

Dream 27.11.2012 23:31

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

Сообщение от wppt (Сообщение 244988)
класс, в смысле, класс целиком, или конструктор?

Да кстати можешь подсказать, что быстрее будет?
У меня переменные есть, значения которых только положительные. Как будет быстрее - оформить для них свойства, или каждый раз при изменении проверять, меньше ли они нуля?
Или, может еще способ есть?

Оформить для них свойство и в свойстве проверять значение

PHP код:

float PositiveValue
{
  
get{return _positiveValue;}
set{
_positiveValue=MathHelper.Clamp(value,0,float.MaxValue);
или
if(value<0)
  
value=0;
_positiveValue=value;

}



wppt 28.11.2012 19:37

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

что-то не работает:
Код:

void fill(int x, int y, Color newC, Color oldC,RenderTarget2D rend)
{
    Color[] datoa = new Color[1];
    rend.GetData<Color>(datoa,0,1);
    if (x >= 0 && y >= 0 && x < rend.Width && y < rend.Height && datoa[0] == oldC && datoa[0] != newC)
        {
            datoa[0] = newC;
            fill(x - 1, y, newC, oldC, rend);
            fill(x + 1, y, newC, oldC, rend);
            fill(x, y - 1, newC, oldC, rend);
            fill(x, y + 1, newC, oldC, rend);
        }
        else return;
}

This rectangle is to large or too small и т.д.
Или нужно через гетдата всю текстуру передавать?

wppt 01.12.2012 17:23

Ответ: Вопросы по XNA.
 
можете подсказать, возможно ли перегрузить унарный оператор +(не ++, именно +)?

Dream 01.12.2012 17:55

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

public static CType operator +(CType i1,CType i2)
{
return resultCType;
}
По поводу заливки - ты всегда берёшь только первый пиксель.

PHP код:

Color[] colors = new Color[1];
GetTexture().GetData(0,new Rectangle(x,y,1,1),colors01); 


wppt 01.12.2012 20:37

Ответ: Вопросы по XNA.
 
только первый? А как надо?

Насчет перегрузки - как перегрузить унарный плюс?

Dream 02.12.2012 02:27

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

Сообщение от wppt (Сообщение 245408)
только первый? А как надо?

Насчет перегрузки - как перегрузить унарный плюс?

в том коде что я дал убераем один параметер


По поводу как надо - я дал же код "как над"

wppt 02.12.2012 14:25

Ответ: Вопросы по XNA.
 
спасибо, попробую!
Что то программа зависает :(

А что же в сетдате писать?


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

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