Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 01.05.2015, 18:28   #2101
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Вопросы от новичка

Сообщение от ILonion Посмотреть сообщение
У меня ситуация, когда одномерный массив постоянного размера очень часто создается и удаляется (эмпирически). Как я понял в c# лучше всего не удалять, а переиспользовать. Значит мне необходимо его очищать. Вопрос: каким макаром это делать максимально быстро? Array.Clear()? или при каждом новом заходе new? (если второе, то что происходит с предыдущим массивом? он становится бессылочным и его будет ждать GC?);
А что значит часто создается и удаляется? Тебе этот массив нужен как временная вспомогательная структура ? Или как например список игроков ?
__________________
(Offline)
 
Ответить с цитированием
Старый 01.05.2015, 22:24   #2102
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

У меня одномерным массивом описана трехмерная матрица положений объектов в 3д пространстве (кубик рубика). Достаточно большая - 14^3.
При определенных условиях часть массива (плоскость элементов, т.е. 14^2) срезается с "одной стороны" и добавляется с "другой", по разным осям (как торт отрезать). Все "среднее" содержимое тоже как бы "сдвигается", поэтому, в работе весь массив 14^3.
в блитце реализовывал чере bbBank. там копировал массив во времянку, потом разом удалял (freebank) весь оригинальный массив, пересоздавал на лету, и заливал (copybank) с нужным смещением "плоскости" , из массива времянки.
(Offline)
 
Ответить с цитированием
Старый 03.05.2015, 00:26   #2103
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Вопросы от новичка

вопрос на базовую логику действия программы, надеюсь просветите.
Предположим я создаю экземпляр класса через определенный ранее конструктор
Primer = new PrimerClass(1,2,3); 
затем я снова создаю экземпляр класса абсолютно по такому же принципу и в тот же объект (правильно называю надеюсь?)
Primer = new PrimerClass(4,5,6); 
Что случится с первым экземпляром класса? Логика подсказывает что сущность будет уничтожена, но интересует все-таки мнение экспертов, что с ней происходит? Она просто замещается вторым экземпляром или их становится две?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 03.05.2015, 00:37   #2104
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Вопросы от новичка

Если ссылка на первый объект есть где-нибудь ещё (например, до создания второго экземпляра была строчка PrimerOld = Primer), то он не удалится.
Если ссылки на него не будет, сборщик мусора его уберёт когда-нибудь.
Ещё есть нюанс со структурами - они, кажется, копируются и передаются по значению - т.е., в коде типа var p = new Point(1,2) новые значения полей x и у будут записаны прямо поверх старых. Сборщик мусора для структур не вызывается - можно провести аналогию с переменными типа int - их явно никто не собирает, потому что они или на стеке или в составе другого объекта.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilOkta (03.05.2015)
Старый 04.05.2015, 02:05   #2105
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

Подскажите, пожалуйста, правильно ли будет в данном случае использовать .Close() ?
А то заморочили тут голову: https://msdn.microsoft.com/ru-ru/lib...eam.close.aspx
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();
       }

(Offline)
 
Ответить с цитированием
Старый 04.05.2015, 14:14   #2106
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Вопросы от новичка

Файл закрыть точно надо.
Но, имхо - используй using и не парься. Зря его что-ли выдумали.
using(FileStream fs = File.Open(save_path, FileMode.Open))
{
   using(BinaryWriter = new BinaryWriter(fs))
   {
       ...
   }
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (04.05.2015)
Старый 04.05.2015, 15:08   #2107
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Вопросы от новичка

Мало того что файл закрыть надо, надо еще Flush вызвать у райтера.

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

writer.Seek(0,SeekOrigin.End);

Зачем ?
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (04.05.2015)
Старый 04.05.2015, 15:25   #2108
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

А, понял. using гарантированно вызывает Dispose для неуправляемых. Так и сделаю, большое спасибо!
(Offline)
 
Ответить с цитированием
Старый 04.05.2015, 15:28   #2109
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

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

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

writer.Seek(0,SeekOrigin.End);

Зачем ?
>>Flush - ясно. тем более нужен using)
>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?
(Offline)
 
Ответить с цитированием
Старый 04.05.2015, 23:43   #2110
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

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

List<T>

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

>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?
var stream = File.Open(path, FileMode.Append);
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (05.05.2015)
Старый 05.05.2015, 00:32   #2112
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Вопросы от новичка

Используйте List<T>, если часто меняется размер.
Ну или ArrayList, если не хотите дженерики.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (05.05.2015)
Старый 05.05.2015, 00:51   #2113
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

Благодарствую, seaman, h1dd3n!
(Offline)
 
Ответить с цитированием
Старый 05.05.2015, 16:11   #2114
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Вопросы от новичка

Вопрос по анимации характерной для именно кат-сцен.
1. Как в юнити сделать анимацию камеры для кат-сцены?
2. Как вообще проще всего в юнити сделать кат-сцену используя лишь его родной функционал? (на всякий случай, вдруг я чего не знаю)
(Offline)
 
Ответить с цитированием
Старый 05.05.2015, 19:21   #2115
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы от новичка

1. Как в юнити сделать анимацию камеры для кат-сцены?
Заходишь в Window > Animation. Открывается окно, выбираем камеру и в появившемся окне жмем на красный кружок, а далее указываем имя и папку для анимации и как в 3дмаксе двигаем камеру, указываем ключи и по окончании создании анимации снова жмем на красный кружок в окне Animation. И через анимацию можно вообще все менять у объектов даже тип проекции камеры.

2. Как вообще проще всего в юнити сделать кат-сцену используя лишь его родной функционал? (на всякий случай, вдруг я чего не знаю)
Например так:
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (05.05.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com