понедельник, 27 января 2014 г.

Загрузчик контента в отдельном потоке SFML Часть 1

Когда в игре появляется достаточное количество контента, возникает неприятная проблема, а именного долгая загрузка вашего контента. Можно, конечно, повесить картинку, вроде "всё нормально, мы подгружаемся", но лицезреть статичную картинку во время загрузки - зрелище не из самых интересных, да к тому же не понятно -  приложение работает или просто повисло. В цикле статей я опишу, как быстро и легко сделать загрузчик с прогрессбаром.

Начнём с того, что неплохо было бы выделить всю загрузку в отдельный поток. Ну это совсем просто:
1) Главная функция потока-загрузчика
void loaderThread();
Пока что в ней ничего не будет. Разве что сделать в ней бесконечный цикл¸ внутри которого будет находиться вся логика загрузчика.
2) Добавляем следующие строки в функцию основного потока, где должен создаваться дочерний поток (чаще всего int main())
sf::Thread thread(&loaderThread);
thread.launch();
Эти строки создают новый поток и запускают его.

Теперь перейдём непосредственно к самому интересному - архитектуре загрузчика.

воскресенье, 24 ноября 2013 г.

Подключаем SFML к проекту QtCreator, Linux

Доброго времени суток, давненько я ничего не писал, чемпионаты по программированию, другие проекты, переход на Linux, QtCreator, gcc и SFML.

Эта статья будет посвящена установки SFML на Linux Distro (в моём случае openSUSE 12.3).
Я бы даже сказал, что это будет перевод статьи https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Compile-and-Link-SFML-with-Qt-Creator с авторскими комментариями.

четверг, 29 августа 2013 г.

Создаём пустое приложение. SDL

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

Для этого создадим новый файл Core.h в котором опишем класс TCore - ядро нашего приложения.

#ifndef __CORE_H__
#define __CORE_H__

#include <SDL.h>

class TCore
{
public:
  TCore();
  int Launch();
};

#endif

В методе Launch будет начинаться и заканчиваться вся логика нашего приложения. Отроем файл main.cpp и удалим из него всё лишнее, кроме точки входа int main(...) Затем подключим заголовочный файл Core.h и создадим экземпляр класса TCore. После чего вызовем метод Launch. Если вы всё сделали правильно, то получиться у вас должно было примерно следующее:

#include "SYS\Core.h"

int main( int argc, char* argv[] )
{
  TCore Core;
  return Core.Launch();
}
 
На этом закроем main.cpp - он нам больше никогда не понадобится.

среда, 28 августа 2013 г.

Hello World с использованием SDL? Легко!

Начнём с того, что нам необходимо как-то получить эту библиотеку. На самом деле всё очень просто. Вот несколько простых шагов, которые должны будут помочь вам в установке и запуске первого приложения с использованием SDL.

  1. Идём на страницу загрузки на официальном сайте libsdl.org (я использую самый актуальный на момент написания статьи SDL2 )
  2. Нам понадобятся исходники (Source Code)
  3. После загрузке в архиве будут лежать дальнейшие инструкции по установке, следуйте им и у Вас всё получится. Для пользователей Visual Studio я детально опишу процесс.
Итак у нас есть исходники SDL и Visual Studio 2008 или новее.
Смело распаковываем архив в любое удобное для вас место - ищем внутри папку VisualC

Что же такое SDL

SDL это кросс-платформенная библиотека предназначенная для низкоуровнего доступа к аудио, вводу, аппаратной графике через OpenGL и DirectX. В настоящее время SDL достаточно популярно и мы можем увидеть её применение повсеместно, начиная от плееров, эмуляторов и заканчивая большим количеством игр, заслуживших высокую оценку игрового сообщества.
На данный момент SDL полностью поддерживает Windows, Mac OS X, Linux, iOS и Android.
Сама библиотека написана на языке C, при этом нативно поддерживает язык C++. Так же можно найти версии библиотеки для таких языков, как C#, Pyhon и Pascal.

Перевод статьи About SDL.

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

Куваев Александр.
ICQ: 472811290
e-mail: vinetorul@yandex.ru

вторник, 20 августа 2013 г.

Как быстро выделить все дочерние элементы данного элемента в TTreeView, Delphi? Есть ответ!

Просто "становимся" на его первый дочерний элемент и выделяем до последнего, для последнего проделываем то же самое, пока не закончатся =)

// Powered By Magic
procedure TfmMain.TreeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

  procedure Select(const aNode: TTreeNode);
  var
    i: Integer;
  begin
    if not aNode.HasChildren then
      Exit;
    TreeView.Select(aNode.getFirstChild, [ssCtrl, ssShift]);
    TreeView.Select(aNode.GetLastChild, [ssCtrl, ssShift]);
    Select(aNode.GetLastChild);
  end;

var
  vNode: TTreeNode;
begin
  vNode := TreeView.GetNodeAt(X, Y);
  if Assigned(vNode) then
  begin
    Select(vNode);
  end;
end;

С наилучшими пожеланиями,
Куваев Александр.
ICQ: 472811290
e-mail: vinetorul@yandex.ru