游戏开发论坛

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

BitBlt

[复制链接]

8

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2005-11-12 22:08:00 | 显示全部楼层

Re:BitBlt

Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Command1_Click()
    Dim i As Long
    Dim myTime As Long
   
    myTime = timeGetTime
   
    Do While 1
        If timeGetTime - myTime > 10 Then
            Text1.Left = Text1.Left + 1
            DoEvents
            myTime = timeGetTime
        End If
        If Text1.Left > Me.Width Then
            Exit Sub
        End If
    Loop

End Sub

'--------------------------------------------
我这样写了一个例子;
10毫秒移动一下;
似乎效果并不是那么理想。

8

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2005-11-12 22:09:00 | 显示全部楼层

Re: Re:BitBlt

游戏之家: Re:BitBlt

(1)重画背景

(2)并:Form1.AutoRedraw = True


我说的是在桌面上绘图。
Desktop上面。。
并不是在Form1中。。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-11-12 22:41:00 | 显示全部楼层

Re: Re:BitBlt

Siner: Re:BitBlt

我这样写了一个例子;
10毫秒移动一下;
似乎效果并不是那么理想。



怎么这样用啊,你怎么把DoEvents放在那里?

10ms中有9ms都处于“半死机”状态……

另外,尽早脱离使用大量标准控件编游戏的水准。

8

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2005-11-13 17:18:00 | 显示全部楼层

Re:BitBlt

那我应该放哪里
应该怎么脱离
楼上的给指点一二嘛~

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2005-11-16 11:58:00 | 显示全部楼层

Re:BitBlt

Option Explicit

'// 我喜欢这函数
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Sub cmdTest_Click()

    Dim dwDelay As Long
    Dim dwTickCount As Long

    Do While 1
        dwTickCount = GetTickCount()
        If dwTickCount > dwDelay Then
            Text1.Left = Text1.Left + 1
            dwDelay = dwTickCount + 10
        End If
        If Text1.Left > Me.ScaleWidth Then ' 你应该用ScaleWidth而不应该用Width
            Exit Sub
        End If
        DoEvents '应该放这里
    Loop

End Sub

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2005-11-16 12:04:00 | 显示全部楼层

Re: Re:BitBlt

Siner: Re:BitBlt

呵呵呵,有新问题了
我用bitblt往桌面上绘图
然后不知道怎么让它刷新,导至图像移动过去后,后面全是残留景象


用CreateCompatibleDC+CreateCompatibleBitmap创建二块画板。一块用来画图,另一块用来刷新桌面用。这样就OK了!~

8

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2005-11-16 23:17:00 | 显示全部楼层

Re:BitBlt

GetTickCount 这个是获取的什么值啊?
也在一直增加呢。

CreateCompatibleDC,CreateCompatibleBitmap 分别是干什么用的?
如何用啊,呵呵,我新手。

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2005-11-17 02:19:00 | 显示全部楼层

Re:BitBlt

呵呵!看MSDN

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-11-18 21:02:00 | 显示全部楼层

Re:BitBlt

GetTickCount与TimeGetTime差不多。用其中一个就可以。

一般的游戏循环是这样的:
Declare Function timeGetTime Lib "winmm.dll" () As Long
Dim tm1 as Long,LTime as Long

LTime=1000/FPS  ' FPS即每秒显示的帧数

Do
tm1=timeGetTime
' 这里是游戏的运算代码
' 这里是游戏的渲染代码

do while timeGetTime-tm1<LTime
  DoEvents
Loop

Loop

8

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2005-11-18 21:32:00 | 显示全部楼层

Re:BitBlt

这样写就是连时间控件都不要了??
你就是说这样来脱离标准控件?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 16:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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