zoukankan      html  css  js  c++  java
  • SFML学习纪要


    工作需要,近段粗浅看了一下SFML,记录一下!

    一、浅见概述

    SFML,simple and Fast mulitmedia Library官方网站:http://www.sfml-dev.org/index.php

    编译也相对简单,按照自己需要下载源码,32bit 或64bit,Cmake可以轻松编译成功。

    SFML是夸平台库。看了看代码,就simple来说名副其实啊。其他没有进行具体测试,也不胡说。

    SFML指南对编译和运行都做了详细说明。


    二、要点

    SFML简要说明

    一、Sfml-system

    时间获取

    时间获取是通过获取当前原子时钟频率,来计算的.但是所获取的频率并非为CPU 频率,而是high-resolution performance counter

    BOOL WINAPI QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency);

    若所安装的硬件不支持高精度计数(a high-resolution performance counter),此参数返回值为零,返回的函数结果为zero,否则为nonzero.

    QueryPerformanceCounter

    函数 头文件为Winbase.h(include Windows.h)

    不可复制类

    Class  SFML_SYSTMEM_API NonCopyable{}

    此类为基础类,默认构造函数为保护类型,带参构造和赋值函数为私有类型。

    在设计选择时候,一个类是否具有可复制属性是非常重要的。在构造一个类时候是否继承此类是非常有必要考虑的。强烈建议,在写一个类之前,必要时候使用sf::NonCopyable,以防在未来使用中出现潜在错误。

    Sf::String

    为什么需要重新自定义一个String

    此类能自动实现不同类型和编码直接的句柄转换。它是一个Unicode string(实际上用的是UTF-32,std::basic_string<Uint32> m_string),能兼容世界上任何字体。此类包含了std::string标准类的大部分函数。

    二、Sfml-window

    提供操作杆操作

    键盘操作

    Sf::keyboard 提供了键盘状态接口。此类允许用户在任何时间直接访问键盘状态,而不用处理窗口和窗口事件。相比于键盘按下和键盘释放事件来会所,sf:::keyboard能在任何时间检索键盘状态。(你不需要为了知道某键盘是否按下而保存和更新一个bool值),不管键盘按下与否,窗口获取没有获取焦点,事件没有触发,你都可以获得键盘的真实状态。

    鼠标操作

    同键盘操作类似,此类允许用户直接查询鼠标状态,而不用关心是窗口和事件。于MouseMoved(鼠标移动)MouseButtonPressed(鼠标按下)以及MouseButtonReleased(鼠标放开)事件操作比较,sf::mouse可以随时检索光标状态和按键状态,并总能得到真实的鼠标状态。

    鼠标按键定义了ButtonCount,开放的,可以定义鼠标按键个数。

    接口函数可以获取和设置鼠标位置,包括整个桌面鼠标位置和某个窗口上位置。

    三、Sfml-graphics

    Sf::Transformable

    此类是基于二维坐标计算的,无三维Vector3f,需要自己处理添加。

    Text

    需要指定字体文件,大小等,一个可直接画的类。

    stbi-1.33 

    可解析图片类型:

        JPEG baseline (no JPEG progressive)

          PNG 8-bit only

          TGA (not sure what subset, if a subset)

          BMP non-1bpp, non-RLE

          PSD (composited view only, no extra channels)

          GIF (*comp always reports as 4-channel)

          HDR (radiance rgbE format)

          PIC (Softimage PIC)

    还可以转换Iphone格式的PNGRGB格式。

    包含不同格式的颜色转换和一些编码格式,例如huffman编码算法。

    Stbi库限制:

    //  Limitations:

    //    - no jpeg progressive support

    //    - non-HDR formats support 8-bit samples only (jpeg, png)

    //    - no delayed line count (jpeg) -- IJG doesn't support either

    //    - no 1-bit BMP

    //    - GIF always returns *comp=4

    说明:IJG,全称:Independent JPEG Group 非官方的组织的JPEG图像压缩库。

    渲染

    渲染状态缓冲策略包括:视点(View),转换(transform,混合模式(Blending mode,纹理(Texture),Shader。在渲染的Draw的过程中,就是根据这些状态判断来,是否更新参数。

    四、Sfml-audio

    支持格式:

    ogg,vaw,flac,aiff,au,raw,paf,svx,nist,ircam,w64,mat4,mat5 pvf,htk,sds,car,wve,mpc2k,rf64

    对基本播放,暂停,停止,循环均有控制。

    还可以设置或获取音高或基频,设置立体声。

    soundBuffer,数据存在内存中。

    soundeSteam,派生类为music,流方式可以避免占用大内存,并几乎无加载延迟。

    五、Sfml-network

    应用层协议:ftphttp

    Sf::Ftp 

    Sf::Ftp 是一个简单的可以访问FTP服务的客户端,可远程操作文件系统。

    使用客户端有四步骤:连接ftp服务,登录,发送命令和断开连接。

    SF::Http

    传输层协议:tcpUdp

    SF::Tcp

    SF::Udp 

    说明:有bug.

    暂时看了这么一点。
    若有问题,请指教,共同学习。

    于2013-11-06 更新

  • 相关阅读:
    UIGestureRecognizer在多层视图中的触发问题
    mysql出现Waiting for table metadata lock的原因及解决方案
    SQL逆向工程
    自己总结的ruby on rails 查询方法
    hdu 1536 SG函数模板题
    spring 源码分析之BeanPostProcessor
    spring bean生命周期管理--转
    java.lang.Long cannot be cast to java.lang.Integer解决办法
    Mybatis之Oracle增删查改示例--转
    Anti-If: The missing patterns--转
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461989.html
Copyright © 2011-2022 走看看