조회 수 1839 추천 수 4 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 


어제는 깜박하고 강좌를 못 올렸네요 -_-;


 


원래 스프라이트까지 담으려고 했지만 하다보니 내용이 많아져서 생략합니다.


 







 


(3) 더블 버퍼의 생성과 블리팅


 


0) 더블 버퍼(백 버퍼)란?


 


VB의 PictureBox를 이용해 오브젝트를 옮겨 본 적이 있는 분이시라면, 플리커링(깜박임)현상을 아실겁니다. 메모리 상의 비트맵을 직접 화면에 표시하면 그런 플리커링 현상이 일어나지요.


그래서 '더블 버퍼'라는 가상 표면 위에 그림을 그리고, 더블 버퍼를 매우 빠른 속도로 화면에 표시하는 기법을 씁니다.


 


1) 더블 버퍼의 생성


 


더블 버퍼는 메인 표면이 아니니 보조 표면으로 DirectDrawSurface7객체를 생성합니다.


 


Dim ddBackBuffer As DirectDrawSurface7
Private ddsdBackBuffer As DDSURFACEDESC2
Dim rBackBuffer As RECT
ddsdBackBuffer.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
ddsdBackBuffer.lWidth=640
ddsdBackBuffer.lHeight=480
Set ddBackBuffer = ddraw.Createsurface(ddsdBackBuffer)
rBackBuffer.Bottom = ddsdBackBuffer.lHeight
rBackBuffer.right = ddsdBackBuffer.lWidth

 


2) 더블 버퍼로의 블리팅


 


만약 어떤 스프라이트가 ddSprite에 저장되어 있다고 가정하고, 이를 화면에 표시하기 위해 백 버퍼에 출력한다고 가정합시다. 이 ddSprite의 RECT객체인 rSprite는 ddSprite에서 복사될 범위를 지정합니다.


 


 



ddBackBuffer.Blt rbbRect, ddSprite, rSprite, DDBLT_WAIT


 


여기서 rbbRect가 무엇을 의미하냐면, 바로 백 버퍼 상의 rSprite가 복사될 범위를 지정합니다.


 


* rbbRect의 크기와 rSprite의 크기가 다르면 자동으로 사이즈의 변환이 이루어 집니다.


 


3) 더블 버퍼에서의 블리팅


 


더블 버퍼를 다 채웠다면, 이제 더블 버퍼의 내용을 메인 표면으로 로드해야 겠지요?


 


Picture1라는 PictureBox에 복사한다고 가정하고 프로그램을 작성하여 봅시다.


 


우선 ddScreen이라는 메인 표면을 생성해 여기에 더블 버퍼를 출력할 것입니다.



 



ddraw.SetCooperativeLevel Picture1.hWnd, DDSCL_NORMAL


ddsdScreen.lFlags = DDSD_CAPS


ddsdScreen.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE


ddsdScreen.lWidth = SCREENWIDTH


ddsdScreen.lHeight = SCREENHEIGHT


Set ddScreen = ddraw.CreateSurface(ddsdScreen)


rScreen.Bottom = ddsdScreen.lHeight


rScreen.Right = ddsdScreen.lWidth



 


이제 메인 표면이 생성되었으니 여기에 더블 버퍼를 블리팅 해봅시다.


 




objDX.GetWindowRect Picture1.hWnd, rScreen 'Picture1의 RECT를 rScreen으로 리턴해줍니다.


ddScreen.Blt rScreen, ddBackBuffer, rBackBuffer, DDBLT_WAIT



 


 






 


여러분은 이번 강좌까지 DirectDraw객체를 생성하고, 백 버퍼를 생성하여 메인 표면에 백 버퍼의 내용을 출력한는 방법까지 배웠습니다.


 


다음 강좌에서는 스프라이트를 생성하여 이를 백 버퍼에 출력하고, 메인 객체에 표시하는 법을 배울 것이고, 그 다음강좌에서는 직접 프로그램을 작성하여 DirectDraw의 첫 프로그램을 감상하게 되실 겁니다.


 


그럼 다음시간에...

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
904 언어/기타 YMD_time system Spegel 2007.01.22 409
903 언어/기타 제가 지금 NPC가 말하는 것을 하려고 하는데 어떻게 하죠? 게임만들기폐인 2006.01.13 409
902 언어/기타 게임이란... 생각속에서 나오는 상상력으로... Hello_k 2006.02.19 411
901 언어/기타 여러가지 문자나타내기,테스트 플레이 팁!!! 혼돈의하늘32 2005.08.07 415
900 언어/기타 게임 속 죽음의 이해/머리글. GAiA 2005.07.01 416
899 RPG Maker [초급]RPG2003 (프로젝트 만들기) 카스-오로치 2006.01.14 416
898 언어/기타 이해 어려운 맵배치 강좌 -숲편- 설정중.. 에그。 2006.07.30 416
897 RPG Maker [초급] RPG2003 (숲을 가꾸어봅시다.) 카스-오로치 2006.01.14 417
896 언어/기타 -ㅅ- 누가 아이디어좀 제공해주세요. 린쌍 2005.11.26 418
895 RPG Maker RPGxp에서 집을 어떻게 만드나요?그리고 또 캐릭터와 맵을 작게 해서 만드려면 어떻게해야 하나요? 고승땅 2006.06.21 420
894 RPG Maker 죄송합니다!!질문입니다!!!!!!!!!(타일관련;;) 마가미카무이 2006.01.25 421
893 언어/기타 HP 자동으로 치유되기 -액알- 카르니카 2005.08.07 421
892 언어/기타 사운드 zl게임을만들고파 2009.09.06 421
891 RPG Maker RPG 2000 강좌 No.1 쉐로, 2006.07.27 421
890 언어/기타 확인 dnajs 2006.09.24 423
889 언어/기타 스타 맵을 만들어 볼까? -폭피 1- file 다크세이버™ 2006.10.05 424
888 RPG Maker [rpg2000]페이지의 순서와 이벤트의 출력 [夢想家] 2006.02.02 427
887 언어/기타 [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집 file 황금상자 2017.07.14 427
886 언어/기타 이론강의 3. 제작에 앞서 해야 될 것들 Vermond 2006.12.09 428
885 언어/기타 아트리아2 처럼 창조동x 2005.11.23 428
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)