xStream 87 Опубликовано 16 Января 2012 (изменено) Отталкивалась исключительно от АСДС. Пока вылетов с использованием этих пакетов я не обнаруживала. sub update_read { ($_[0]->{'upd:num_items'}) = $_[1]->unpack('C'); return if ($_[0]->{'upd:num_items'} == 0); @{$_[0]->{'upd:ph_position'}} = $_[1]->unpack('f3'); @{$_[0]->{'upd:ph_rotation'}} = $_[1]->unpack('C4'); my $info_mask = $_[0]->{'upd:num_items'} >> 5; if (($info_mask & 0x02) == 0) { die unless $_[1]->length() >= 3; @{$_[0]->{'upd:ph_angular_vel'}} = $_[1]->unpack('C3'); } if (($info_mask & 0x04) == 0) { die unless $_[1]->length() >= 3; @{$_[0]->{'upd:ph_linear_vel'}} = $_[1]->unpack('C3'); } } sub update_write { $_[1]->pack_properties($_[0], (upd_properties_info)[0]); return if ($_[0]->{'upd:num_items'} == 0); $_[1]->pack_properties($_[0], (upd_properties_info)[1 .. 2]); my $info_mask = $_[0]->{'upd:num_items'} >> 5; if (($info_mask & 0x02) == 0) { $_[1]->pack_properties($_[0], (upd_properties_info)[3]); } if (($info_mask & 0x04) == 0) { $_[1]->pack_properties($_[0], (upd_properties_info)[4]); } } Изменено 16 Января 2012 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 16 Января 2012 Artos, if updnum_items==0 then return end ЭТОТ кусок то понятен? Если ноль, то все, дальше ничего не читается из апдейта. И не пишется. Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 16 Января 2012 Не опять, а снова. При чтении проблем нет. В записи я увидела и исправила. Добавлено через 10 мин.: Я еще не понимаю, зачем делать break, если однозначно надо завершать функцию... Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 22 Января 2012 Какие корутины в движке, вы чего? Выполняется С++ логика для объекта, и тут же (в ней же) запускается ЛУА колбек... Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 22 Января 2012 (изменено) Луа крутится в отдельном от игрового потоке. ЛУА-стейт - один. Вызовы осуществляются посредством использования мьютексов и блокировки основного потока с передачей управления ЛУА (так работает луабинд, я проверяла, в совсем другом проекте, своем). Вполне допускаю, что архитектура ЛУА такова, что под вызовы из СИ создается какое-то свое окружение, существующее отдельно... Не изучала так глубоко данный вопрос. Но в любом случае - это не реализация компания-разработчик (признана нежелательной)*, а специфика луа или луабинда (не знаю, чего именно) Изменено 22 Января 2012 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 23 Января 2012 Вот если честно, то с практической точки зрения совершенно не интересно, что и как там виснет. С практической точки зрения важно только то, что данный вызов после сбоя перестаёт вызываться. Тебе может и неинтересно, но советую вспомнить название топика и подобные рассуждения обретают смысл. Естественно речь не о виндовых потоках. Просто было соображение на тему, почему это не фатал еррор. Мое соображение такое - происходит ошибка, почему-то не приводящая к вылету, ЛУА тоже не падает, возвращает управление основному потоку и так далее. Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение
xStream 87 Опубликовано 7 Декабря 2012 Некропостинг на тему удаления значений из массива: По синтаксису языка, присвоение любой переменной значения nil, отправляет ее (именно эту переменную) на уборку. То бишь, присвоение в цикле этого значения в хоть какой таблице, приведет к удалению этого элемента из нее. Но! Если применить такое к индексированному массиву, то нарушится целостность индексов, которая соблюдается при использовании table.remove(). Так же неправильно будет работать подсчет количества элементов. Однако, очень часто, во многих задачах, индексы не имеют значения, когда таблица использует просто для хранения набора каких либо данных. И да, я тоже придерживаюсь мнения: если необходимо сохранить индексы, и в то же время снести какие-то значения, то я предпочту создать новую таблицу взамен старой. 1 Все, кто стоит на моем пути: идите нахрен и там погибните! © Поделиться этим сообщением Ссылка на сообщение