SDL Programming

Ubuntu Korea Community Wiki
둘러보기로 이동 검색으로 이동

소개[편집]

목적[편집]

  • 이 문서는 무료 컴파일러 IDE 및 그래픽 라이브러리를 사용하여 2D 게임을 작성하는 방법에 대해 설명합니다.
  • 이 문서에서 다루는 특정 그래픽 도구는 Simple Directmedia Layer Graphics Library의 약어 인 SDL입니다.
  • SDL에 대해 알아야 할 중요한 점은 이것이 크로스 플랫폼이라는 것입니다.
  • SDL을 사용하여 작성된 프로그램은 코드를 거의 변경하지 않고 Windows, Mac 및 많은 UNIX 변형과 같은 다양한 운영 체제 플랫폼에서 실행되도록 다시 컴파일 할 수 있습니다.
  • SDL 라이브러리는 2D 유형의 게임을 쉽게 만들 수있는 기능을 제공합니다.
  • 2D 게임은 정적 필드 (예 : Pong, Donkey Kong) 또는 스크롤 (예 : Mario Bros.)에서 이루어지는 게임입니다.
  • 그래픽은 처음 설계되었을 때 사용 된 게임 시스템과 컴퓨터의 초기 제한 때문에 간단합니다.
  • 액션과 게임 플레이는 오늘날 만들어진 모든 현대 3D 게임만큼 재미있을 수 있습니다.
  • 2D 게임의 재미와 성공에 대한 간증은 Xbox Live Arcade 및 Wii Virtual Console에 대한 그들의 부활과 인기입니다.
  • SDL 라이브러리 및 SDL과 함께 작동하도록 설계된 모든 추가 지원 라이브러리가 활용됩니다.
  • 우리는 간단한 게임 인 Pong, Breakout, Minesweeper, Tetris를 만들 것입니다.
  • 또한, 끝으로 우리는 좀 더 진보 된 게임 기술을 보여주기 위해 플랫폼 스크롤링 게임을 제작합니다.

전제조건[편집]

  • 이 노트를 이해하고 시간과 노력에 투자할만한 가치가 있으려면 C++을 어느정도 알아야 됩니다.
  • 당신이 스스로 C ++을 배우고 있다면 많은 유용한 웹 사이트가 있습니다.
  • http://www.steveheller.com/cppad/Output/dialogTOC.html

왜 SDL인가[편집]

  • Id Software가 Commander Keen 게임을 실행하는 게임 엔진의 공개 버전으로 Klone Keen이라는게 있습니다.
  • 게임 커맨더 킨 (Keen Commander)은 1990 년대 초반 일련의 게임에서 셰어웨어 4로 출시되었습니다.
  • 이 게임은 닌텐도 엔터테인먼트 시스템 슈퍼 마리오 브라더스 게임의 사이드 스크롤링 동작을 복제 할 수 있다는 점에서 주목할 만했습니다.
  • 클론 킨 (Klone Keen)을 운영하려면 원본 데이터 파일이 필요합니다.
  • 이 게임은 사운드, 비디오 및 키보드 프로세싱을위한 SDL 중 하나 인 몇 가지 무료 라이브러리를 사용했습니다.
  • SDL은 일반적으로 두 번째 C ++ 과정에서 학생들에게 제공하는 일반적인 프로그래밍 과제보다 더 재미있는 프로그램을 만들 수 있도록 학생들이 배우기에 완벽한 라이브러리였습니다.

역사[편집]

  • SDL은 Sam Lantinga에 의해 만들어졌으며 1998 년에 일반인에게 공개되었습니다.
  • 그는 많은 게임 프로젝트에 참여했으며 2009 년부터 블리자드 엔터테인먼트와 함께했습니다.
  • http://www.devolution.com에서 온라인으로 이력서를 확인할 수 있습니다.
  • 전 세계에서 가장 좋아하는 게임 인 World of Warcraft에 큰 기여를 한 것을보고 감명 받았습니다.
  • Lantinga는 Windows에서 Mac으로 응용 프로그램을 이식하려는 노력을 지원하기 위해 SDL을 만들도록 영감을 받았습니다.
  • 라이브러리는 응용 프로그램 생성 및 포팅을 용이하게하기 위해 만들어졌습니다.
  • 최소한의 코드 변경으로 다른 플랫폼에 게임을 추가 할 수 있습니다.
  • 오늘날 많은 응용 프로그램은 SDL의 다양한 구성 요소를 사용하여 키보드 처리 또는 조이스틱 지원과 같은 기능을 수행하고 OpenGL6 또는 다른 라이브러리로이를 보완합니다.
  • SDL은 C로 작성되었지만 C++, Perl, C, Python 등과 함께 사용할 수 있습니다.

SDL 컴포넌트[편집]

  • SDL은 다음과 같은 서브시스템으로 구성되어 있습니다.
  • Video - 이 서브 시스템은 화면에 보이는 것을 처리합니다.
  • 게임의 시각적 구성 요소를 구성하는 창, 색상 및 스프라이트입니다.
  • 이 구성 요소는 단순한 그래픽 작업을 지원하기위한 것으로 사용자는 선, 원 등을 그릴 수있는 추가 기능을 만들 수있을 정도로 정교하다고 가정합니다.
  • Event Handling - 이 하위 시스템은 사용자가 게임과 상호 작용하는 방식을 처리합니다.
  • 사용자 창을 최소화하거나 마우스를 움직이거나 키를 누를 때마다 이벤트를 생성합니다.
  • 다른 라이브러리로 3D 게임을 제작하려는 경우에도 SDL의 이 구성 요소를 사용하면 유용합니다.
  • Joystick Handling - 이 서브 시스템은 오늘날의 조이스틱과 관련된 다양한 복잡성을 다룹니다.
  • 각 조이스틱에는 다른 수의 버튼, 다이얼, 스위치, 조이스틱 및 휠이 있습니다.
  • 이 구성 요소는 조이스틱을 관리하는 일련의 기능을 제공합니다.
  • File I/O - 이 하위 시스템은 bmp파일. SDL은 일반적으로 게임과 같은 멀티미디어 응용 프로그램을 작성할 때 씁니다.
  • 프로그래머가 cout이나 cerr를 고려할 경우 멋진 기능이 있습니다.
  • 메시지는 자동으로 데이터 파일 (stdout.txt 및 stderr.txt)에 저장됩니다.
  • 이것은 바로 사용할 수있는 훌륭한 로깅 시스템입니다.
  • Audio - 이 하위 시스템은 게임에 추가 할 수있는 사운드를 지원합니다.
  • CDROM - 이 깔끔한 하위 시스템은 사용자 CD ROM 장치에 대한 액세스 및 통신을 지원합니다.
  • Timer - 이 서브 시스템은 이벤트 또는 프로세스의 순서가 주기적으로 발생하는시기를 설정하고 제어하는 ​​기능을 제공합니다.
  • 그것은 당신이 특정 시간에 당신을 깨우기 위해 매일 설정하는 자명종과 비슷합니다.
  • Threading - SDL은 두 개 이상의 실행 스레드를 설정하고 제어하는 ​​기능을 제공합니다.
  • 독립적으로 실행되는 대규모 프로세스 내에 존재하는 하위 프로세스입니다.
  • 이 기능은 한 번에 두 가지 이상의 작업을 수행 할 수있는 기능을 프로그래머에게 제공합니다.
  • 스레드를 사용하면 통신을 관리하고 자원에 액세스해야하므로 프로그램에 복잡성이 추가됩니다.
  • 여기까지 기본 라이브러리고 추가 라이브러리로 다음과 같은게 있습니다.
  • SDL_image - 이 라이브러리는 PNG, GIF, JPEG 및 기타 여러 가지와 같은 bmp 이외의 이미지 형식을 지원합니다.
  • SDL_mixer - 이 라이브러리는 더 많은 형식 세트에서 음악 및 사운드 샘플을 재생할 수 있도록 지원합니다.
  • WAV, MOD, MP3 등 - 인기있는 MikMod MOD, Timidity MIDI, Ogg Vorbis 및 SMPEG MP3 라이브러리로 믹스 된 16 비트 스테레오 오디오와 동시에 단일 채널의 음악을 동시에 재생할 수 있습니다.
  • SDL_net - 이 라이브러리는 "크로스 플랫폼 네트워킹"기능 세트를 제공합니다.
  • 채팅 클라이언트 및 서버 응용 프로그램이 포함되어 있습니다.
  • SDL_ttf -이 라이브러리는 트루 타입 글꼴을 사용할 수 있는 기능을 제공합니다.
  • 우리는 이것을 게임 스크린에 텍스트를 표시하기 위해 사용할 것입니다.
  • 이 라이브러리는 운영 체제 기능에 대한 계층 또는 랩퍼를 제공합니다.
  • 라이브러리는 Macintosh와 Windows와 같은 플랫폼 간의 복잡성과 차이점을 숨기는 일련의 공통 기능을 제공합니다.
  • Microsoft Windows의 경우 SDL은 기본적으로 GDI 백엔드를 사용합니다.
  • GDI는 Graphics Device Interface (그래픽 장치 인터페이스)의 약자로, Windows의 경우 프린터의 컴퓨터 모니터에 표시되거나 표시 될 그래픽 개체 표현에 대한 프로그래밍 지원을 제공하는 API입니다.
  • GDI는 Windows 플랫폼에서 게임을 개발하는 가장 빠르고 빠른 방법으로 알려져 있지 않습니다.
  • 다른 두 가지 인기있는 옵션은 DirectX와 OpenGL입니다. 현재 버전의 SDL은 DirectX7을 사용하도록 설계되었습니다.
  • 최신 DirectX를 직접 배우는 것보다 Windows에서 SDL에 대해 논의 할 이유가 궁금 할 것입니다.
  • 학생들은 수업이나 가정에서 Windows를 사용할 수 있지만 Linux와 같은 다른 운영 체제 플랫폼을 선호하는 학생도 모든 프로그래밍 예제를 사용할 수 있습니다.
  • Windows 운영 체제에 모든 소프트웨어를 설치한다고 가정하는 자세한 설치 지침 이외의 Windows 관련 항목은 없습니다.
  • 학생들은 아직 WinMain을 배울 필요가 없습니다. SDL Windows 응용 프로그램의 진입 점은 여전히 main()입니다.

<source lang="c"> int main (int argc, char * argv []) { } </source>

  • main() 형식이 WinMain()보다 아무래도 플랫폼에서 자유롭기 때문입니다.
  • 이 문서는 다음 C++ 개념을 알고 있다고 가정하고 쓰여집니다.
    • 데이터 타입
    • 입출력
    • 사칙연산
    • 제어문(if, else, switch, while, for)
    • 함수
  • 다음 개념을 알고 있다면 이해하기가 좀더 수월합니다.
    • Enumeration Types(열거형)
    • typedef
    • Pointers(포인터)
    • Arrays(배열)
    • Records(Struct 구조체)
    • Classes(클래스)
  • SDL이나 다른 라이브러리 사용 방법도 알아야 하지만, 아무래도 게임을 만드는게 메인입니다.
  • 프로그래밍 과정 이외에도 게임을 만들기 위한 팁들을 알려드릴것입니다.
  • 헤더파일을 만들고 사용하는 방법이라던지, 직접 변경하고 확장하기 위한 프로그램 설계 방법이라던지, 조이스틱이나 마우스 사용 방법 등을 설명할 것입니다.
  • 초보 프로그래머에게 좋은 소식은 SDL이 오픈소스라는 것입니다. 실제 작동 원리는 소스를 까보면 알 수 있습니다.

SDL 설치[편집]

SDL 라이브러리 패키지 받아오기[편집]

<source lang="bash"> sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-net1.2-dev libsdl-ttf2.0-dev </source>

Code::Blocks 설치[편집]

<source lang="bash"> sudo apt-get install codeblocks </source>

Code::Blocks SDL 마법사[편집]

SDL 커스텀 템플릿 만들기[편집]

WxDev-C++ 설치[편집]

<source lang="bash"> sudo apt-get install libwxbase3.0-dev </source>

WxDev-C++ SDL 템플릿 파일 만들기[편집]

SDL_Image 설치 및 테스트[편집]

SDL_tff 설치 및 테스트[편집]

SDL_mixer 설치 및 테스트[편집]

SDL_net 설치 및 테스트[편집]

요약[편집]

SDL 시작하기[편집]

SDL 초기화[편집]

SDL Subsystems 초기화, 닫기[편집]

비디오 컴포넌트[편집]

SDL 비디오 스트럭쳐[편집]

비디오 프로그램 만들어보기[편집]

스크린 디스플레이[편집]

디스플레이 방법 이해하기[편집]

선긋기[편집]

선긋기에 대한 역사[편집]

Slope-Intercept 알고리듬[편집]

균형 알고리듬[편집]

SDL_Rect[편집]

자르기[편집]

SDL_VideoInfo[편집]

이미지 로드[편집]

공굴리기[편집]

더블 버퍼링과 페이지 플리핑[편집]

더블 버퍼링[편집]

페이지 플리핑[편집]

다른 타입 이미지 로드[편집]

알파 블렌딩[편집]

Other Topics[편집]

요약[편집]

질답[편집]

연습문제[편집]

원그리기 알고리듬[편집]

스프라이트, 심플뷰[편집]

프로세스 이벤트[편집]

키보드 이벤트[편집]

조이스틱 이벤트[편집]

시스템 이벤트[편집]

== 마우스 이벤트

게임 구성[편집]

게임 템플릿[편집]

간단한 게임[편집]

[편집]

SDL_TTF 사용해보기[편집]

SDL Audio[편집]

간단한 오디오[편집]

준비된 SDL 함수[편집]

SDL Joystick[편집]

MindSweeper 만들어보기[편집]

Breakout 만들어보기[편집]

SDL Thread와 Timer[편집]

멀티플레이어 온라인 게임[편집]

SDL_NET[편집]

SDL_MIXER[편집]

플랫폼 게임[편집]

Crisis Mountain[편집]

Mario[편집]

게임 빌드를 위한 다른 라이브러리들[편집]