zoukankan      html  css  js  c++  java
  • 专属自己的二维游戏引擎【五】

      这一节到了GUI部分。

      采用继承Delphi控件祖类的方式来创建GUI控件相对来说还是比较便利的。

      现在因为是直接在默认的From上面绘图,所以也可以调用IDE里面的控件。

      但是我们需要绘制的是PS好的图片作为GUI的外观,显然就需要自定义自己的控件类型。

     

      说到这方面,大家都清楚,字体绘制永远是一种难言的伤痛。

      中文毕竟不是英文,直到目前,很难找到一种不影响游戏性能的中文显示解决方案。

      但是我觉得不管你怎么操作,实际上,游戏绘制的永远是图片。

      于是,是不是可以这样操作:

      角色和怪物的名称文字采用已经制作好的常用字体图片文件来绘制,这样不会影响游戏性能。

      GUI控件的字体直接采用如下的做法:

      BitBack := TBitmap.Create;
      BitBack.Canvas.Font.Name := '微软雅黑';
      BitBack.Canvas.Font.Color := clRed;
      BitBack.Canvas.Font.Height := 28;
      Str:='字体测试';


      BitBack.Width := BitBack.Canvas.TextWidth(Str);
      BitBack.Height:= BitBack.Canvas.TextHeight(Str);
      BitBack.Canvas.TextOut(0, 0,Str);

      或者

      MyRect.Left   := X;
      MyRect.Top    := Y;
      MyRect.Right  := X + 100;
      MyRect.Bottom := Y + 100;

      DrawText(BitBack.Canvas.Handle, str, -1, MyRect, DT_LEFT);

      
      //BitBack.SaveToFile('D:\D2DGameEngine\引擎测试\1.BMP');
      

      在这里提示一下,创建出来的TBitmap对象不用立即析构,不断地创建和析构会产生很多的内存碎片的。

      它应该跟着控件被析构而析构。

      客户端我们还是需要注意一下内存碎片的问题,为什么有些玩家玩游戏久了,系统变得超慢,就是这个问题。

      引擎里面我们采用保存到流里面。

      这些其实就是采用GDI的简单绘制方式。

      不采用GDI+的方法,我感觉GDI+操作我们常用的内存流很不好用。

      只要图片保存到了流之后,一切都简单了。至于背景颜色可以使用笔刷填充成黑色,然后调用D3D创建图像功能的一个带过滤色的函数就可以清除背景色了。

      也许大家还是觉得太简单,不实用,那么你就得想下了。

      玩家在使用GUI交互的时候,或者说在聊天的时候,实际上应该是处在非游戏状态之中,还需要担心游戏的帧数???

      你只需要关心GUI响应的问题,就像软件应用层那样,你觉得会成问题吗?

      那么聊天框也就是Memo里面的显示字体呢,不就是图片吗?

      当我们在输入框里面输入完,按下回车的时候,就开始生成图片了,这个时候。。。。。

      我现在感觉简单了,甚至不需要事先处理好任何字体图片。

      使用过的字体,直接采用链表记录就OK,Delphi2010的泛型链表就不错。

      如果没有该字体就生成。

      【要记住,任何生成D3D图像之后的指针你需要保存下来,一个指针应该不大吧,实际系统内存就只有这些开销,图片在那里保存呢,你说呢?】

      采用BMP这种格式其实是不提倡的,文件太大,最好转换为DDS格式,采用D3DAPI函数来转很简单。这样不占用太多的显示内存。

      玩家玩一次游戏,能够使用的不相同的文字字数还是有限的。

    继续。。。。。。。。。。。

  • 相关阅读:
    zookeeper java调用及权限控制
    走进C++程序世界------IO标准库介绍
    Unity3d 镜面折射 vertex and frag Shader源代码
    servlet上传文件报错(二)
    模仿linux内核定时器代码,用python语言实现定时器
    6.12交流
    python学习(三) 使用字符串
    JAVA面试(四)
    python学习(二) 列表和元组
    C++面试题(三)
  • 原文地址:https://www.cnblogs.com/GameDelphi/p/2576690.html
Copyright © 2011-2022 走看看