游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3962|回复: 10

窗口模式下实现翻页(Flip)

[复制链接]

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2008-1-30 21:19:00 | 显示全部楼层 |阅读模式
请问有没有办法在窗口模式下使用翻页(Flip)?没有翻页功能我的精灵图显示在窗口上时出现闪烁现象,很难看. [em17]

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-1-31 23:58:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

点击33次了,还没人能回答...好急啊,55555555.......

15

主题

202

帖子

207

积分

中级会员

Rank: 3Rank: 3

积分
207
QQ
发表于 2008-2-1 14:11:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

用DirectX或Ogl的话好解决.用GDI的话,自己先画在两个内存里,自己交换就好了嘛.

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2008-2-1 18:14:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

闪烁现象??你原先是怎么实现的??

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
发表于 2008-2-1 21:59:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

  闪烁应该是GDI造成的吧

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-2-2 00:04:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

我没有用GDI,我用DX7在窗口模式下显示图像的,只是我用时钟控件控制图像的显示.
楼上的说DX的话很容易解决,怎么说呢?真的很想知道...

29

主题

475

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
发表于 2008-2-2 14:11:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

FLIP的限制太大了,自己直接BITBLT到主屏上去还方便多了,我就是直接画上去的,300多FPS都不闪

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2008-2-3 16:50:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

多谢大元帅,但bitblt是DX7的还是GDI的呢?我怎么找不到这个方法的?
另外,我的程序中,角色是一个人物,站着不动的时候会做出喘气的动作,整个喘气的动作一共有7个帧,我用时钟控件控制显示的频率,这样做对么?不是说DX显示图像的速度很快么?但这个只有7帧的动画还要用到时钟控制的话,即便把时钟的时间间隔设置为100毫秒也是时钟的频率,根本体现不了用DX7和用GDI做游戏有什么不同.
而且,我使用DX7做游戏,目前为止我只觉得利用DX7开发的理由在于它提供了位图透明色过滤的功能.能不能给我这个菜鸟一个利用DX7的理由?

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2008-2-3 18:30:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

bitblt属于GDI吧。

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

返回值:函数成功,返回非零值,否则为0。

参数: x 指定目标矩形左上角的逻辑x坐标。
y 指定目标矩形左上角的逻辑y坐标。
nWidth 指定目标矩形和源位图的宽度(逻辑单位)。
nHeight 指定目标矩形和源位图的高度(逻辑单位)。
pSrcDC 指向CDC对象的指针,标识待拷贝位图的设备上下文。假如dwRop指定不包括源的光栅操作,则它必须为NULL。
xSrc 指定源位图左上角的逻辑X坐标。
ySrc 指定源位图左上角的逻辑Y坐标。
dwRop 指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。
下面对dwRop列出光栅操作代码及其描述:
BLACKNESS 所有输出变黑。
DSTINVERT 反转目标位图。 IT 者
MERGECOPY 使用布尔AND操作符合并特征与源位图。
MERGEPAINT 使用布尔OR操作符合并特征与源位图。
NOTSRCCOPY 拷贝反转源位图到目标。
NOTSRCERASE 反转使用布尔OR操作符合并源和目标位图的结果。
PATCOPY 拷贝特征到目标位图。
PATINVERT 使用布尔XOR操作符合并目标位图和特征。
PATPAINT 使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图。
SRCAND 使用布尔AND操作符合并目标像素和源位图。
SRCCOPY 拷贝源位图到目标位图。
SRCERASE 反转目标位图并用布尔AND操作符合并这个结果和源位图。
SRCINVERT 使用布尔XOR操作符合并目标像素和源位图。
SRCPAINT 使用布尔OR操作符合并目标像素和源位图。
WHITENESS 所有输出变白。
有关光栅操作代码的完整列表,请参阅联机文档“Win32 SDK程序员参考”附录节中的“关于光栅操作代码”。

说明:
从源设备上下文拷贝位图到这个当前设备上下文。
应用可以在字节边界上对齐窗口或客户区域,保证BitBlt操作发生在以字节对齐的矩形上(登记窗口类时设置设备CS_BYTEALLGNWINDOW或CS_BYTEALIGHCLIENT标记)。 itzhe.cn
在字节对齐矩形上的BitBlt操作比未经字节对齐的矩形上的BitBlt操作快许多。假如想对自己的设备上下文指定字节对齐类风格,必须登记窗口类而不要依靠Microsoft基本类。可使用全局函数AfxRegisterWndClass。
一旦使用目标设备上下文和使用源设备上下文,GDI变形nWidth和nHeight。假如结果延伸不匹配,必要时GDI使用Windows StretchBlt函数压缩或拉伸源位图。
假如目标、源和特征位图颜色格式不同,BitBlt转换源和特征位图以匹配目标。转换中使用目标位图的前景和背景色。
BitBlt函数把单色位图转换为彩色时,它设置白色(1)为背景色,黑色(0)作为前景色。使用目标设备上下文的背景和前景色。要把彩色转换为单色, BitBlt把与背景色匹配的像素设置为白色,其余所有像素设置为黑色。在从彩色到单色的转换中,BitBlt使用彩色设备上下文的前景和背景色。
注重,并非所有的设备上下文都支持BitBlt。为检查给定设备上下文是否支持BitBlt,使用GetDeviceCaps成员函数并指定RASTERCAPS索引。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2008-2-3 18:31:00 | 显示全部楼层

Re:窗口模式下实现翻页(Flip)

using in Visual Basic 6:

Public   Declare   Function   BitBlt   Lib   "gdi32"   (ByVal   hDestDC   As   Long,   ByVal   X   As   Long,   ByVal   Y   As   Long,   ByVal   nWidth   As   Long,   ByVal   nHeight   As   Long,   ByVal   hSrcDC   As   Long,   ByVal   xSrc   As   Long,   ByVal   ySrc   As   Long,   ByVal   dwRop   As   Long)   As   Long  
   
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 01:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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