VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 19900603

基于 DX8 的 Legend Game Engine (UI +Engine 源代码开放)

  [复制链接]
发表于 2011-5-31 18:55:14 | 显示全部楼层
是不是directUI也是这个原理?
回复 支持 反对

使用道具 举报

发表于 2011-6-4 20:28:54 | 显示全部楼层
学习下,正好修改下自个的Engine
回复 支持 反对

使用道具 举报

发表于 2011-6-5 20:44:58 | 显示全部楼层
提示差TextCall.dll,这是什么字体函数啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-5 21:46:45 | 显示全部楼层
回复 onestar 的帖子

这个Dll 就俩函数 GetFontHeight  和 GetFontWidth
用 TextWidth 和 TextHeight  
由于直接使用 DX窗口的这两个函数会使窗口频繁闪动
所以写了个Dll

点评

晕,难道你不用DrawText DT_CALCRECT来计算么?要不然用GetCharABC***函数,要不然用一个更先进的函数GetCharacterPlacementW(我那个山寨TextBox就用这个)  发表于 2011-6-5 23:42
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-6 07:21:05 | 显示全部楼层
本帖最后由 19900603 于 2011-6-6 07:47 编辑

Private Type Size
    cx                                     As Long
    cy                                     As Long
End Type
Private Declare Function GetTextExtentPoint32 Lib "gdi32" _
                          Alias "GetTextExtentPoint32A" (ByVal hDC As Long, _
                          ByVal lpsz As String, _
                          ByVal cbString As Long, _
                          lpSize As Size) As Long

Private Sub Form_Load()
    Dim lngReturn     As Long
    Dim typSize     As Size
    Dim lngX     As Long
    Dim lngY     As Long
    Dim strMyString     As String
    strMyString = "This   is   my   string "
    lngReturn = GetTextExtentPoint32(Me.hDC, strMyString, Len(strMyString), typSize)
    With typSize
        lngX = .cx * Screen.TwipsPerPixelX
        lngY = .cy * Screen.TwipsPerPixelY
    End With
    MsgBox "X   = " & lngX & "   Y= " & lngY
    MsgBox "X   = " & TextWidth(strMyString) & "   Y= " & TextHeight(strMyString)
End Sub

嘿嘿 这个不错的啊??

点评

用这个函数之后窗口还会不会闪?  发表于 2011-6-6 11:57
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-6 17:27:14 | 显示全部楼层
不太闪了????
回复 支持 反对

使用道具 举报

发表于 2011-6-7 00:32:46 | 显示全部楼层
回复 19900603 的帖子

什么叫做“不太闪”?最理想的情况应该是完全不闪……你把Me.hDC换成Picture1.hDC试试看?(Picture1是一个隐藏的图片框)

点评

不闪了·· 嘎嘎  发表于 2011-6-7 15:49
呃· 没打算使用任何控件啊···  发表于 2011-6-7 15:32
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-7 15:50:10 | 显示全部楼层
dim oldSur As Direct3DSurface8

  set oldSur=D3DDevice.GetRenderTarget

  dim rendersur As Direct3DSurface8

  set rendersur=rendertex.GetSurfaceLevel(0)

  D3DDevice.EndScene'要先结束对当前对象(屏幕)的渲染

  D3DDevice.SetRenderTarget rendersur, Nothing, ByVal 0'这句是设置渲染对象,以下的代码跟之前所说的主循环是一样的

  D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 0, 0

  D3DDevice.BeginScene

  '渲染代码(这里都是对rendertex进行渲染,不会显示在屏幕上)

  D3DDevice.EndScene'结束场景

  D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0'显示场景

  '如果想让rendertex显示在屏幕上,就需要如下的代码

  D3DDevice.SetRenderTarget oldSur, Nothing, ByVal 0

  D3DDevice.BeginScene

  Sprite.Begin

  Sprite.Draw rendertex, Rect1, Scal, Center, Rotation, Tran, color

  Sprite.End


以上代码貌似不能在类中使用..... 不然会出现91错误???????????????

点评

单步调试一下看看?  发表于 2011-6-7 16:43
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-7 18:06:16 | 显示全部楼层
本帖最后由 19900603 于 2011-6-7 18:09 编辑

IDE 下 没任何问题 翻译也么事  就是编译成Exe 后有问题

不过可以肯定 是
        D3DDevice.SetRenderTarget Rendersur, Nothing, ByVal 0

        D3DDevice.SetRenderTarget OldSur, Nothing, ByVal 0
的问题

点评

难道是第二个Nothing的问题?而且SetRenderTarget参数怎么这么奇怪……DX9的是Sub SetRenderTarget(RenderTargetIndex As Long, RenderTarget As Direct3DSurface9)  发表于 2011-6-7 22:22
回复 支持 反对

使用道具 举报

发表于 2011-6-16 23:58:17 | 显示全部楼层
不做伸手党,下了顶一下
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-4 23:01

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表