码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程迭代开发第二篇

时间:2016-06-29 21:52:36      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

  今天增加了一些显示上的内容,使我们的游戏更加便于理解。比如,我们加入了血条的显示,而且用颜色区分开自己的角色、别人的角色和怪物。如下图所示。

技术分享

屏幕下方那一条紫紫的东西就是经验条,长满之后会升级。

下面我将逐个解释每个模块的实现方法。

首先是血条:

自己的血条:

glColor3f(0.2, 1, 0.1);
glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085);        //显示血条

其他玩家的血条:

glColor3f(0.2, 1, 0.2);
char buf[20];
sprintf(buf, "lv:%d", lv);
glRasterPos2f(wx - 0.02, wy + mapmax / 40.0 + 0.05);
drawString(buf);
sprintf(buf, "%.0lf/%.0lf", hp, maxhp);
glRasterPos2f(wx - 0.025, wy + mapmax / 40.0 + 0.01);
drawString(buf);
glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085);        //显示血条

中间是等级以及名字的显示,是之前就有的。

怪物的血条:

glColor3f(1, 0.2, 0.2);
char buf[20];
sprintf(buf, "%.0lf/%.0lf", hp, maxhp);
glRasterPos2f(wx - 0.025, wy + mapmax / 40.0+0.01);
drawString(buf);
glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085);        //显示血条

原理就是画一个长跟血量百分比有关的矩形。用OpenGL的glRectf()函数很好实现。

 

下面是较为复杂的经验条实现:

/*下面是显示经验条模块*/
//计算经验条的x,y值
double x, y;
x = wx;
y = wy;
if (x<1)
    x = 1;
else if (x>mapmax - 1)
    x = mapmax - 1;
if (y < 1)
    y = 1;
else if (y>mapmax - 1)
    y = mapmax - 1;

//显示经验框
glColor3f(0.8, 0.8, 0.8);
glBegin(GL_POLYGON);
glVertex2f(x - 1, y - 0.982);
glVertex2f(x + 1, y - 0.982);
glVertex2f(x + 1, y - 1);
glVertex2f(x - 1, y - 1);
glEnd();
glColor3f(0.6, 0.2, 1);
    
glRectf(x - 1, y - 0.985, x - 1 + ((double)exp / (double)maxexp) * 2, y - 0.998);        //显示经验条
/*显示经验条模块到此为止*/

第一段是计算经验条的视角位置。这个是最难点,因为我们游戏是用户在一张大地图上移动,玩家之所以看到的是自己的视角而不是整张地图是因为用了OpenGL的视角转换。我们做的是把史莱姆放在屏幕正中间。但是玩家走到接近地图边界的时候,按照正常的理解,是不能继续把史莱姆放在正中间的,因为如果这样屏幕就会出现一大片黑。这就需要判断是否到了边界附近。然后实际画经验条的过程就很容易了,只是体力上的劳动,一点一点试出最佳位置、大小以及颜色。最终效果图如第一张图所示。

今天做的这些内容也是为了之后的用户界面做准备。

软件工程迭代开发第二篇

标签:

原文地址:http://www.cnblogs.com/Dmmuistirci/p/5628227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!