加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Scaleform Gfx的Demo

发布时间:2020-12-15 07:14:27 所属栏目:百科 来源:网络整理
导读:新建一个Demo工程时,编译之前有一些VS的配置是必须的,在Debug和Release下,工程必须包括:$(GFXSDK)SrcGRenderer $(GFXSDK)SrcGKernel $(GFXSDK)SrcGFxXML $(GFXSDK)Include 这里$(GFXSDK)环境变量指的就是你安装Gfx的位置,其实如果你能够有Gfx中

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

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

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

$(DXSDK_DIR)Libx86
$(GFXSDK)3rdPartyexpat-2.0.1lib
$(GFXSDK)Lib$(PlatformName)Msvc80Debug_Static
$(GFXSDK)3rdPartyzlib-1.2.3Lib$(PlatformName)Msvc80Debug
$(GFXSDK)3rdPartyjpeg-6bLib$(PlatformName)Msvc80Debug

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

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,?
??????????????????????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只是为了解释一下大体上的一个架构。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读