ÆÄÀ̰ÔÀÓ ÀÚ½À¼­
È­¸éÇ¥½Ã ¸ðµå ¼³Á¤¹ý

ÀÛ¼º ÇÇÆ® ½¬³Ê½º(Pete Shinners)
pete@shinners.org

Revision 1.1, May 21, 2002


ÇÑ±ÛÆÇ johnsonj 2005.05.02

µé¾î°¡´Â ¸»

ÆÄÀ̰ÔÀÓ¿¡¼­´Â È­¸é Ç¥½Ã ¸ðµå¸¦ ¼³Á¤ÇØ¾ß ¸ð´ÏÅÍ¿¡ À̹ÌÁö Ç¥¸éÀÌ ¸¸µé¾îÁö°í ±×·¡¾ß º¼ ¼ö ÀÖ´Ù. ÀÌ Ç¥¸é(surface)Àº Àüü È­¸éÀÏ ¼öµµ ÀÖ°í, ¶Ç´Â â °ü¸®ÀÚ¸¦ Áö¿øÇÏ´Â Ç÷§ÆûÀ̶ó¸é âÀÌ µÉ ¼öµµ ÀÖ´Ù. È­¸é Ç¥½Ã Ç¥¸éÀº Ç¥ÁØÀûÀÎ ÆÄÀ̰ÔÀÓ Ç¥¸é °´Ã¼¿¡ ºÒ°úÇÏ´Ù. À̹ÌÁö Ç¥¸é¼Ò(¿ªÁÖ: Ç¥¸éÀ» ä¿ì´Â ³»¿ë)¸¦ ¸ð´ÏÅÍ¿¡ ¾÷µ¥ÀÌÆ®ÇÏ·Á¸é pygame.display ¸ðµâ¿¡ Àִ Ưº°ÇÑ ÇÔ¼öµéÀÌ ÇÊ¿äÇÏ´Ù.

´ëºÎºÐÀÇ ±×·¡ÇÈ ¶óÀ̺귯¸®¿¡¼­ ±×·± °Í º¸´Ù ´õ ½±°Ô ÆÄÀ̰ÔÀÓ¿¡¼­ È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀåÁ¡ÀÌ ÀÖ´Ù¸é È­¸éÇ¥½Ã ¸ðµå°¡ ¼³Á¤ÀÌ ºÒ°¡´ÉÇϸé pygameÀº ¿äûÇÑ È­¸éÇ¥½Ã ¸ðµå¸¦ Èä³»³» Áشٴ °ÍÀÌ´Ù. PygameÀº ¿äûÇÑ ¼³Á¤¿¡ °¡Àå ºÎÇÕÇÏ´Â È­¸éÇ¥½Ã ÇØ»óµµ¿Í »ö»ó ±íÀ̸¦ ¼±ÅÃÇÑ´Ù. ±×·¡¼­ ¿äûÇÑ ÇüÅÂÀÇ È­¸é¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. »ç½Ç, pygame.display ¸ðµâÀº SDL ¶óÀ̺귯¸®¸¦ µÑ·¯½Ñ ¹ÙÀεùÀ̸ç, SDLÀÌ ½ÇÁ¦·Î ÀÌ ¸ðµç ÀÏÀ» ÇØ ÁÖ´Â °ÍÀÌ´Ù.

ÀÌ·± ½ÄÀ¸·Î È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÏ´Â °ÍÀº Àå´ÜÁ¡ÀÌ ÀÖ´Ù. ÀåÁ¡Àº °ÔÀÓ¿¡¼­ ƯÁ¤ÇÑ È­¸éÇ¥½Ã ¸ðµå¸¦ ¿ä±¸ÇÒ ¶§, Ç÷§Æû¿¡¼­ Áö¿øµÇÁö ¾Ê´Ù¶óµµ °ÔÀÓÀÌ ½ÇÇàµÈ´Ù´Â °ÍÀÌ´Ù. ¶Ç ¹«¾ð°¡¸¦ ½ÃÀÛÇϱ⿡µµ ´õ ÆíÇÏ´Ù. ¾ðÁ¦³ª ½±°Ô ´Ù½Ã µÇµ¹¾Æ°¡ ¸ðµå ¼±ÅÃÀ» Á» ´õ ±¸Ã¼ÀûÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ´ÜÁ¡Àº ¿äûÇÑ ´ë·Î ¾ðÁ¦³ª µ¹·Á¹Þ´Â °ÍÀº ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. ¶Ç È­¸éÇ¥½Ã ¸ðµå°¡ ¿¡¹Ä·¹ÀÌµå µÇ¾ß¸¸ ÇÏ´Â °æ¿ì¶ó¸é¼öÇ༺´Éµµ ÀúÇϵȴÙ. ÀÌ ÀÚ½À¼­´Â Ç÷§Æû È­¸éÇ¥½Ã ´É·ÂÀ» ÁúÀÇÇϰí, °ÔÀÓÀ» À§ÇØ È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤Çϴµ¥ »ç¿ëµÇ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» ÀÌÇØÇϵµ·Ï µµ¿Í ÁÙ °ÍÀÌ´Ù.


¼³Á¤ÀÇ ±âº»

Á¦ÀÏ ¸ÕÀú ¾Ë¾Æ¾ß ÇÒ °ÍÀº ÇöÀç È­¸éÇ¥½Ã ¸ðµå¸¦ ½ÇÁ¦·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀÌ´Ù. È­¸éÇ¥½Ã ¸ðµå´Â pygame.display ¸ðµâÀÌ ÃʱâÈ­ µÈ ÈĶó¸é ¾ðÁ¦µçÁö ¼³Á¤Çصµ ÁÁ´Ù. ÀÌÀü¿¡ È­¸é Ç¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÑ ÀûÀÌ ÀÖ´õ¶óµµ, ´Ù½Ã ¼³Á¤Çϸé ÇöÀç ¸ðµå°¡ ¹Ù²ï´Ù. È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÏ´Â °ÍÀº pygame.display.set_mode((width, height), flags, depth) ÇÔ¼ö·Î 󸮵ȴÙ. ÀÌ ÇÔ¼ö¿¡ ¿ä±¸µÇ´Â À¯ÀÏÇÑ ÀÎÀÚ´Â »õ·Î¿î È­¸éÇ¥½Ã ¸ðµå¸¦ Áö½ÃÇÏ´Â ³Êºñ¿Í ³ôÀ̸¦ ´ã°í ÀÖ´Â ¿¬¼Ó¿­ÀÌ´Ù. ±íÀÌ(depth) Ç÷¡±×´Â Ç¥¸é¿¡ ´ëÇÏ¿© Çȼ¿´ç ¿ä±¸µÇ´Â ºñÆ®°³¼öÀÌ´Ù. ÁÖ¾îÁø ±íÀ̰¡ 8À̶ó¸é, pygameÀº »ö±ò-¦Áþ±âµÈ Ç¥¸éÀ» ¸¸µç´Ù. Á» ´õ ¸¹Àº ºñÆ®ÀÇ ±íÀ̰¡ ÁÖ¾îÁö¸é, pygameÀº ÆÑ Ä÷¯ ¸ðµå¸¦ »ç¿ëÇÑ´Ù. ±íÀÌ¿Í »ö»ó¿¡ °üÇÑ ´õ ¸¹Àº Á¤º¸´Â È­¸éÇ¥½Ã(display) ¸ðµâ°ú Ç¥¸é(surface) ¸ðµâ¿¡ ´ëÇÑ ¹®¼­¿¡ ã¾Æ º¼ ¼ö ÀÖ´Ù. ±íÀÌ¿¡ ´ëÇÑ ±âº» °ªÀº 0ÀÌ´Ù. ÀÎÀÚ°¡ 0À¸·Î ÁÖ¾îÁö¸é, pygameÀº »ç¿ëÇϱ⿡ °¡Àå ÀûÇÕÇÑ ºñÆ® ±íÀ̸¦ ¼±ÅÃÇϴµ¥, º¸Åë ½Ã½ºÅÛÀÇ ÇöÀç ºñÆ® ±íÀÌ¿Í µ¿ÀÏÇÏ´Ù. Ç÷¡±×(flags) ÀÎÀÚ·Î È­¸é Ç¥½Ã ¸ðµåÀÇ ±âŸ Ư¡µéÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù. HWSURFACE Ç÷¡±×·Î´Â È­¸éÇ¥½Ã Ç¥¸éÀ» Çϵå¿þ¾î ¸Þ¸ð¸®¿¡ ¸¸µé ¼ö ÀÖ´Ù. ¿ª½Ã, ÀÌ¿¡ °üÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â pygame ÂüÁ¶ ¹®¼­¸¦ º¸ÀÚ.


°áÁ¤ÇÏ´Â ¹ý

±×·¡¼­ ¾î¶»°Ô ÇÏ¸é °ÔÀÓÀÌ ½ÇÇàµÉ Ç÷§Æû°ú ±×·¡ÇÈ ÀÚ¿ø¿¡ °¡Àå Àß ÀÛµ¿ÇÏ´Â È­¸é Ç¥½Ã ¸ðµå¸¦ ¼±ÅÃÇÒ ¼ö Àִ°¡? È­¸éÇ¥½Ã ÀåÄ¡¿¡ °üÇÑ Á¤º¸¸¦ ¸ðÀ¸´Âµ¥´Â ¿©·¯°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ÀÌ ¸ðµç ¹æ¹ýµéÀº ¹Ýµå½Ã È­¸éÇ¥½Ã ¸ðµâÀÌ ÃʱâÈ­µÈ ´ÙÀ½¿¡ È£ÃâµÇ¾î¾ß ÇÏÁö¸¸, È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤Çϱâ Àü¿¡ È£ÃâÇÏ°í ½ÍÀ»Áöµµ ¸ð¸£°Ú´Ù. ¸ÕÀú, pygame.display.get_info() ÇÔ¼ö´Â VidInfo¶ó´Â Ưº°ÇÑ °´Ã¼ À¯ÇüÀ» µ¹·ÁÁִµ¥, ÀÌ °´Ã¼¿¡¼­ ±×·¡ÇÈ µå¶óÀ̹öÀÇ ´É·Â¿¡ °üÇÏ¿© ¸¹Àº Á¤º¸¸¦ ¾Ë ¼ö ÀÖ´Ù. pygame.display.list_modes(depth, flags) ÇÔ¼ö´Â ½Ã½ºÅÛ¿¡¼­ Áö¿øÇÏ´Â ±×·¡ÇÈ ¸ðµå¸¦ ã´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. Pygame.display.mode_ok((width, height), flags, depth) ÇÔ¼ö´Â set_mode()¿Í ¶È °°Àº ÀÎÀÚ¸¦ ¹ÞÁö¸¸, ¿äû¿¡ °¡Àå °¡±õ°Ô ºÎÇÕÇÏ´Â ºñÆ® ±íÀ̸¦ µ¹·ÁÁØ´Ù. ¸¶Áö¸·À¸·Î, pygame.display.get_driver() ÇÔ¼ö´Â pygame¿¡¼­ ¼±ÅÃµÈ ±×·¡ÇÈ µå¶óÀ̹öÀÇ À̸§À» µ¹·ÁÁØ´Ù.

Ȳ±Ý·üÀ» ²À ±â¾ïÇÏÀÚ. PygameÀº ¿äûÇÑ ¾î¶² È­¸éÇ¥½Ã ¸ðµå¿Íµµ Àß ÀÛµ¿ÇÒ °ÍÀÌ´Ù. ¾î¶² È­¸éÇ¥½Ã ¸ðµå´Â ¿¡¹Ä·¹ÀÌÆ®µÉ Çʿ䰡 Àִµ¥, ÀÌ ¶§¹®¿¡ °ÔÀÓÀÇ ¼Óµµ°¡ ¶³¾îÁú °ÍÀÌ´Ù. ¿Ö³ÄÇϸé pygameÀº "½ÇÁ¦" È­¸éÇ¥½Ã ¸ðµå¿¡ ¾÷µ¥ÀÌÆ®¸¦ ¿äûÇÒ ¶§¸¶´Ù º¯È¯ÇÒ Çʿ䰡 Àֱ⠶§¹®ÀÌ´Ù. °¡Àå ÁÁÀº ¼±ÅÃÀº pygameÀÌ ¾ðÁ¦³ª ÃÖÀûÀÇ ºñÆ® ±íÀ̸¦ °ñ¶ó¼­, ±×·¡ÇÈ ÀÚ¿øµéÀÌ ÀûÀçµÉ ¶§¸¶´Ù ±× Æ÷¸Ë¿¡ ¸ÂÃß¾î ¸ðµÎ º¯È¯Çϵµ·Ï ±×´ë·Î µÎ´Â °ÍÀÌ´Ù. pygameÀÌ ¾Æ¹« ÀÎÀÚ ¾øÀÌ ¶Ç´Â ±íÀ̸¦ 0À¸·Î ÇØ¼­ set_mode()¸¦ È£ÃâÇØ¼­ ºñÆ® ±íÀ̸¦ °í¸£µµ·Ï ±×´ë·Î µÎ¾îµµ µÈ´Ù. ¶Ç´Â mode_ok()¸¦ Á÷Á¢ È£ÃâÇÏ¿© Çʿ信 °¡Àå ºÎÇÕÇÏ´Â ºñÆ® ±íÀ̸¦ ã¾Æµµ µÈ´Ù.

È­¸éÇ¥½Ã ¸ðµå°¡ âÀ̶ó¸é, º¸Åë µ¥½ºÅ©Å¾ÀÇ ºñÆ® ±íÀÌ¿Í µ¿ÀÏÇÏ°Ô ¸ÂÃß¾î¾ß ÇÑ´Ù. ÀüÈ­¸é ¸ðµå¶ó¸é, ¾î¶² Ç÷§Æû¿¡¼­´Â ¿ä±¸¿¡ °¡Àå ÀûÇÕÇÑ ºñÆ® ±íÀÌ·Î ¾ó¸¶µçÁö ÀüȯÇÒ ¼ö ÀÖ´Ù. È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤Çϱâ Àü¿¡ VidInfo °´Ã¼¸¦ ¾ò´Â´Ù¸é ÇöÀç µ¥½ºÅ©Å¾ÀÇ ºñÆ® ±íÀ̸¦ ¾Ë ¼ö ÀÖ´Ù.

È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÏ°í ³ª¸é, VidInfo °´Ã¼¸¦ ¾ò°Å³ª ¶Ç´Â È­¸éÇ¥½Ã Ç¥¸é¿¡ Surface.get* ¸Þ½îµåµéÀ» ¾Æ¹«°Å³ª È£ÃâÇØ¼­ ¼³Á¤¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.


ÇÔ¼ö

´ÙÀ½Àº °¡Àå ÀûÀýÇÑ È­¸éÇ¥½Ã ¸ðµå¸¦ °áÁ¤Çϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â ·çƾµéÀÌ´Ù. ÀÌ·± ÇÔ¼öµé¿¡ °üÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â È­¸éÇ¥½Ã ¸ðµâ ¹®¼­¿¡¼­ ¾Ë ¼ö ÀÖ´Ù.

pygame.display.mode_ok(size, flags, depth)
ÀÌ ÇÔ¼ö´Â pygame.display.set_mode() ÇÔ¼ö¿Í Á¤È®ÇÏ°Ô ¶È°°Àº ÀÎÀÚµéÀ» ¹Þ´Â´Ù. ±â¼úÇÑ ¸ðµå¿¡ °¡Àå ÀûÇÕÇÑ ºñÆ® ±íÀ̸¦ µ¹·ÁÁØ´Ù. 0À» µ¹·ÁÁشٸé, ¿øÇÏ´Â È­¸éÇ¥½Ã ¸ðµå´Â »ç¿ëÇÒ ¼ö ¾ø°í ¿¡¹Ä·¹À̼ǵȴÙ.

pygame.display.list_modes(depth, flags)
¿äûµÈ ±íÀÌ¿Í Ç÷¡±×·Î Áö¿øµÇ´Â È­¸éÇ¥½Ã ¸ðµå¸¦ ´ãÀº ¸®½ºÆ®¸¦ µ¹·ÁÁØ´Ù. ¸ðµå°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ºó ¸®½ºÆ®°¡ ¹ÝȯµÈ´Ù. Ç÷¡±× ÀÎÀÚ´Â ±âº» °ªÀÌ FULLSCREENÀÌ´Ù. FULLSCREEN ¾øÀÌ µû·Î Ç÷¡±×¸¦ ÁöÁ¤Çϸé, ¹Ýȯ °ªÀÌ ¾Æ¸¶µµ -1ÀÌ µÉ °ÍÀÌ´Ù. ÀÌ´Â È­¸éÇ¥½Ã°¡ âÀÌ µÉ °ÍÀ̱⠶§¹®¿¡ ¾î¶² È­¸éÇ¥½Ã Å©±âµµ ±¦Âú´Ù´Â ¶æÀÌ´Ù. ¸ðµå ¸®½ºÆ®´Â Å« °ª¿¡¼­ ÀÛÀº°ª ¼øÀ¸·Î Á¤·ÄµÇ¾î ÀÖÀ½À» ÁÖ¸ñÇÏÀÚ.

pygame.display.get_info()
ÀÌ ÇÔ¼ö°¡ µ¹·ÁÁÖ´Â °´Ã¼¿¡´Â È­¸éÇ¥½Ã ÀåÄ¡¸¦ ±â¼úÇÏ´Â ¸¹Àº ¸â¹öµéÀÌ ÀÖ´Ù. VidInfo °´Ã¼¸¦ ÀμâÇϸé Áï½Ã ÀÌ °´Ã¼¿¡ ´ëÇÑ ¸â¹ö¿Í °ªÀ» ¸ðµÎ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
>>> import pygame.display
>>> pygame.display.init()
>>> info = pygame.display.get_info()
>>> print info
<VideoInfo(hw = 1, wm = 1,video_mem = 27354
blit_hw = 1, blit_hw_CC = 1, blit_hw_A = 0,
blit_sw = 1, blit_sw_CC = 1, blit_sw_A = 0,
bitsize = 32, bytesize = 4,
masks = (16711680, 65280, 255, 0),
shifts = (16, 8, 0, 0),
losses = (0, 0, 0, 8)>

´Ü¼øÈ÷ VidInfo °´Ã¼ÀÇ ±¸¼º¿øÀÎ ÀÌ ¸ðµç Ç÷¡±×µéÀ» Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ´Ù. ¼­·Î ´Ù¸¥ blit Ç÷¡±×´Â ´Ù¾çÇÑ À¯ÇüÀÇ Ç¥¸éÀ¸·ÎºÎÅÍ Çϵå¿þ¾î Ç¥¸éÀ¸·Î ºí·°Àü¼ÛÇÒ ¶§ Çϵå¿þ¾î °¡¼ÓÀÌ Áö¿øµÇ´ÂÁö ¾Ë·ÁÁØ´Ù.


¿¹Á¦µé

´ÙÀ½Àº ±×·¡ÇÈ È­¸éÀ» ÃʱâÈ­ÇÏ´Â ¿©·¯ ¹æ¹ýµéÀ» º¸¿©ÁØ´Ù. È­¸éÇ¥½Ã ¸ðµå¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ý¿¡ °üÇÏ¿© ¾ÆÀ̵ð¾î¸¦ ¾òÀ» ¼ö ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù.

>>> # 640 x 480 â µð½ºÇ÷¹ÀÌ¿¡ ÃÖÀû ±íÀ̸¦ µ¹·ÁÁØ´Ù
>>> pygame.display.set_mode((640, 480))

>>> # °¡Àå Å« 16ºñÆ® µð½ºÇ÷¹À̸¦ µ¹·ÁÁØ´Ù
>>> modes = pygame.display.list_modes(16)
>>> if not modes:
...     print '16bit not supported'
... else:
...     print 'Found Resolution:', modes[0]
...     pygame.display.set.mode(modes[0], FULLSCREEN, 16)

>>> # 8ºñÆ® Ç¥¸éÀÌ ÇÊ¿äÇÏ´Ù. ´Ù¸¥ °ÍµéÀº ¾ÈµÊ
>>> if pygame.display.mode_ok((800, 600), 0, 8) != 8:
...     print 'Can only work with an 8bit display, sorry'
... else:
...     pygame.display.set_mode((800, 600), 0, 8)