[ На главную · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DarkMN  
Форумы » GameDev » Программирование игр » Мини фак по SDL (Simple DirectMedia Layer.)
Мини фак по SDL
DarkMN Дата: Среда, 10/12/08, 11:40 | Сообщение # 1
Лейтенант
Группа: Developer
Сообщений: 56
Репутация: 1
Статус: Offline
Откуда: Уфа
Предисловие.

SDL - библиотека предоставляет доступ к видео и аудио оборудованию вашего компьютера, а также к устройствам ввода, таким как мышь, клавиатура и джойстик. Эту библиотеку используют в самых различных программах, начиная от MPEG-проигрывателей и заканчивая эмуляторами. Но по большей части SDL используется для создания игр. Например таких как Tribes и Civilization: Call to Power.

SDL по своим возможностям очень напоминает Microsoft DirectX API. Но поддерживает большое число операционных систем (то есть ваши программы будут работать в нескольких операционных системах) и имеет интерфейс с многими языками программирования. Библиотека написана на Си (хотя прекрасно работает с С++), но поддерживает очень много других языков, даже такие как Perl, Python и PHP! Поддерживаемые операционные системы: Linux, BeOS, MacOS, Solaris, FreeBSD, IRIX, Win32. Распространяется библиотека по лицензии GNU Lesser General Public License version 2. Это означает, что вы можете без проблем создавать коммерческие программы.
SDL создал замечательный человек Sam Lantinga, который работает в компании Blizzard Entertainment и работал в компании Loki Entertainment Software ведущим программистом. История SDL начинается с времен, когда Сэм работал над программой эмулятором Макинтош для Windows. Он заметил, что многие куски кода без проблем могут работать в Linux. И он решил создать небольшую библиотеку, чтобы ей могли воспользоваться другие программисты. В октябре 1997 был выпущен релиз библиотеки с версией 0.3, а позже эту библиотеку во всю использовала компания Loki Software для портирования игр под Linux.
Как говорит Сэм, сравнивать SDL и DirectX все равно что сравнивать апельсин и яблоко. Единственное сходство в том, что это фрукты. SDL предоставляет значительно более простой API, чем DirectX. SDL изначально создана для 2D-графики и не имеет непосредственно функций для 3D-графики, но прекрасно дружит с OpenGL. Для поддержки сетевых функций можно использовать библиотеку SDL_net.
Конечно, выбор библиотеки для своего проекта - личное дело каждого, но все-таки SDL является бесспорным лидером для создания игр или мультимедиа-программ. Если вы не хотите использовать SDL для своей игры, то все равно рекомендую ознакомиться с приемами работы с библиотекой, чтобы повысить уровень своего образования.

Установка.

Прежде чем устанавливать библиотеку SDL, необходимо ее где-нибудь взять. Самую последнюю версию можно всегда найти на официальном сайте www.libsdl.org. Там можно достать не только библиотеку SDL для всех поддерживаемых платформ, но и другие библиотеки для облегчения программирования SDL-приложений. Например для работы с практически любыми графическими форматами SDL Image или для работы со звуком SDL mixer и очень много других библиотек, в том числе и для облегчения разработки игр. Там же вы найдете огромное количество документации.
Об установке SDL в операционных системах отличных от Linux можно найти в пакетах для этих систем. Например для установки в Win32 для Visual C++ нужно всего лишь скопировать sdl.dll в системную папку и распаковать файлы из архива (который качаете с сайта) в папку с Visual C++. Практически во все дистрибутивы Linux библиотека включена по умолчанию. Поэтому просто выбирайте ее при инсталяции. Кроме того, просто необходимо установить пакет SDL-devel, который нужен для разработки SDL-программ.

Если вы не имеете в системе установленного пакета SDL (проверить можно так: rpm -qa | grep SDL), то ставите так:
rpm -ivh SDL-x.x.x-xxx.rpm
или компилируете исходники make, make install. Если будут ошибки при компиляции ваших программ, после установки библиотеки из исходников выполните команду ldconfig (естественно от рута).
Еще одна важная часть установки - установка документации по библиотеки SDL. Если в вашей системе нету документации (обычно в /usr/share/doc), то загрузите ее с сайта.
Еще одна неприятность может возникнуть при работе приложений в полноэкранном режиме. Если программа установит разрешение экрана меньше чем текущий, то возможно, что изображение будет сфокусировано в центре, а вокруг черная рамка. Это лечится правкой XF86Config. Просто добавьте поддержку этого режима. Вот пример:

Code
Section "Screen"
        Identifier "Screen 1"
        Device     "3dfx"
        Monitor     "Samsung LCD"
        DefaultDepth 16

        Subsection "Display"
            Depth 8
            Modes "1280x1024" "1024x768" "800x600" "640x480" "320x240"
            ViewPort 0 0
        EndSubsection
        Subsection "Display"
            Depth    16
            Modes    "1280x1024" "1024x768" "800x600" "640x480"
            ViewPort    0 0
        EndSubsection
EndSection

Добавлено (10/12/08, 11:40)
---------------------------------------------
Компиляция.

Давайте рассмотрим очень важный вопрос: как компилировать программы, использующие библиотеку SDL. Что касается компиляции под платформу, отличную от Linux, внимательно ознакомьтесь с документацией для этой платформы. Например, чтобы компилировать программы в среде Visual C++, прочтите файл VisualC.html, который находится в архиве для Visual Studio (см. www.libsdl.org). Еще я просто рекомендую прочитать SDL FAQ, который можно найти все на том же сайте. Пока я расскажу как компилировать программы для Linux.
И так, мы будем использовать компилятор g++ (используйте gcc, если пишете на Си). Сначала рассмотрим все, что касается #include. При подключении заголовков SDL к программе (обычно они находятся в /usr/include/SDL) мы делаем так: #include "SDL.h". А потом указываем компилятору, где искать ненайденные заголовки (как вы помните, если заголовок в команде #include взят в кавычках, то он должен быть в текущей директории). Это нужно для переносимости программ, потому что не у всех заголовки будут лежать там же, где и у вас. При компиляции подставляем в качестве опции:
-I/usr/include/SDL
Или другой путь, если он у вас отличается от моего. Нам также нужно указать сами библиотеки, которые будем линковать к нашей программе, а также путь к этим библиотекам: -L/usr/lib указывает путь к библиотекам, а -lSDL линкует библиотеку libSDL.so к программе(опция -L указывает путь к библиотекам, а опция -l линкует библиотеку).
Соберем все в кучу. Я приведу листинг небольшой програмки, использующей SDL. Вы можете не стараться вникнуть в код, потому что все это разберем далее в уроках.

Code
#include "SDL.h"       
#include <stdio.h>    

int main() {
          
       printf("Initializing SDL.\n");
          
       if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {    
           printf("Could not initialize SDL: %s.\n", SDL_GetError());
           exit(-1);
       }

       printf("SDL initialized.\n");

       printf("Quiting SDL.\n");
          
       SDL_Quit();
          
       printf("Quiting....\n");

       return 0;
}

Пример взят из SDL Documentation. Назовите его test.cxx и давайте попробуем его собрать.

Code
g++ -O3 -o test test.cxx -I/usr/include/SDL -L/usr/lib -lSDL

Флаг -O3 задает уровень оптимизации (-O3 задает максимальный уровень, по умолчанию используется -O2).
Флаг -o задает имя программы на выходе.
Все остальное я уже рассказал. Но существует более элегантный способ задать флаги компиляции SDL. Просто выполните команду sdl-config --cflags --libs. Все необходимые для компиляции флаги SDL будут на выходе этой программы. То есть мы могли бы сделать так:
Code
g++ -O3 -o test test.cxx `sdl-config --cflags --libs`

Где эту команду нужно поместить между знаков ` (это там где тильда ~).
Если проект большой и состоит из многих файлов, то компилировать каждый неудобно и сложно. По этому приготовьтесь получить CRASH-курс по утилите make.
Наверно не раз собирали какую-нибудь программу, набирая в консоли make. Согласитесь, это гораздо проще, чем компилировать каждый файл проекта примерно так же, как я показывал (см. выше). Чтобы работать с утилитой make, вы должны создать файл с именем "Makefile" в директории с проектом. Теперь возьмем пример простого make-файла для нашей тестовой программы, чтобы было легче разобраться:

Code
TARGET = test
LIBS = `sdl-config --libs`
CFLAGS = -O3 `sdl-config --cflags`
CC = g++

all:
    $(CC) $(CFLAGS) -c test.cxx -o test.o
    $(CC) -o $(TARGET) test.o $(LIBS)
    strip $(TARGET)
clean:
    rm *.o    
    rm $(TARGET)

На первый взгляд немного сложно, но только на первый. И так, начнем по порядку. В верхней части мы задаем переменные: TARGET - имя программы на выходе, LIBS - какие библиотеки использовать, CFLAGS - уровень оптимизации и путь к заголовочным файлам библиотеки SDL, CC - имя выполняемого файла компилятора. Использовать переменные нужно так: $(ПЕРЕМЕННАЯ), т.е. заключать в круглые скобки и перед скобками ставить знак доллара. С переменными все ясно (надеюсь), теперь дальше: в make-файлах самое главное это так называемые цели (target). В нашем примере две цели - это all и clean. С новой строки мы пишем правила для сборки цели - команды, которые нам нужны. Не забудьте начинать каждую строку правил с нажатия кнопки TAB. Это обязательно. Если получите ошибку make-файла, то в первую очередь проверьте, расставлены ли знаки табуляции. Очень удобно в этом плане использовать редактор Midnight Commander, который подсвечивает табуляцию. В нашем случае мы сначала создаем object-файл, а потом программу. Строка

Code
$(CC) $(CFLAGS) -c test.cxx -o test.o

эквивалентна
Code
g++ -O3 -I/usr/include/SDL -c test.cxx -o -test.o

Опция компилятора -с указывает, что нужно пропустить финальную стадию компиляции (линковку), а создать только объектный файл. И следующая строка
Code
$(CC) -o $(TARGET) test.o $(LIBS)

эквивалентна
Code
g++ -o test test.o -I/usr/lib -lSDL

Пути могут отличаться в зависимости от системы. Команда stripоптимизирует исполняемый файл программы. Цель clean удаляет объектные файлы и запускаемый файл программы. Чтобы выполнить цель clean нужно выполнить команду make clean. Для выполнения цели all достаточно просто выполнить команду make. На самом деле синтаксис make-файлов гораздо обширнее и сложнее, но если овладеть им, то ваша жизнь облегчится во много раз. В интернете можно найти очень много информации по утилите make.
SilentHill Дата: Среда, 10/12/08, 20:03 | Сообщение # 2
Полковник
Сообщений: 260
Репутация: 7
Статус: Offline
отлично, дарк а сделать чего-нибудь на нем смогешь ?


DarkMN Дата: Суббота, 13/12/08, 20:53 | Сообщение # 3
Лейтенант
Группа: Developer
Сообщений: 56
Репутация: 1
Статус: Offline
Откуда: Уфа
ну ченить совсем простенькое можно, а вот по сложнее уже проблемотичнее dry
Форумы » GameDev » Программирование игр » Мини фак по SDL (Simple DirectMedia Layer.)
  • Страница 1 из 1
  • 1
Поиск:

Loading...
Используются технологии uCoz