幻想森林

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

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

[复制链接]

550

主题

9108

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

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

RT。。。

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

device::SetViewport可以吧?那如果我有10个精灵在上面的范围刷新,10个无限制,10个又在别的范围内刷新,其他的又和以上的不同。。。那是不是要创建很多个device才行?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2011-7-22 09:29:12 | 显示全部楼层
为所有被显示资源建立一个列表,每次在显示之前,先处理列表,再显示。这样就没问题了。
比如你说的这种,可以先把 x = 512 y = 384 width = 512 height = 384 的矩形外的精灵从列表中排除出去,然后再显示整个列表,这样只能是矩形内的被显示。

当然对于2D游戏而言,列表这样数据结构还是太简单了,如果用二、四叉树,可能会更好一点,可以实现更多的效果,更好的性能。
え~え~お!!!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

128

积分

③业余

积分
128
QQ
发表于 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);
回复 支持 反对

使用道具 举报

550

主题

9108

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2012-9-7 14:55:34 | 显示全部楼层
谢谢LS,不过这都是一年前的帖子了,我现在改学opengl去了,嗯嗯,不过学会了这个opengl也能用的上哈,一通百通
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

128

积分

③业余

积分
128
QQ
发表于 2012-9-7 15:45:20 | 显示全部楼层
嘿嘿,纯顶了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2021-11-28 06:58 , Processed in 0.019043 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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