Ugolnik's Family blog

Различные заметки обо всем.

Browsing Posts in Programming

Года два назад я писал про физический движок Chipmunk, который является наследником физического движка Box2D. Движок написан на C++ Erin Catto, использовался MS Visual C++ под Windows. Собирается (и, вероятно, работает) и под Linux, и под Mac OS X. Лицензия MIT.

Недавно вышла версия 2.1.2 движка.

Box2D v2.0.2 Руководство – перевод на русский язык оригинальной документации.

Для тех, кто жаждет разработки под PSP без ощутимых вложений зеленых бумажек есть Minimalist PSPSDK. А для особых “ценителей” есть и эмулятор самого устройства – jpcsp.
Что SDK, что эмулятор работают и под Linux в том числе.

Подумалось, может потратить пару выходных на портирование какой-нибудь своей игры?..

Сегодня ночью сделал поддержку формата PSD (растровый формат Adobe Photoshop) в Simple Viewer GL. На данный момент реализовал не все возможности, но тем не менее я доволен ;)
Реализовывал формат PSD по спецификации Adobe Photoshop File Format Summary. Поддержку слоев и цветовых режимов (Bitmap (monochrome), Gray-scale, Indexed color (palette color), Multichannel color, Duotone (halftone), Lab color) пока не реализовал. Но у меня нет ни Adobe Photoshop, ни файлов в этих форматах. Попрошу на работе сделать примеры таких файлов, тогда займусь доработкой.

Не знал, что максимальный размер изображения в PSD формате всего 30000 х 30000 пикселей.

Статья “Как заставить неправильный код выглядеть неправильно”, поясняет в чем отличие Венгерской для Приложений (Apps Hungarian) от Системной Венгерской.
Я давно перестал использовать Венгерскую нотацию, которая на самом деле была Системной Венгерской. Но только сейчас понял, почему мне она казалась несколько странной.

Системная Венгерская:

char szVar[]; // ясен только тип переменной, но не ее назначение
unsigned long ulVar; // аналогично

Венгерская для Приложений:

float dxVar; // назначение - хранить информации о дельте по ширине
int cVar; // счетчик

Более подробно написано в статье и в ссылках в конце статьи.

Нашел у себя в черновиках. Не уверен, что я этот код где-либо использовал, но для затравки сойдёт.
Object-C:

const char *path;
path = [[[NSBundle mainBundle] bundlePath] UTF8String];

Или так:

CFBundleRef bundle;
bundle = CFBundleGetMainBundle();

CFURLRef res;
res = CFBundleCopyResourcesDirectoryURL(bundle);

CFStringRef resStr;
resStr = CFURLCopyFileSystemPath(res, kCFURLPOSIXPathStyle);

char path[8192];
CFStringGetFileSystemRepresentation(resStr, path, sizeof(path));

Замечательную статью нашел на DEV.by Таблицы против div’ов. Из ада в…. ад?. Рекомендую начинающим и продолжающим.

Инструкция от Apple по созданию Framework

Условия для возникновения бага:

  • Запустить несколько приложений (к примеру MS Explorer).
  • Минимизировать их (нужно минимизировать ВСЕ окна).
  • Запустить в полноэкранном режиме SDL-приложение.
  • Нажать Alt+Tab.

Курсор перемещается в координату 0,0. Попытка активировать мышью минимизированное приложение приводит к тому, что курсор снова перемещается в 0,0. Переключиться на минимизированное приложение можно только с помощью Alt+Tab.

Гугл указал на SDL (XP and Vista) window management bugs, со схожей проблемой.
В качестве решения предлагается пропатчить и пересобрать SDL. Я списался с Michael Kurinnoy и он подтвердил, что это 100% рабочее решение.

Сделав небольшое тестовое приложение, я заметил, что этот баг возникает в случае SDL_ShowCursor(0).

Решение напросилось само собой:

SDL_Event evt;
while(SDL_PollEvent(&evt)) {
  switch(evt.type) {
  case SDL_ACTIVEEVENT:
   if(evt.active.state != SDL_APPMOUSEFOCUS) {
     if(evt.active.gain == 1) {
      SDL_ShowCursor(0);
     }
     else {
      SDL_ShowCursor(1);
     }
   }
   break;
  }
}

Естественно, что в коде стоит учитывать был ли курсор спрятан и восстанавливать его в предыдущее состояние.

Chipmunk – многообещающий физический движок.
Его основные фичи (надеюсь перевод не нужен) :

  • Designed for 2D video games..
  • Circle, convex polygon, and line segment collision primitives.
  • Multiple collision primitives can be attached to the same rigid body.
  • Fast collision detection by using a spatial hash for the broad phase.
  • Extremely fast impulse solving by utilizing Erin Catto’s contact persistence algorithm.
  • Support for collision callbacks based on object types.
  • Impulses applied to contact points can be retrieved after the impulse solver has finished.
  • Several kinds of joints available.
  • C99 implementation, no external dependencies.
  • Ruby extension available.
  • Simple, read the documentation.
  • Unrestrictive MIT license.

Рекомендую посмотреть демки и примеры. Впечатляет.

Добавляем в проект файл resource.rc.

Иконка приложения:

// should be first in alphabetical ID list, we use "AAAAAAA" name
AAAAAAA_PROGRAM_ICON ICON "PATH_to_icon/icon_NAME.ico"

continue reading…