游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: cvkh

一个DX初学者

[复制链接]

18

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-4-16 07:58:00 | 显示全部楼层

Re:一个DX初学者

谢谢,BltFast怎么使用啊?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-4-16 20:57:00 | 显示全部楼层

Re:一个DX初学者

Surface.BltFast X,Y,SrcSurf,SrcRect,Flag1
' X横坐标,Y纵坐标,SrcSurf源表面(DirectDrawSurface7),SrcRect源矩形(Rect),Flag1:标志,一般设为DDBLTFAST_WAIT,如果需要设置透明色,再加上DDBLTFAST_SRCCOLORKEY,多个标志间用Or运算连接

'源表面即你想要绘制的图像所存放在的表面,源矩形即你要绘制这个表面的哪一个区域。

你有Dx7sdk吗?这些都可以在上面查到的。

18

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-4-22 20:08:00 | 显示全部楼层

Re:一个DX初学者

谢谢,我没有Dx7 sdk,但有Dx8.1 sdk.
怎么创建一个后台缓冲的表面啊?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-4-22 21:34:00 | 显示全部楼层

Re:一个DX初学者

你说的是独占全屏模式下主表面的BackBuffer吧?

Dim BackBuffer1 As DirectDrawSurface7 ' 定义后备缓冲表面

Dim ddsd2 As DDSURFACEDESC2 ' 定义它的描述

    With ddsd2  ' 设置它的描述
     .lFlags = DDSD_CAPS
     .ddsCaps.lCaps = DDSCAPS_BACKBUFFER   ' 此参数表示将表面设为后备缓冲
    End With
    Set BackBuffer1 = PrimSurf1.GetAttachedSurface(ddsd2.ddsCaps)  '通过这个方法来创建后备缓冲
' 这里的 PrimSurf1 对象指的是当前的主表面
    BackBuffer1.GetSurfaceDesc ddsd2 ' 获得后备表面的描述


' 这样以后就在这个BackBuffer上面进行绘制,最后使用主表面的Flip(翻转)方法进行更新。

18

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-4-23 00:04:00 | 显示全部楼层

Re:一个DX初学者

怎么不行啊,提示自动化错误,源代码如下

Option Explicit
Dim Dx As New DirectX7
Dim Dd As DirectDraw7
Dim Dds1 As DirectDrawSurface7
Dim Ddsd1 As DDSURFACEDESC2
Dim Dds2 As DirectDrawSurface7
Dim Ddsd2 As DDSURFACEDESC2

Private Sub Form_Load()
Call InitDX
End Sub

Function InitDX()
Set Dd = Dx.DirectDrawCreate("")
Dd.SetCooperativeLevel Me.hWnd, DDSCL_NORMAL
Ddsd1.lFlags = DDSD_CAPS
Ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE
Set Dds1 = Dd.CreateSurface(Ddsd1)

Ddsd2.lFlags = DDSD_CAPS
Ddsd2.ddsCaps.lCaps = DDSCAPS_BACKBUFFER
Set Dds2 = Dds1.GetAttachedSurface(Ddsd2.ddsCaps)
Dds2.GetSurfaceDesc Ddsd2
End Function

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-4-23 20:31:00 | 显示全部楼层

Re:一个DX初学者

使用后备缓冲+Flip的方法只能在全屏+独占模式下才能使用。

在常规窗口模式只能使用各种Blt方法。
将你的代码中的Dsd2改成离屏表面,后面该用Flip的地方的用Blt代替。

当然在窗口模式下不要忘了设置Clipper(裁减器)。

18

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-4-24 17:10:00 | 显示全部楼层

Re:一个DX初学者

那怎么使用啊, 我还是不懂,能发能发个详细一点的完整代码给我啊?
谢谢啦!

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-5-1 16:06:00 | 显示全部楼层

Re: 一个DX初学者

实在抽不出很多时间,仅能写一点DD7初始化代码放上来,希望对初学者有帮助。 [em13]

sf_20065116544.rar

8.74 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 09:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表