VB DirectX7 2D Game Sample 속도향상 버젼 (비베 다이렉트7 샘플)

< VB DirectX7 2D Game Sample (비베 다이렉트7 샘플) >

 

저번에 올린 다이렉트7을 활용한 비베 2D 게임 기초이긴한데,

속도를 향상시킨 버젼이다.

 

오직 전체화면으로 돌아가긴 하지만 스프라이트를 다량 넣어도 빠르게 돌아간다.

 

비베는 알겠는데 DirectX7을 전혀 모르겠다구?

그럼 Render 부분만 조금씩 고쳐가면서 실행해보면 충분히 배울 수 있다.

이해가 되고 응용할 수 있다면 슈팅 게임정도는 이걸로 쉽게 만들 것이다.

 

참고로 Render 부분을 아래에 적어두겠다.(속도 향상)

Private Sub Render()
On Error Resume Next

‘출력 목적 좌표와 원본 그림 좌표를 기억할 변수
Dim RC As RECT
Dim iX As Integer, iY As Integer

iX = X
iY = Y

‘배경 그림 사이즈
RC.Left = 0: RC.Top = 0: RC.Right = 800: RC.Bottom = 600

‘백화면에 배경그림을 출력
Call DDSBack.BltFast(0, 0, DDSBGround, RC, DDBLTFAST_WAIT)

‘화면 밖에 나갔을때 처리
If iX < 0 Then RC.Left = iX * -1: iX = 0
If iX > 800 – 80 Then RC.Right = 800 – iX
If iY < 0 Then RC.Top = iY * -1: iY = 0
If iY > 600 – 80 Then RC.Bottom = 600 – iY

‘맵을 출력합니다
RC.Left = 0: RC.Top = 0: RC.Right = 40: RC.Bottom = 40
For i = 0 To 18
For j = 0 To 13
Call DDSBack.BltFast(20 + i * 40, 20 + j * 40, DDSMChip, RC, DDBLTFAST_SRCCOLORKEY)
Next j
Next i

‘백화면에 사람그림을 출력
RC.Left = 0: RC.Top = 0: RC.Right = 80: RC.Bottom = 80
Call DDSBack.BltFast(iX, iY, DDSSprite, RC, DDBLTFAST_SRCCOLORKEY)

Call DDSBack.DrawText(0, 0, iX & ” ” & iY, 0)

‘———————

‘백화면 -> 백화면2
RC.Left = 0: RC.Right = 800: RC.Top = 0: RC.Bottom = 600
Call DDSBack2.BltFast(0, 0, DDSBack, RC, 0)

Call DDSPrimary.restore ‘Alt+Tab을 대비하여 복구

‘백화면2->주화면 (백화면2에 있는걸 주화면으로 전송)
Call DDSPrimary.Flip(DDSBack2, DDFLIP_NOVSYNC)

End Sub

 

기존의 방식이 “버퍼(Back) -> 주화면” 이었다면,

Back2라는 표면상에 모든걸 그린후 “표면(Back2)->버퍼(Back)->주화면” 으로 바꿨다.

해보면 알겠지만 100개 이상 스프라이트를 적용했을때 이쪽 속도가 몇배 빠르다.

일반 표면인 Back2와 버퍼 Back은 이름만 비슷할 뿐 그 속성이 전혀 다르기 때문이다.