zoukankan      html  css  js  c++  java
  • Scaleform Gfx的Demo

    新建一个Demo工程时,编译之前有一些VS的配置是必须的,在Debug和Release下,工程必须包括:$(GFXSDK)\Src\GRenderer
    $(GFXSDK)\Src\GKernel
    $(GFXSDK)\Src\GFxXML
    $(GFXSDK)\Include

    这里$(GFXSDK)环境变量指的就是你安装Gfx的位置,其实如果你能够有Gfx中的Lib何Include文件夹得话,你吧他们放到工程目录下,你就可以使用相对路径来指定这些路径,就不必为每个开发人员安装Gfx了。

    至于库文件,就是一些核心的内容,这部分是不会提供源码,所以我们也必须包含这些库文件来提供给应用程序。

    $(DXSDK_DIR)\Lib\x86
    $(GFXSDK)\3rdParty\expat-2.0.1\lib
    $(GFXSDK)\Lib\$(PlatformName)\Msvc80\Debug_Static\
    $(GFXSDK)\3rdParty\zlib-1.2.3\Lib\$(PlatformName)\Msvc80\Debug
    $(GFXSDK)\3rdParty\jpeg-6b\Lib\$(PlatformName)\Msvc80\Debug

    我们开发程序时基本要用的库文件如下:

    libgfx.lib 
    libjpeg.lib
    zlib.lib 
    imm32.lib  
    winmm.lib
    libgrenderer_d3d9.lib

    作为一个没有封装过的引擎,在开发程序的时候需要建立以下的一些对象来实现一个对象的加载:

    #include "GTimer.h"
    #include "GFxEvent.h"
    #include "GFxPlayer.h" 
    #include "GFxFontLib.h"
    #include "FxPlayerLog.h"
    #include "GRendererD3D9.h"

     

    // GFxLoader 每个应用程序都需要一个Load来读取来自文件的Flash文件
    GFxLoader           gfxLoader;
     
    // SWF/GFx GFxMovieDef  这是一个具体的定义Flash文件的对象,通过它可以创建一个可操作的Flash对象
    GPtr<GFxMovieDef>   pUIMovieDef;
     
    // GFxMovieView 这是一个可以操作的Flash对象,通过它可以进行与C++和Flash直接进行通信和传递参数以及一些对影片的操作。
    GPtr<GFxMovieView>  pUIMovie;
     
    // D3D9 这个是针对这个Deam儿建立的D3D对象。
    GPtr<GRendererD3D9>   pRenderer;
    GPtr<GFxRenderConfig> pRenderConfig;

     

    第一步肯定是要为Gfx分配内存,GFxSystem对象就是这个作用,这个对象在第一个Gfx被调用时获取,并且在结束前不能释放,它位于WinMian函数头里面。

     在初始化过程中执行下面的一些操作:

    gfxLoader->SetLog(GPtr<GFxLog>(*new GFxPlayerLog())); 
     

    //读取文件的对象
    GPtr<GFxFileOpener> pfileOpener = *new GFxFileOpener 
    //  默认方式导入
    GPtr<GFxFileOpener> pfileOpener = *new GFxFileOpener;
    gfxLoader->SetFileOpener(pfileOpener);

    GfxLoader通过GFxFileOpener来读取文件内容,默认为从磁盘读入,也可以从内存或其他资源文件读入。

    D3D对象的创建和关联如下:

    // GFxD3D
    pRenderer = *GRendererD3D9::CreateRenderer();
      
    // GFxLoader
    pRenderConfig = *new GFxRenderConfig(pRenderer);
    gfxLoader->SetRenderConfig(pRenderConfig);

    这样很轻松的就将对象关联进了Gfx Movie中,这里如果不是D3D对象,而是其他对象如GameBryo等,也可以用类似的方法。

    接下来就是导入Flash文件了,通过一个宏定义路径UIMOVIE_FILENAME相对路径来导入

    // 
    pUIMovieDef = *(gfxLoader.CreateMovie(UIMOVIE_FILENAME, 
                                      GFxLoader::LoadKeepBindData |
                  GFxLoader::LoadWaitFrame1));

     

    动画实例的创建时通过上面的pUIMovieDef来创建的。

    pUIMovie = *pUIMovieDef->CreateInstance(true);
    指向动画的第一帧:
    pUIMovie->Advance(0.0f, 0);

    透明的效果和背景融合。

    pUIMovie->SetBackgroundAlpha(0.0f);

    接下来就是设置Flash的视窗和缩放方式。// 
    RECT windowRect = DXUTGetWindowClientRect();
    DWORD windowWidth = windowRect.right - windowRect.left;
    DWORD windowHeight = windowRect.bottom - windowRect.top;
    pUIMovie->SetViewport(windowWidth, windowHeight, 0, 0, 
                          windowWidth, windowHeight);

    pUIMovie->SetViewScaleMode(GFxMovieView::SM_ShowAll);//默认的方式,按上面指定窗口比例扩展

    如下是一些对齐方式的代码:
    pUIMovie->SetViewAlignment(GFxMovieView::Align_CenterRight);

     

    在消息循环里面,flash的事件响应都会在ProcessEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool *pbNoFurtherProcessing) 总进行处理。

     

    总体看起来还是很麻烦的,做了过多的底层操作。

    但是如果等到他哈GameBryo集成后的游戏引擎,你会发现这些操作你基本上都不用在去做了,而更加关注的是逻辑的设计,这里的一个Demo只是为了解释一下大体上的一个架构。

  • 相关阅读:
    系统优化怎么做-JVM优化之开篇
    系统优化怎么做-Tomcat优化
    系统优化怎么做-Linux系统配置优化
    系统优化怎么做-SQL优化
    系统优化怎么做-数据库优化
    系统优化怎么做-新系统上线前做什么
    系统优化怎么做-开篇
    一起学习Avalonia(一)
    etcd的应用举例
    c#总结几种正则表达式使用
  • 原文地址:https://www.cnblogs.com/minggoddess/p/1958562.html
Copyright © 2011-2022 走看看