forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

FREE MAN 24.02.2015 22:11

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 293531)
PHP код:

if(rigidbody.velocity.magnitude>=500f)
                      
rigidbody.velocity =rigidbody.velocity.normalized*500f;
       else
                      
rigidbody.addForce(rigidbody.velocity.normalized*50f); 

Так будет держать на заданной скорости, но при столкновении скорость будет NoConstant и не будет проваливаться тело

Так тоже, все равно шарик набирает скорость.

RegIon 24.02.2015 22:14

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Phyton (Сообщение 293532)
Так тоже, все равно шарик набирает скорость.

:dontknow:как? значит предел выше на много стоит, посмотри текущую его скорость, а так она не должна набираться выше 500 - скорость константная, может просто 500 много, и он просто не успевает его разогнать до нее.
http://docs.unity3d.com/ScriptRefere...-velocity.html

FREE MAN 25.02.2015 01:11

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 293533)
:dontknow:как? значит предел выше на много стоит, посмотри текущую его скорость, а так она не должна набираться выше 500 - скорость константная, может просто 500 много, и он просто не успевает его разогнать до нее.
http://docs.unity3d.com/ScriptRefere...-velocity.html

В моем случае если использую velocity, значение скорости с начало нормально по Y=20, если происходит отклонение шара в на другой градус начинает колебаться становиться ниже либо выше.

FREE MAN 26.02.2015 00:00

Ответ: Вопросы от новичка
 
Больше не у кого нет идеи, как сделать одинаковую скорость?

RegIon 26.02.2015 06:38

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Phyton (Сообщение 293572)
Больше не у кого нет идеи, как сделать одинаковую скорость?

Кинь весь скрипт.

Morganolla 04.03.2015 20:11

Ответ: Вопросы от новичка
 
Сделал анимацию элемента UI - Image, которая в канвасе стоит. Анимацию мигания с помощью альфа канала. В режиме проигрывания отдельно анимации все хорошо. А когда запускаешь игру - имаж не мигает!!! Хотя в инспекторе видно как пульсирует альфа! А само изображение не меняется! В чем дело?

pax 04.03.2015 20:22

Ответ: Вопросы от новичка
 
мигание с помощью альфа-канала надо делать с помощью компонента CanvasGroup

Morganolla 04.03.2015 21:03

Ответ: Вопросы от новичка
 
А как сделать мигание изменением цвета?

Nex 04.03.2015 21:47

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Morganolla (Сообщение 293825)
А как сделать мигание изменением цвета?

http://unity3d.com/learn/tutorials/m...scripting/lerp

pax 04.03.2015 23:48

Ответ: Вопросы от новичка
 
Можно использовать вот такую функцию
http://docs.unity3d.com/ScriptRefere...FadeColor.html

Morganolla 05.03.2015 20:55

Ответ: Вопросы от новичка
 
Спс, друзья! Ох как же мне не нравится этот новый гуй... :)))

ANIK123 06.03.2015 14:45

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Morganolla (Сообщение 293874)
Ох как же мне не нравится этот новый гуй... :)))

Да нормальный гуй же, хотя сырой
Скоро обещают возможность строить гуи-меши трианглами, а также поддержку обычных рендереров, при этом, на сколько я понял, сохранится вся тамтешняя оптимизация - ваще красота)

Вопрос: как в шейдере определить/нарисовать вертекс? Или же как в пиксельном шейдере понять находимся ли мы на определенном расстоянии от вертекса? В этом деле я нуб

RegIon 07.03.2015 15:40

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ANIK123 (Сообщение 293896)
Да нормальный гуй же, хотя сырой
Скоро обещают возможность строить гуи-меши трианглами, а также поддержку обычных рендереров, при этом, на сколько я понял, сохранится вся тамтешняя оптимизация - ваще красота)

Вопрос: как в шейдере определить/нарисовать вертекс? Или же как в пиксельном шейдере понять находимся ли мы на определенном расстоянии от вертекса? В этом деле я нуб

Ты про UV вершины? Ну напрямую из пиксельного никак, можно из вершинного передать UV ее в пиксельный.
Нарисовать? Тессселяция

ANIK123 08.03.2015 01:00

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 293920)
Ты про UV вершины? Ну напрямую из пиксельного никак, можно из вершинного передать UV ее в пиксельный.
Нарисовать? Тессселяция

Возьму в пример "wireframe" шейдеры: как они узнают где рисовать линии? (желательно с directx не выше 9)
Возможно?

RegIon 08.03.2015 08:58

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ANIK123 (Сообщение 293931)
Возьму в пример "wireframe" шейдеры: как они узнают где рисовать линии? (желательно с directx не выше 9)
Возможно?

http://forum.unity3d.com/threads/wir...shader.251143/

ANIK123 08.03.2015 13:37

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 293937)

Видал уже, там в меш пакуется дополнительная информация, но раз иначе никак, то пусть будет так)

Идиотский вопрос: что нужно экономить больше? Процессорное время или GPU? (интересуют мобилки) Конечно же нужно соблюдать баланс и все такое, или ниочинь? Знаю что многое пытаются переложить на видеопроцессоры

SBJoker 08.03.2015 13:50

Ответ: Вопросы от новичка
 
на мобилках нужно экономить дроуколлы.

ANIK123 08.03.2015 21:28

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от SBJoker (Сообщение 293943)
на мобилках нужно экономить дроуколлы.

да, и по-меньше прозрачности) (не помню как называется)

Nex 09.03.2015 02:51

Ответ: Вопросы от новичка
 
В Unity 5 встретил прикол. При инстансе объекта в цикле с проверкой на его существование.
Код:

if(player == null){
    player = Instantiate(...
}

Условие не срабатывает и объект создается каждый проход цикла. В дебаге при этом пишет первой строкой - null, а все последующие - Null.
wtf? Это я где то ошибся или юнити багует?

Жека 09.03.2015 14:46

Ответ: Вопросы от новичка
 
Если переменная player статичная то хз.

h1dd3n 09.03.2015 20:10

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 293954)
В Unity 5 встретил прикол. При инстансе объекта в цикле с проверкой на его существование.
Код:

if(player == null){
    player = Instantiate(...
}

Условие не срабатывает и объект создается каждый проход цикла. В дебаге при этом пишет первой строкой - null, а все последующие - Null.
wtf? Это я где то ошибся или юнити багует?

Залочить player пробовал ?

seaman 09.03.2015 23:38

Ответ: Вопросы от новичка
 
Цитата:

Условие не срабатывает и объект создается каждый проход цикла.
Ничего подобного не наблюдаю.
PHP код:

using UnityEngine;

public class 
MyInstance MonoBehaviour
{
    public 
GameObject prefab;

    private 
GameObject __go;

    public 
void Start()
    {
        for(
int i 010i++)
        {
            if(
__go == null)
            {
                
Debug.Log(__go);
                
__go = (GameObject)Instantiate(prefabtransform.positiontransform.rotation);
            }
        }
    }


Появляется один объект. В дебаге один Null.
PS^ Предлагаю не писать невнятный кусок скрипта. По тому что Вы привели - у Вас может быть все что угодно...

Evgen 10.03.2015 14:42

Ответ: Вопросы от новичка
 
Как в Unity5 сделать чтобы источник света Point (Точечный) отбрасывал тени? Directional отбрасывает, а Point нет. Нашел информацию, что можно использовать Deffered Rendering Path, тогда вроде будет работать. А если использовать Forward Rendering тогда как?

Nex 10.03.2015 18:11

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Evgen (Сообщение 293983)
Как в Unity5 сделать чтобы источник света Point (Точечный) отбрасывал тени? Directional отбрасывает, а Point нет. Нашел информацию, что можно использовать Deffered Rendering Path, тогда вроде будет работать. А если использовать Forward Rendering тогда как?

Ставишь Baking на Realtime и в Shadow Type выбираешь тени хард/софт и все работает. Возможно еще надо увеличить дальность прорисовки теней, но если от Directional тени видно, то с этим все норм.

Evgen 11.03.2015 09:42

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 293992)
Ставишь Baking на Realtime и в Shadow Type выбираешь тени хард/софт и все работает. Возможно еще надо увеличить дальность прорисовки теней, но если от Directional тени видно, то с этим все норм.

Так и делал. Сейчас создал отдельный проект все работает. Буду разбираться дальше.

Nex 12.03.2015 10:00

Ответ: Вопросы от новичка
 
Как в Юнити 5 узнать сколько на данный момент draw calls? В статистике нет их, а в профайлере не понятно в общем столько их вместе с батчингом или их реальное число.

Lowlet 12.03.2015 17:18

Ответ: Вопросы от новичка
 
Они никуда не делись. Batches и saved by batching.

ANIK123 12.03.2015 19:58

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Lowlet (Сообщение 294052)
Они никуда не делись. Batches и saved by batching.

А что такое "SetPass calls"?

RegIon 13.03.2015 09:18

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ANIK123 (Сообщение 294061)
А что такое "SetPass calls"?

http://forum.unity3d.com/threads/dra...671162.297233/

Morganolla 13.03.2015 19:13

Ответ: Вопросы от новичка
 
Кто нибудь пробовал сделать онлайн игру на Юнити с использованием MS Azure?

Evgen 16.03.2015 09:14

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 293992)
Ставишь Baking на Realtime и в Shadow Type выбираешь тени хард/софт и все работает. Возможно еще надо увеличить дальность прорисовки теней, но если от Directional тени видно, то с этим все норм.

На самом деле проблема была в том что в Quality Settings параметр Pixel Light был равен нулю. Поставил 1, заработало.

LLI.T.A.L.K.E.R. 20.03.2015 18:51

Ответ: Вопросы от новичка
 
Что оптимальней и производительней?

Например, если объект находится в радиусе <5 от игрока и:

пофиг и каждый раз (цикл программы) включать физ.свойства взаимодействия для объекта: типа Body.CollisionOn=True
(тут нет никаих проверок - тупо врубаешь и всё забыл)

или создать флаг проверки PhysicOn была ли уже включена/отключена физика объекта
если не совпадает с предыдущим != флагом, то уже врубить физику объекту?
(тут же как бы тоже, если даже не больше - идёт проверка флага, и когда-нибудь будет переключение физики, к тому же приписывать флаг к каждому объекту)

не считая того, что и там и тут будет +проверка расстояния

больше писал к b3d, но и сюда подходит :D

RegIon 20.03.2015 19:38

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 294371)
Что оптимальней и производительней?

Например, если объект находится в радиусе <5 от игрока и:

пофиг и каждый раз (цикл программы) включать физ.свойства взаимодействия для объекта: типа Body.CollisionOn=True
(тут нет никаих проверок - тупо врубаешь и всё забыл)

или создать флаг проверки PhysicOn была ли уже включена/отключена физика объекта
если не совпадает с предыдущим != флагом, то уже врубить физику объекту?
(тут же как бы тоже, если даже не больше - идёт проверка флага, и когда-нибудь будет переключение физики, к тому же приписывать флаг к каждому объекту)

не считая того, что и там и тут будет +проверка расстояния

больше писал к b3d, но и сюда подходит :D

Тогда лучше сделать Body.Sleep()
http://docs.unity3d.com/Manual/RigidbodiesOverview.html
И проверять isSleeping
http://docs.unity3d.com/ScriptRefere...sSleeping.html
а если что, то будить WakeUp()

Nex 28.03.2015 09:23

Ответ: Вопросы от новичка
 
Как у wheelCollider чекать занос (дрифт)?

LLI.T.A.L.K.E.R. 24.04.2015 20:31

Ответ: Вопросы от новичка
 
Понял как мне собирать карты уровней в ValveHammerEditor. Понял как с Blender удалять ненужные невидимые полигоны (хранить стены не прямоугольниками а видимыми поверхностями).
Остался вопрос: при экспорте модели в DeepExploration - мне соединить всю карту в один мега-объект? или пусть каждые объекты (стеночки, бочки, лесенки, деревья) будут сами по себе?

Как лучше в Unity сгенерить всю карту одним объектом или отображать различными под-объектами?

VHE и Blender рулит!

И как поступать при двух случаях:
если карта типа GTA San Andreas
если карта закрытого типа CS1.6

ILonion 28.04.2015 13:33

Ответ: Вопросы от новичка
 
Доброго времени!
Подскажите новичку, пожалуйста, такую вещь:
пытаюсь сохранить точную позицию объекта x,y,z в переменной vector3, но этот самый вектор ее округляет:
..
public static Vector3 pos;
...
pos = curobj.transform.position;
Debug.Log (pos);

http://puu.sh/htIIX/801491853d.png

как в нем сохранить оригинал? или только в отдельных переменных для каждой оси через float
?

Nex 28.04.2015 14:06

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ILonion (Сообщение 295395)
Доброго времени!
Подскажите новичку, пожалуйста, такую вещь:
пытаюсь сохранить точную позицию объекта x,y,z в переменной vector3, но этот самый вектор ее округляет:
..
public static Vector3 pos;
...
pos = curobj.transform.position;
Debug.Log (pos);

http://puu.sh/htIIX/801491853d.png

как в нем сохранить оригинал? или только в отдельных переменных для каждой оси через float
?

Это в дебаге округление, а на самом деле все нормально. Для проверки сделай так Debug.Log (pos.x);

ILonion 28.04.2015 14:32

Ответ: Вопросы от новичка
 
Ага, все отлично.
Спасибо, Nex!

pax 28.04.2015 15:02

Ответ: Вопросы от новичка
 
Можно вывести в дебаг точнее так:
PHP код:

Debug.Log(pos.ToString("F8")); 

По умолчанию формат для вывода F1

LLI.T.A.L.K.E.R. 28.04.2015 16:48

Ответ: Вопросы от новичка
 
Цитата:

void OnTriggerEnter(Collider collobj) // если игрок вошёл
audio.PlayOneShot(ZoneSound); // играть звук зоны
ScreamHUD.GetComponent<MeshRenderer>().enabled=tru e; // показать скример
gameObject.SetActive(false); // деактивирую зону
кажется при деактивации функция проигрывания звука сбрасывается, хотя скример врубается..
когда убираю деактивацию зоны - звук играет.

не хочется, конечно, выводить на таймер отрубания зоны...

ЧЯДНТ?

ILonion 28.04.2015 17:06

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 295399)
Можно вывести в дебаг точнее так:
PHP код:

Debug.Log(pos.ToString("F8")); 

По умолчанию формат для вывода F1

хм, интересно. форматирование с точностью до 8 и произвольно знаков.
спасибо, pax!

P.S. pax, спасибо большое за труды по blitz-unity wiki !!

pax 28.04.2015 18:16

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 295401)
кажется при деактивации функция проигрывания звука сбрасывается, хотя скример врубается..
когда убираю деактивацию зоны - звук играет.

не хочется, конечно, выводить на таймер отрубания зоны...

ЧЯДНТ?

Используй http://docs.unity3d.com/ScriptRefere...ipAtPoint.html

ILonion 30.04.2015 02:08

Ответ: Вопросы от новичка
 
Такой вопрос:
У меня есть метод с неск. входящими параметрами (из разных файлов скриптов, других методов и пр.):
xclass.function(param1,param2,param3)

Unity отказывается вызывать этот метод таким способом:
xclass.function(int param1 = a,int param2 = b,int param3 = с), сообщая Unexpected symbol `param1', expecting `.'

заставляет делать так:
int param1;
int param2;
int param3;
xclass.function(param1 = a,param2 = b,param3 = с)
или так:
int param1 = a;
int param2 = b;
int param3 = c;
xclass.function(param1,param2,param3), сыпя предупреждениями о переменных которые никогда не используются.

Что я делаю неправильно в первом варианте, и можно ли как-то его добиться? Или хотя бы сделать так, чтобы предупреждения не сыпались, так как они у меня будут плодиться как тараканы в дальнейшем...
:)
?

pax 30.04.2015 07:12

Ответ: Вопросы от новичка
 
Достаточно вызвать
PHP код:

xclass.function( abс


ILonion 01.05.2015 02:03

Ответ: Вопросы от новичка
 
Спасибо, pax!
Подскажите еще некоторые моменты новичку, пожалуйста:

У меня ситуация, когда одномерный массив постоянного размера очень часто создается и удаляется (эмпирически). Как я понял в c# лучше всего не удалять, а переиспользовать. Значит мне необходимо его очищать. Вопрос: каким макаром это делать максимально быстро? Array.Clear()? или при каждом новом заходе new? (если второе, то что происходит с предыдущим массивом? он становится бессылочным и его будет ждать GC?);

И еще малый вопрос: использую переменные значений как public static, чтобы их можно было использовать из разных фалов скриптов. Постоянно приходится перед переменной писать имя класса. Есть ли возможность писать только переменную? Использовать namespace? Чего-то юнити не хочет переваривать это дело в данном случае.

pax 01.05.2015 10:59

Ответ: Вопросы от новичка
 
1. Массив можно объявить в классе, а не в функции, там он останется на все время жизни класса. Все массивы, создаваемые как временные в методах удаляются сборщиком мусора время от времени, если на них не сохраняется ссылок.

2. C# строго типизированный язык, все переменные классов должны иметь конкретный тип. Только для переменных методов допускается использовать ключевое слово var с одновременной инициализацией переменной, которое означает, что переменная будет типа значения выражения справа от равно.

ILonion 01.05.2015 12:39

Ответ: Вопросы от новичка
 
Ох, я совершенно криво задал вопрос, из-за этого возникла путаница.
Во втором вопросе имел ввиду следующее:

в файле 1 я объявляю переменные:

PHP код:

public class void xclass()
{
public static 
int var;


в файле 2 использую переменную:

PHP код:

public class void dest()
{
xclass.var += 1;


Имеется ли возможность отбросить 'xclass' в файле 2 ?

seaman 01.05.2015 12:52

Ответ: Вопросы от новичка
 
Файл 2:
PHP код:

using myVar xclass.var;
public class 
void dest()
{
    
myVar  += 1;


https://msdn.microsoft.com/en-us/lib...=vs.71%29.aspx

pax 01.05.2015 13:13

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от seaman (Сообщение 295464)
Файл 2:
PHP код:

using myVar xclass.var;
public class 
void dest()
{
    
myVar  += 1;


https://msdn.microsoft.com/en-us/lib...=vs.71%29.aspx

Алиасы возможны только для пространств имен и для типов.

Цитата:

Сообщение от ILonion (Сообщение 295462)
Ох, я совершенно криво задал вопрос, из-за этого возникла путаница.
Во втором вопросе имел ввиду следующее:

в файле 1 я объявляю переменные:

PHP код:

public class void xclass()
{
public static 
int var;


в файле 2 использую переменную:

PHP код:

public class void dest()
{
xclass.var += 1;


Имеется ли возможность отбросить 'xclass' в файле 2 ?

Нет, не может быть глобальных переменных в C#, могут быть глобальные переменные классов.

ILonion 01.05.2015 16:11

Ответ: Вопросы от новичка
 
Большое спасибо, всё понятно!
Но в связи с этим возник еще один вопрос:

файл1, основной скрипт с апдейт:
PHP код:

public class MAIN MonoBehaviour
{
         
void start()
         {
         }
         
void update()
         {
             
///...
             
xclass.xfunction()
             
///...
         
}


файл2, какой-то метод:
PHP код:

public class xclass MonoBehaviour
{
          public static 
int param1 154;
          public static 
int param2 234;
          public static 
int param3;

          public static 
void xfunction()
          {
               
///...
               
param3 param2 param1;
               
///...
          
}


В данном случае при вызове xfunction() из update(), переменные param1,2,3 будут объявляться и занимать собой память - когда? при вызове метода или перед первым запуском? они будут объявляться единожды или каждый раз? У меня такой пробел в понимании, который хочется устранить)

h1dd3n 01.05.2015 17:22

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ILonion (Сообщение 295472)
единожды или каждый раз? У меня такой пробел в понимании, который хочется устранить)

единожды.

инициализацией занимается среда выполнения (то есть это не программеры unity писали).

насколько я понимаю конечному разработчику неизвесто когда будут проинициализированы такие поля, однако 100% гарантировано что это будет сделано до первого обращения.

ILonion 01.05.2015 18:08

Ответ: Вопросы от новичка
 
Теперь понятно. Спасибо!

h1dd3n 01.05.2015 18:28

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ILonion (Сообщение 295448)
У меня ситуация, когда одномерный массив постоянного размера очень часто создается и удаляется (эмпирически). Как я понял в c# лучше всего не удалять, а переиспользовать. Значит мне необходимо его очищать. Вопрос: каким макаром это делать максимально быстро? Array.Clear()? или при каждом новом заходе new? (если второе, то что происходит с предыдущим массивом? он становится бессылочным и его будет ждать GC?);

А что значит часто создается и удаляется? Тебе этот массив нужен как временная вспомогательная структура ? Или как например список игроков ?

ILonion 01.05.2015 22:24

Ответ: Вопросы от новичка
 
У меня одномерным массивом описана трехмерная матрица положений объектов в 3д пространстве (кубик рубика). Достаточно большая - 14^3.
При определенных условиях часть массива (плоскость элементов, т.е. 14^2) срезается с "одной стороны" и добавляется с "другой", по разным осям (как торт отрезать). Все "среднее" содержимое тоже как бы "сдвигается", поэтому, в работе весь массив 14^3.
в блитце реализовывал чере bbBank. там копировал массив во времянку, потом разом удалял (freebank) весь оригинальный массив, пересоздавал на лету, и заливал (copybank) с нужным смещением "плоскости" , из массива времянки.

EvilOkta 03.05.2015 00:26

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

Primer = new PrimerClass(1,2,3); 

затем я снова создаю экземпляр класса абсолютно по такому же принципу и в тот же объект (правильно называю надеюсь?)
PHP код:

Primer = new PrimerClass(4,5,6); 

Что случится с первым экземпляром класса? Логика подсказывает что сущность будет уничтожена, но интересует все-таки мнение экспертов, что с ней происходит? Она просто замещается вторым экземпляром или их становится две?

Igor 03.05.2015 00:37

Ответ: Вопросы от новичка
 
Если ссылка на первый объект есть где-нибудь ещё (например, до создания второго экземпляра была строчка PrimerOld = Primer), то он не удалится.
Если ссылки на него не будет, сборщик мусора его уберёт когда-нибудь.
Ещё есть нюанс со структурами - они, кажется, копируются и передаются по значению - т.е., в коде типа var p = new Point(1,2) новые значения полей x и у будут записаны прямо поверх старых. Сборщик мусора для структур не вызывается - можно провести аналогию с переменными типа int - их явно никто не собирает, потому что они или на стеке или в составе другого объекта.

ILonion 04.05.2015 02:05

Ответ: Вопросы от новичка
 
Подскажите, пожалуйста, правильно ли будет в данном случае использовать .Close() ?
А то заморочили тут голову: https://msdn.microsoft.com/ru-ru/lib...eam.close.aspx
PHP код:

byte[] bank = new byte[100];
string filename = @"\dat.dat";
///
string save_path Directory.GetCurrentDirectory() + filename;
if (
File.Exists(save_path))
{
       
writer = new BinaryWriter(File.Open(save_pathFileMode.Open));
       {
              
writer.Seek(0,SeekOrigin.End);
              
writer.Write(bank);
              
writer.Close();
       }



seaman 04.05.2015 14:14

Ответ: Вопросы от новичка
 
Файл закрыть точно надо.
Но, имхо - используй using и не парься. Зря его что-ли выдумали.
Код:

using(FileStream fs = File.Open(save_path, FileMode.Open))
{
  using(BinaryWriter = new BinaryWriter(fs))
  {
      ...
  }
}


h1dd3n 04.05.2015 15:08

Ответ: Вопросы от новичка
 
Мало того что файл закрыть надо, надо еще Flush вызвать у райтера.

А вообще эта конструкция мне несовсем понятна:

writer.Seek(0,SeekOrigin.End);

Зачем ?

ILonion 04.05.2015 15:25

Ответ: Вопросы от новичка
 
А, понял. using гарантированно вызывает Dispose для неуправляемых. Так и сделаю, большое спасибо!

ILonion 04.05.2015 15:28

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от h1dd3n (Сообщение 295557)
Мало того что файл закрыть надо, надо еще Flush вызвать у райтера.

А вообще эта конструкция мне несовсем понятна:

writer.Seek(0,SeekOrigin.End);

Зачем ?

>>Flush - ясно. тем более нужен using)
>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?

ILonion 04.05.2015 23:43

Ответ: Вопросы от новичка
 
А вот такой вопрос. Вот здесь: https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx указано, что начиная с net 2 класс Array реализует интерфейс IList, с одной стороны, но "...члены, добавляющие, вставляющие или удаляющие элементы выбрасывают исключение NotSupportedException." с другой.
Как же все-таки в c# реализовать добавление (не знаю какой будет размер массива в процессе выполнения) и удаление элементов (актуальный список) одномерного массива? Только через Array.Resize ?

h1dd3n 05.05.2015 00:31

Ответ: Вопросы от новичка
 
List<T>

Под капотом там просто алгоритм который хранит внутри себя массив, и при добавлении элементов если массив слишком мал, создает новый и копирует туда элементы исходного (автоматом, разумеется).

Цитата:

>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?
var stream = File.Open(path, FileMode.Append);

seaman 05.05.2015 00:32

Ответ: Вопросы от новичка
 
Используйте List<T>, если часто меняется размер.
Ну или ArrayList, если не хотите дженерики.


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

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