游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8852|回复: 14

[DirectX]2D游戏地形半透明遮挡问题。。

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-9-5 23:23:00 | 显示全部楼层 |阅读模式
参考图:(注意图中那个用绿色标记的半透明遮挡部分)


图中所有的地图块都是20×20的尺寸,并且都有一个属性:比如是否可通行,是否有遮挡的像素。
(这20×20的尺寸也是人物的单位行走距离。)
另外,程序会记录所有可能产生遮挡的像素坐标。

我想到的实现方法:

1:每一帧计算人物的矩形框处于哪些可能会产生遮挡的地图块。如果该地图块存在遮挡的像素,则执行第2条逻辑
2:由于有遮挡属性的像素的坐标是固定的,所以,只要分别让人物的每个像素坐标都和地图块所有可遮挡像素的坐标做比较,若相等,则修改该地图块的像素alpha值。

伪代码:
for (int 人物的第0个像素; i<max1; i++)
{
  for (int 地图块X的第0个遮挡像素; j<max2; j++)
  {
  if (两个像素的坐标相等)
  {
  // 设置该像素alpha值
  }
  }
}

另外还有一个想法:
·首先还是每一帧计算人物的矩形框处于哪些可能会产生遮挡的地图块。
·将所处的所有地图块的遮挡像素提取出来,并设置alpha,然后在渲染人物的后面渲染这些提取出来的半透明遮挡像素。其实就是:渲染地图 + 渲染人物 + 渲染半透明像素

我是不想单独将遮挡部分作成一个个半透明图片,然后直接在程序里按照地图、人物、半透明遮挡图片的顺序进行渲染。
因为这样很麻烦,我总是希望程序可以自动处理这些东西,因为RPG游戏所用到的场景是非常多的,遮挡图片那要是编辑起来相当烦琐。

由于对这方面一点经验都没有,所以,想法也只是想法,心里一点底都没有。
大家都来讨论一下。。。
特别是对这方面有经验的朋友。。

0

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2010-9-7 00:23:00 | 显示全部楼层

Re: [DirectX]2D游戏地形半透明遮挡问题。。

如果是斜45°的话,就要计算斜率,先不说
传统风格的RPG地图应该使用3层地图结构,渲染地面层,渲染物体层,天空层,然后根据人物的坐标判断出人物在地图的遮挡关系,再插入到地图里面显示全部,或透明显示部分

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-9-7 09:25:00 | 显示全部楼层

Re: Re: [DirectX]2D游戏地形半透明遮挡问题。。

karsion: Re: [DirectX]2D游戏地形半透明遮挡问题。。

如果是斜45°的话,就要计算斜率,先不说
传统风格的RPG地图应该使用3层地图结构,渲染地面层,渲染物...


很多游戏不是这种结构,而是直接整张图的场景,地面、设施全在一张图上。
我也比较倾向这一种,但这种情况面临一个问题就是图像压缩的问题,但是我姑且也只能忽视这一点了。

看来整张图的场景要单独准备半透明遮挡部分的图了。这使得100M的地图,要再加上50M做半透明遮挡部分。

0

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2010-9-7 19:25:00 | 显示全部楼层

Re: Re: Re: [DirectX]2D游戏地形半透明遮挡问题。。

轩辕崇正: Re: Re: [DirectX]2D游戏地形半透明遮挡问题。。



很多游戏不是这种结构,而是直接整张图的场景,地面、设施全在一张图上。
我也比较倾向这一种,但这种...

你这样做绝对是不明智的。
你可以下载一份圣剑II的源码来看看地图是怎么做的

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2010-9-7 22:18:00 | 显示全部楼层

Re:[DirectX]2D游戏地形半透明遮挡问题。。

假设要画的有前景,背景,中间层的角色。
首先在临时的黑色底图上画上中间层的角色。
再将前景图异或方式绘制在临时图上。
原本黑色部分(不含角色部分)结果为前景图
前景图为镂空的地方则不会修改已经绘制的角色部分
接下去将黑色作为透明色绘制到已经画完背景的最终图上结束绘制。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-9-7 22:52:00 | 显示全部楼层

Re:[DirectX]2D游戏地形半透明遮挡问题。。

没搞过2d,路过帮顶

2

主题

41

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2010-9-8 12:00:00 | 显示全部楼层

Re:[DirectX]2D游戏地形半透明遮挡问题。。

如果地图是基于Tile-object形式的,先渲染Tile,再渲染可被角色挡住的object(比如玩家身后的草,石头),再渲染角色(此处不用alpha),再渲染会产生半透的object(比如城墙,房屋,此处不用alpha,渲染完后角色会被挡住),最后再用alpha渲染一遍角色,半透效果就出来了。与格子无关。

如果是整图格式的地图(如大话西游),地图需要有alpha通道或者mask通道,渲染人物时根据地图的alpha通道做混合。

16

主题

154

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2010-9-8 12:52:00 | 显示全部楼层

Re:[DirectX]2D游戏地形半透明遮挡问题。。

楼上的大大,不知道你说的这两种方法哪个更好一点啊.我用的第一种.

2

主题

41

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2010-9-8 18:22:00 | 显示全部楼层

Re:[DirectX]2D游戏地形半透明遮挡问题。。

走格子的2D网游一般都是用第一种,地图编辑起来灵活性很强。
如果不是走格子的(纯2D坐标,如大话西游),可以用第一种也可以用第二种。
大话西游和QQ幻想都是纯2D坐标的,大话西游用的第二种,QQ幻想用的第一种。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-9-8 21:08:00 | 显示全部楼层

Re: Re:[DirectX]2D游戏地形半透明遮挡问题。。

cqgame2009: Re:[DirectX]2D游戏地形半透明遮挡问题。。

如果地图是基于Tile-object形式的,先渲染Tile,再渲染可被角色挡住的object(比如玩家身后的草,石头),再...


我想知道大话西游2的半透明遮挡是如何实现的,你知道么?或者如果给你一张长安城的地图,你可以实现那种效果么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 14:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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