游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5334|回复: 4

现在学习一款2.5D的游戏(2D的场景,3D的人物模型),有

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-6-20 11:43:00 | 显示全部楼层 |阅读模式
现在学习一款2.5D的游戏(2D的场景,3D的人物模型),有如下几个问题困扰很久了,希望高手指教;
  一.程序设置的摄像机角度是绕x轴30°,绕y轴45°。那么对美工制作场景有什么要求吗,比如美工用3DMax制作2D的场景,那么在制作场景的时候,3DMax中摄像机角度的设置是不是也要设置成30°,45°与程序中的一致?如果是的话,那么是不是在3DMax中看到的场景是什么样子的,在程序中运行的时候就是什么样子的。
  二.游戏采用的是标准的斜45°视角,也就是所谓的等角游戏,用游戏附带的地图编辑器,打开一张地图,发现地图用线条划分成了菱形(如图:◇)的单位格子,而且还引入了一种tile坐标,(一个tile坐标对应一个菱形的格子,直角坐标系中x每加一,tile坐标的x,y都加一;直角坐标系中y每加一,tile坐标的x加1,y减1),我想问的是,为什么要用菱形的格子拼接地图,而不用矩形的格子?
  三.是不是因为采用了菱形的格子来拼接地图,所以才引入了tile坐标?
   
  希望有人一一解答这三个困扰已久的问题,不甚感激。

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2010-6-20 11:54:00 | 显示全部楼层

Re:现在学习一款2.5D的游戏(2D的场景,3D的人物模型),

原本正方形的格子,在斜45度,俯30度时正好会变成一个菱形,而且宽度正好是高度的2倍。这样做主要是为了程序处理方便。3DSMAX中的设置需要也是如此设置,可以保证3DSMAX中的效果和程序实现的效果一致。

菱形格在取消你所谓的X/Y轴旋转后就是原本的正方形格,所以场景地格按这个排列才符合规则。就算场景使用普通的矩形排接,但寻路等逻辑还是需要按菱形格进行处理。

当然你也可以使用另一种办法,逻辑上使用矩形格,而图片使用斜45度的图片。

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2010-6-20 16:42:00 | 显示全部楼层

Re:现在学习一款2.5D的游戏(2D的场景,3D的人物模型),

  我的感觉是这样的,地图是在投影后,再划分成菱形的tile格子,而每个tile我觉得没什么意义啊,如果是寻路的时候要用到tile格子。为什么不划分成矩形,因为我觉得这个划分只是人为的一个划分啊,是已经投影成像后的划分啊,用矩形的话也可以寻路啊,甚至更直观,更容易与二维的数组对应。
  请问我的这个理解错误的地方在哪?

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2010-6-20 17:06:00 | 显示全部楼层

Re:现在学习一款2.5D的游戏(2D的场景,3D的人物模型),

// 这个函数是通过传入的地图的像素来创建坐标系统
bool CTheodolite::Create(int nWidthPixel, int nHeightPixel)
{
        // 地图像素宽度
        m_dwMapWidthPixel = nWidthPixel;

        // 地图像素高度
        m_dwMapHeightPixel = nHeightPixel;

        int nCol = (nWidthPixel + TILE_WIDTH_PIXEL - 1) >> 6/*一个tile占64像素宽*/;

        int nRow = (nHeightPixel + TILE_HEIGHT_PIXEL - 1)>> 5/*一个tile占32像素高*/;       

        // 左上角第一个TILE的y向偏移
        m_yLeftTopYOffset = nRow - 1;       

        // 地图tile宽度
        m_dwMapWidthTile = nRow + nCol;         // 谁能帮忙解释一下地图的tile宽为什么是这两个值的和

        // 地图tile高度
        m_dwMapHeightTile = nRow + nCol - 1;        // 同上

        // 地图宫格高度
        m_dwMapWidthGrid = (m_dwMapWidthTile + 16 - 1) >> 4 /*一个宫格占16个tile*/;

        // 地图宫格宽度
        m_dwMapHeightGrid = (m_dwMapHeightTile + 16 - 1) >> 4/*一个宫格占16个tile*/;

        return true;
}

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2010-6-21 10:53:00 | 显示全部楼层

Re:现在学习一款2.5D的游戏(2D的场景,3D的人物模型),

只有国人能想出如此别扭的东西
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-22 16:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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