我们工作室谈成的第一个项目是一个webgame,二战体裁,正六边形策略类,从万能的C++转型开发web的确有点不适应,局限性太大,有些作法就需要改变一下了,用了一下午的时间看了看javascript,发现它的面对对象写法实在太恶心了,函数即是对象,函数里面还能套函数,无语了… 这个项目,正六边形地图是关键,因为没有webgame的开发经验,所以无法确定网页能否实现六边形地图,在我印象中我还没有玩过网页游戏是六边形的,所有的基本上都是正方格。
百度一下,恶补了一下数学,已经初步的确定了六边形地图在webgame上的可行性。
先上一段公式…
AB=R,CD=√3R/2,S=3√3R²/2;
外接圆半径R =外接正方形边长L / 2
边长L = 外接圆半径R
内切圆半径r = 根号3 * 外接圆半径R / 2
面积S = 3 * 根号3 * 外接圆半径R的平方 / 2
首先先绘制一个六边形
drawPoly6(O.x , O.y , R)
//上
A.x = -R/2 + O.x
A.y = -r + O.y
B.x = R/2 + O.x
B.y = A.y
//中
C.x = R + O.x
C.y = O.y
F.x = -R + O.x
F.y = O.y
//下
D.x = B.x
D.y = r + O.y
E.x = A.x
E.y = D.y
这些点的位置一旦计算出来,就可以用html的建立一个六边形的热区了。
document.write(" ");
下面在绘制整个地图
drawPoly6Map(row , col , x , y , R)
r(内切圆半径) =根号3 * R / 2;
var space = new CPoint(this.R / 2 * 3, this.r * 2); //间距
for (i = 0; i < this.row; i++)
{
for (j = 0; j < this.col; j++)
{
var index = i * this.col + j;
var polyPos = new CPoint(0, 0);
polyPos.x = this.startPos.x + space.x * j;
polyPos.y = this.startPos.y + space.y * i;
//如果是奇数列需偏移高度
if (j % 2 == 1)
{
polyPos.y += this.r;
}
//创建对象
this.polys[index] = new CPoly(index, polyPos, R);
}
}
寻路还没研究,但是感觉用A*就可以做。