Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

Отталкивалась исключительно от АСДС. Пока вылетов с использованием этих пакетов я не обнаруживала.

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]);
    }
}

 

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение

Artos,

                if updnum_items==0 then
                    return
                end

ЭТОТ кусок то понятен? :) Если ноль, то все, дальше ничего не читается из апдейта. И не пишется.

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение

Не опять, а снова. При чтении проблем нет. В записи я увидела и исправила.

 

Добавлено через 10 мин.:

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

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение

Какие корутины в движке, вы чего? Выполняется С++ логика для объекта, и тут же (в ней же) запускается ЛУА колбек...

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение

Луа крутится в отдельном от игрового потоке. ЛУА-стейт - один. Вызовы осуществляются посредством использования мьютексов и блокировки основного потока с передачей управления ЛУА (так работает луабинд, я проверяла, в совсем другом проекте, своем). Вполне допускаю, что архитектура ЛУА такова, что под вызовы из СИ создается какое-то свое окружение, существующее отдельно... Не изучала так глубоко данный вопрос. Но в любом случае - это не реализация компания-разработчик (признана нежелательной)*, а специфика луа или луабинда (не знаю, чего именно)

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


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

Тебе может и неинтересно, но советую вспомнить название топика и подобные рассуждения обретают смысл.

Естественно речь не о виндовых потоках. Просто было соображение на тему, почему это не фатал еррор. Мое соображение такое - происходит ошибка, почему-то не приводящая к вылету, ЛУА тоже не падает, возвращает управление основному потоку и так далее.

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение

Некропостинг на тему удаления значений из массива:

По синтаксису языка, присвоение любой переменной значения nil, отправляет ее (именно эту переменную) на уборку. То бишь, присвоение в цикле этого значения в хоть какой таблице, приведет к удалению этого элемента из нее. Но! Если применить такое к индексированному массиву, то нарушится целостность индексов, которая соблюдается при использовании table.remove(). Так же неправильно будет работать подсчет количества элементов.

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

  • Нравится 1

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...