LINUX.ORG.RU

Сообщения rival

 

Доступна альфа-версия игры «Nikki and the Robots» от Joyride Laboratories

Новости — Игры
Группа Игры

В вымышленном мире будущего знаменитый злодей Dr. Lacroix планирует захватить власть над миром с помощью своей армии роботов. Вы берете на себя роль Nikki, члена секретной организации, ваша цель - помешать этим злобным планам. Действие игры проходит в самых разнообразных местах: от футуристических метрополисов до подводных сооружений, плавучих островов и даже орбитальных станций.

В игре уже имеются различные уровни, редактор и функционал для сетевого режима. Все это доступно под лицензиями LGPL и Creative Commons. Позже в том году появится режим с сюжетной линией, в которой будет раскрываться история о Nikki, Dr. Lacroix и его роботах в четырех эпизодах, которые будут доступны для скачивания за небольшую плату.

Nikki and the Robots представляет собой классический платформер 80х - 90х годов, но в основе игрового процесса лежит уникальная идея. Nikki, не использует какого-либо оружия или снаряжения во время выполнения своего задания, и может только прыгать и бегать по уровню, но зато имеется возможность взламывать роботов Dr. Lacroix, перехватывая управление над ними, с помощью компьютерных терминалов. Благодаря использованию роботов и их особенностям у Nikki появляется возможность решать головоломки, обходить препятствия и выполнять задания, имеющиеся в игре.

Основным языком разработки является Haskell. Для отрисовки 2D-графики, а также некоторых других элементов, используется Qt с аппаратно-ускоренным OpenGL бэкендом. Для реализации физики в игре использовались физический движок Chipmunk и биндинги к нему.

Скачать

Скриншоты

Исходный код

>>> Подробности

 , , , , , ,

rival ()

Google запускает пилотную программу для Chrome OS

Форум — Talks

Работа над Chrome OS идет полным ходом. Google ищет пользователей, которые могли бы протестировать ее и оставить свои замечания по поводу того, каким образом можно было бы улучшить систему.

Каждый участник пилотной программы получит Cr-48 Chrome ноутбук. От участника ожидаются регулярное использование этого ноутбука и детальные отчеты.

Программа открыта для физических лиц, предприятий, школ, некоммерческих организаций и разработчиков, находящихся в Соединенных Штатах.
Кандидаты должны быть не моложе 18 лет.

Подробности

Перемещено post-factum из OpenSource

rival ()

Общение между клиентом и сервером

Форум — Development

Клиент подключается к серверу, после чего периодически должен посылать сообщение «ping», на что сервер должен отвечать «pong». Если кто-то нарушает договоренность, соединение закрывается.
Соединение нужно для того, чтобы сервер мог посылать некоторые данные M клиентам в произвольный момент времени.
Проблема в следующем. Есть вероятность, что M будет отправлено в тот момент, когда клиент посылает «ping», в результате чего клиент может сначала получить M и оборвать соединение, так и не получив «pong».

Мое решение. После отправки «ping» ожидать «pong» некоторое время, обрабатывая все сообщения. Если за это время «pong» не был получен, то связь прерывается. Но почему-то мне это не очень нравится.

Как обычно решается такая ситуация?

rival ()

Swift IM

Галерея — Скриншоты

Swift — клиент мгновенного обмена сообщениями от Ремко Тронсона и Кевин Смита, бывших разработчиков Psi и авторов книги XMPP: The Definitive Guide.
Лицензия: GPlv3

Подробности

>>> Просмотр (1680x1050, 691 Kb)

 , , ,

rival ()

[Qt][S60] некорректная работа кода без dynamic_cast

Форум — Development

Есть кусок кода, взятый отсюда:

bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
{
    if (d->buffer != 0 && d->data == 0) {
        Q_ASSERT(d->bytesPerLine == 0);
        Q_ASSERT(d->mappedBytes == 0);

        // Вот здесь программа, запущенная на телефоне, перестает отвечать
        d->data = d->buffer->map(mode, &d->mappedBytes, &d->bytesPerLine);

        return d->data != 0;
    }

    return false;
}
И он же, но слегка подправленный.
bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
{
    if (d->buffer != 0 && d->data == 0) {
        Q_ASSERT(d->bytesPerLine == 0);
        Q_ASSERT(d->mappedBytes == 0);

        // Отладка показала, что в d->buffer хранится именно QImageVideoBuffer
        QImageVideoBuffer *ivb = dynamic_cast<QImageVideoBuffer*>(d->buffer);
        if (ivb) {
            // а тут уже вызов проходит гладко
            d->data = ivb->map(mode, &d->mappedBytes, &d->bytesPerLine);
        }

        qDebug() << d->buffer << &(*d->buffer); // 0x62aab0 0x62aab0
        qDebug() << typeid(*d->buffer).name();  // приложение зависает

        return d->data != 0;
    }

    return false;
}

Адрес в d->buffer не меняется, то есть тот же, что и здесь:

QVideoFrame::QVideoFrame(const QImage &image)
    : d(new QVideoFramePrivate(
            image.size(), pixelFormatFromImageFormat(image.format())))
{
    if (d->pixelFormat != Format_Invalid) {
        d->buffer = new QImageVideoBuffer(image);
        qDebug() << d->buffer << typeid(*d->buffer).name(); // 0x62aab0 17QImageVideoBuffer
    }
}

Кто может объяснить мне такое поведение?

rival ()

RSS подписка на новые темы