游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16573|回复: 42

DX9的2D编程

[复制链接]

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-5-2 09:58:00 | 显示全部楼层 |阅读模式
我的2D内容是用Sprite画上去的:(下面是“伪”代码啊)
sprite.begin(alphaBand)
sprite.draw2D(texture1,x,y,color);
sprite.draw2D(texture2,x,y,color);
……
sprite.end();
当然也有其他的方式,但我觉得这种方法蛮管用。
内容是事先存在材质里的,不用每个周期都更新。
每个按钮单独一个材质。后面那个color可以影响她的外观,比如:正常情况浅灰、鼠标经过白色,不允许按用深灰,阴影用透明色。这些她都会自动给你过滤。按钮在案下的时候可以做个判断,加一个偏移量。

有的材质是固定的,而有的就得动态更新,比如说地图。地图是有一个材质作为缓冲,在放大缩小地图的时候,或者人物移动的时候更新这个材质。我是用GDI做的:
graphics.fromImage(buffer);
graphics.clear();
graphics.drawImage(原始地图,x,y,w,h);
graphics.transform(中点位置);
graphics.rotation(角色方向);
graphics.drawImage(人物的图标);
……
new texture(buffer);
我喜欢让地图以外的地方成为透明的,所以先清空。之后又加了人物图标的显示。好像每次更新得重新生成材质。

有的朋友担心使用DX3D编2D游戏得懂图形学,其实不用的。因为只有Sprite和textrue是3D的,不用作3D变换。有的人可能认为这样做很慢,事实上对性能并没有什么影响。并且她是和复杂度无关的,所以完全不用担心。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
 楼主| 发表于 2005-5-2 10:01:00 | 显示全部楼层

Re:DX9的2D编程

可能很多人都有更好的方法,但是这个法子很简单,很实用呀。其实GDI类库比DX更加稳定。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-5-2 11:22:00 | 显示全部楼层

Re:DX9的2D编程

完全不知所谓,Sprite会慢,你就是自己用3d画面片,想要优化到sprite的效率也不容易。
(大多数情况下每秒1000多桢会影响效率?)
地图缩放这种案例, sprite本身就可以搞得定,而且无需更新什么贴图(搂主称之为材质),改一下原始坐标,设一下矩阵就好了,sprite是支持矩阵的。
dds或tga这种含alpha的贴图与sprite配合使用,透明这种问题自然不是问题,sprite 就是 用d3d alpha blend的。

把sprite当成 blt来用是愚蠢的,实际上的问题是,你一点3d不懂,你不会用矩阵,那sprite对你而言毫无用处,它就是一方块。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-2 11:22:00 | 显示全部楼层

Re:DX9的2D编程

c#于c++确实有区别

请问可以画完dx后在话gdi吗?

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-5-2 11:25:00 | 显示全部楼层

Re:DX9的2D编程

画完dx后在话gdi,这样的话是可以的,但是效率就惨不忍睹了。你要把渲染结果copy一份到窗口。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-2 11:28:00 | 显示全部楼层

Re:DX9的2D编程

to light(#2):
不是吧,sprite不是像surface一样,只不过比surface多些功能,又少些功能吗?sprite支持矩阵吗?是二维平移、缩放、旋转而已,可以用矩阵来做吗?
ps:不是顶嘴,只是疑问,请见谅

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
 楼主| 发表于 2005-5-2 12:17:00 | 显示全部楼层

Re:DX9的2D编程

我懂不懂3D不想讨论。但是sprite的缩放有时会出错。
不是早就说了吗,象用别的方法可以呀。
我也不太清楚“不知所谓”是什么意思。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
 楼主| 发表于 2005-5-2 12:20:00 | 显示全部楼层

Re:DX9的2D编程

想画复杂的对话可能还是用GDI稍好一点。比较灵活。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-2 12:25:00 | 显示全部楼层

Re:DX9的2D编程

你应该加上“to somebody:” [em10]

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
 楼主| 发表于 2005-5-2 12:30:00 | 显示全部楼层

Re: Re:DX9的2D编程

lights: ReX9的2D编程

完全不知所谓,Sprite会慢,你就是自己用3d画面片,想要优化到sprite的效率也不容易。
(大多数情况下每秒...

sprite的3d功能确实很管用,但是这个题目是2D。
DX3D有划线和文字功能,我也在用。但是感觉还是用GDI绘制+texture缓冲会好一些。一方面GDI类库成熟可靠,另一方面加上缓冲性能有保证。
为什么用分片缓冲呢,因为界面其实不常变的,一秒钟变不了几次,就是变也不会各个部分一起变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 04:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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