zoukankan      html  css  js  c++  java
  • 软件工程迭代开发第二篇

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

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

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

    首先是血条:

    自己的血条:

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

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

  • 相关阅读:
    vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
    GitLab 项目
    pythonWeb开发
    $(function(){})里面不能定义函数
    elementUI el-cascader回显问题
    elementUI 弹框嵌套蒙层问题
    JS获取浏览器信息及屏幕分辨率
    mockjs导致element-ui upload组件的on-progress和axios的responseType失效
    vue中记录页面的滚动距离
    vue组件的inheritAttrs属性
  • 原文地址:https://www.cnblogs.com/Dmmuistirci/p/5628227.html
Copyright © 2011-2022 走看看