|
|
发表于 2006-1-22 12:33:00
|
显示全部楼层
Re:斜45度游戏开发(一)
很感谢你发表这文章,让我找到了:
//屏幕坐标转换成斜45度的坐标
inline void MDToMI(int Ix,int Iy,int &Dx,int &Dy)
{
Dx=int(0.5*((Iy<<1)+Ix)/(TileWidth>>1));
Dy=int(0.5*((Iy<<1)-Ix)/(TileWidth>>1));
}
以前作的2D游戏都是90度角的,现在要作45度角真的太容易了,
你的格子的大小是32*16:TileWidth=32;TileHeight=16;
但我不是这样想,我把格的大小改为都是2
即TileWidth>>1=16 改为 2>>1 = 1
所以/(TileWidth>>1);这个去丢.就是
Dx=int(0.5*((Iy<<1)+Ix));
Dy=int(0.5*((Iy<<1)-Ix));
但为什么Iy要左移1呢?对于*0.5我看也是个经验值,于是我就改为:
inline void MDToMI(int Ix,int Iy,int &Dx,int &Dy)
{
Dx=Iy+Ix;
Dy=Iy-Ix;
}
45度角就这样的改成了很高兴.
你的"//屏幕坐标转换成斜45度的坐标"
应该说是90度角坐标改为45度角坐标合适点.
谢谢,改天我把效果发出来让大家看看
接着我说说对于45度角的碰撞检察和遮挡处理,
其实这个与45度角还是90度角都是一样的,
就是说90度转为45度那只是在渲染时才将
坐标转换,对于碰撞检察还是90度角坐标的.
遮挡处理即层次处理:对于角色还是用角色排序的方法,
格子的遮挡也是用画家算法.我的就是这样做的.
能明白我说的吗?
如果学过3D图片处理,将会很容易明白,它们都只是在
渲染时才将坐标从90度转为摄像机头对场景的角度坐标
再渲染到屏幕上,当然3D中还会作相应的缩放效果.
以前我不会只是因为找不到90度角坐标转为45度角坐标的
转换算法,没想它是如此的简单:
dx=y+x;
dy=y-x;
谢谢. |
|