找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4111|回复: 4

[游戏编程] 2D怎么让精灵在指定的矩形内刷新?

[复制链接]
发表于 2011-7-22 09:11:48 | 显示全部楼层 |阅读模式
2D怎么让精灵在指定的矩形内刷新?

RT。。。

比如 创建了个 1024X768的窗口。。。我想只在 x = 512 y = 384 width = 512 height = 384 的矩形内刷新。。。其他地方不会有精灵的显示出来。。。精灵超出范围的部分不显示。。。应该怎么弄呢??

device::SetViewport可以吧?那如果我有10个精灵在上面的范围刷新,10个无限制,10个又在别的范围内刷新,其他的又和以上的不同。。。那是不是要创建很多个device才行?
发表于 2011-7-22 09:29:12 | 显示全部楼层
为所有被显示资源建立一个列表,每次在显示之前,先处理列表,再显示。这样就没问题了。
比如你说的这种,可以先把 x = 512 y = 384 width = 512 height = 384 的矩形外的精灵从列表中排除出去,然后再显示整个列表,这样只能是矩形内的被显示。

当然对于2D游戏而言,列表这样数据结构还是太简单了,如果用二、四叉树,可能会更好一点,可以实现更多的效果,更好的性能。
发表于 2012-9-7 11:52:14 | 显示全部楼层
这是一个裁减问题,如果是dx9的话,像这样调用:
RECT rcScissorRect = { 20, 20, 50, 50 };
m_pD3DDevice->SetScissorRect(&rcScissorRect);  // 使得下面的渲染仅对该裁减区域有效,区域外的内容将不被渲染,

用完别忘了取消裁减区域,直接:m_pD3DDevice->SetScissorRect(NULL);就可以
也可以传整个窗口的RECT

另外别忘了在初始化的时候开启裁减功能:
m_pD3DDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE);
 楼主| 发表于 2012-9-7 14:55:34 | 显示全部楼层
谢谢LS,不过这都是一年前的帖子了,我现在改学opengl去了,嗯嗯,不过学会了这个opengl也能用的上哈,一通百通
发表于 2012-9-7 15:45:20 | 显示全部楼层
嘿嘿,纯顶了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-10-30 21:38 , Processed in 0.011826 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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