软件工程迭代开发第二篇

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

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

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

首先是血条:

自己的血条:

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

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

转载于:https://www.cnblogs.com/Dmmuistirci/p/5628227.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值