将cocos2d

Jun 07, 2016 pm 03:33 PM
windows 数据 目录 程序

程序可写数据目录: Windows::Storage::ApplicationData::Current-LocalFolder-Path; 第一个目录就是程序目录(注意这个目录不包含Assets文件夹,需要自己拼接),第二个目录就是可写目录,也就是类ios下面的document目录。 win8程序只能读取这两个目录中的资

程序可写数据目录: Windows::Storage::ApplicationData::Current->LocalFolder->Path;   第一个目录就是程序目录(注意这个目录不包含Assets文件夹,需要自己拼接),第二个目录就是可写目录,也就是类似ios下面的document目录。

   win8程序只能读取这两个目录中的资源,禁止读取其他目录的资源。vs2012中添加游戏资源不是一件容易的事情,如果我骂了微软的傻x工程师一晚上是错误的话,那麻烦尽快告诉我。我非常急切的想知道向vs2012中添加资源目录的方法(自己测试显示所有文件和拖拽文件的方式均无效,只能手工一个文件夹一个文件夹的建立)。有一个偷懒,但是更加靠谱的方式,就是直接把资源拷贝到编译目录下的AppX目录下面,暂时不知道将来发布时会对编译包有什么样的影响。

   读取的时候就可以使用 Package::Current->InstalledLocation->Path 加上文件相对路径(实际文件夹路径),来访问。

3、部分附加功能

打开外部网页 Launcher::LaunchUriAsync(ref new Windows::Foundation::Uri("www.baidu.com"));

4、调试和其他

     vs2012有一个诡异的地方,还没有看究竟是什么原因。至少单从代码上面我是无法理解了。 windows metro应用的循环(在一个Run函数里面,类似win32的while true的循环)只有在窗体active的时候才会运行,这个时候cocos2d-x的action timer什么的才能正常跑,跑到后台后就不运行了(比如鼠标移动到左上角选择vs2012,这样当前程序就跑到后台了),不知道卡在哪里了。从后台到前台后可以继续正常运行。

    编译到Device时可能出现LuaCocos2d.cpp编译不过的问题,开启这个选项后正常  /Gy (启用函数级链接)

    部署到真机的时候,真机要保持解锁状态。

    关于如何向项目中添加游戏资源。这个真是个老大难的问题了,真心被vs2012给恶心到了。 win8 metro版本的程序还有个比较简单的方法,那就是直接把资源拷贝到AppX目录下。但是wp8的项目自动打包成xap然后部署到真机和模拟器上面,无法这样做。所以只能把游戏资源加入到工程中。加入的方法是:

     a、建议筛选器(可以不与实际文件夹一一对应,但是建议对应),设置筛选器支持的扩展名,如果不设置就只识别cpp文件

     b、将资源文件拖拽到vs2012的工程中,并将“是否是内容”这个属性设置为True,这样它就被识别为一个资源文件而不会进行编译了

     c、资源文件应该放置在Assets目录下。只有在这个目录下才能正确的按照目录生成对应的目标目录,否则资源文件会散落在xap包的根目录。

5、渲染修改

   之前说过win8 metro不支持opengl/opengles,只支持dx11。我原本以为这个修改会是一个浩大的工程,但是后来发现了一个很酷的项目,一切都变得简单起来。Angle Project (http://code.google.com/p/angleproject/) .这个项目使用opengl的api将dx进行封装。opengl egl的接口与windows版本一模一样。基于此项目,我们只需要把angle接入工程,然后做少量修改(外部引擎代码几乎无修改)就可以达到移植的目的。主要的修改有:

    a、shader修改,这个是第一个大难题。win 8 metro不支持运行时编译shader,所有的shader需要编译器生成(.cso扩展名),然后直接加载这个二进制的shader。 这个我不太熟悉,所以使用了有点恶心的解决方案,同时保存一份glsl的shader,和对应的hlsl编译而成的cso文件(angle支持glsl->hlsl的转换,可以获得对应的hlsl shader文本),glsl的文本交给angle进行解析(但不编译),cso的shader用于实际加载。 之所以要保存glsl是因为dx加载shader时有各种layout和attribute,如果非常熟悉angle代码可以自己修改,否则还是交给angle进行解析自动配置比较好。

   b、窗体界面修改,这个是第二个大难题。win 8 metro不再使用win32 api,也就没有HWND这种东西了,因此创建dx设备和swapchain的代码都要做相应调整。不过好在修改不是非常大。我们可以使用typedef Platform::Agile<:ui::core::corewindow> EGLNativeWindowType; 这个东西来替代HWND作为窗口句柄。 代码基本可以保持不变,就是判断句柄有效的时候要跟nullptr进行比较而不能直接用 !mWnd这种写法。 创建dx设备的代码对应修改为dx11_1的版本。

   除开这两处修改,其他的都是零零星星的修改,并且不会散落在大量文件里面,主要还是platform文件夹里面的文件替换。个人感觉这个解决方案已经非常完美了,并且是可以合并到cocos2d-x分支里面。无论后面cocos2d-x升级到什么版本,接口如何修改,都能保证win8版本的正常运行,只要opengl代码正常就可以了。并且基于此,像ogre一样渲染分离意义显得不是那么大了,单独写一个所谓的dx renderer也没有太大必要。

   微软很恶心,明明希望win8和wp8平台统一,但是支持特性又有很多差别。wp8不支持d2d也就是说文字渲染相关的东西都要自己实现(freetype),feature level只支持到9.3,angle的dx11的实现还要做一些修改才能正常运行在wp8上面。

                         1、ID3DBuffer的bindFlag不能同时设置vertex和index,要在上层做判断,设置成其中的一个。

                         2、不支持非2的整次幂的图片进行mipmap,这个是angle内部代码有一处需要修改的

                         3、CreateSamplerState的参数中maxmod要修改为FT_MAX,原本可以设置为0.这个可能会造成部分图片无法显示的问题。完美的解决方案我再研究研究。


6、lua脚本的修改

    win8可以直接编译一个对应的luajit静态库,目测没有实际问题。直接用luajit自带的make文件就可以了。  使用上也没有什么特殊的地方。

    wp8暂时没有找到编译luajit的方法。暂时使用原始lua。最简单的方法就是把lua原文件加入到工程中。 这里要注意下,我使用的版本的lua貌似没有很好的兼容utf8的文本,所以需要在CocosLuaLoader文件读取的时候自己判断bom然后去除最开始的三个字节(如果文件有bom的话)。


7、一些第三方依赖库的说明

    freetype是渲染文字用的。微软真tmd恶心,windows 8 支持的d2d到windows phone上面竟然不支持了。 所以只有使用freetype进行文本渲染。这个官方移植版本里面有对应的库文件,暂时不需要重新编译。

    libpng这个是因为一个链接错误。setjmp没有对应的实现。这个在win8上面是没有问题的,但是wp8上面链接不过。这个是因为libpng的库版本不一致,最稳妥的解决方法是自己下载最新的libpng库,把代码加入到工程中。

    模拟器上面用的是x86版本的静态库,真机上面需要的是arm版本的静态库,不同的平台可以选择不同的工程配置。


8、真机和模拟器的差异

     除开x86和arm的cpu架构差异,最主要的还是对dx的支持。windows phone设备只支持feather 9.3,而模拟器和win8则支持到feather 11.1。所以我们要写如下代码以便把模拟器dx特性限定在9.3防止出现模拟器运行正常而到真机上会崩溃的问题。  而限定featherlevel最主要的影响就是shader的支持,wp8只支持sm2.0,直接来说就是angle项目中预先编译好的二进制形式的shader都不能用了,需要再想办法替换。

	D3D_FEATURE_LEVEL featureLevels[] = 
	{
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
		D3D_FEATURE_LEVEL_9_3,
		D3D_FEATURE_LEVEL_9_2,
		D3D_FEATURE_LEVEL_9_1
#else
		D3D_FEATURE_LEVEL_11_1,
		D3D_FEATURE_LEVEL_11_0,
		D3D_FEATURE_LEVEL_10_1,
		D3D_FEATURE_LEVEL_10_0,
		D3D_FEATURE_LEVEL_9_3,
		D3D_FEATURE_LEVEL_9_2,
		D3D_FEATURE_LEVEL_9_1
#endif
	};
登录后复制


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
mysql怎么复制粘贴 mysql怎么复制粘贴 Apr 08, 2025 pm 07:18 PM

MySQL 中的复制粘贴包含以下步骤:选择数据,使用 Ctrl C(Windows)或 Cmd C(Mac)复制;在目标位置右键单击,选择“粘贴”或使用 Ctrl V(Windows)或 Cmd V(Mac);复制的数据将插入到目标位置,或替换现有数据(取决于目标位置是否已存在数据)。

vs code 可以在 Windows 8 中运行吗 vs code 可以在 Windows 8 中运行吗 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

Debian中Tigervnc支持哪些操作系统 Debian中Tigervnc支持哪些操作系统 Apr 12, 2025 pm 10:15 PM

开源VNC工具Tigervnc兼容众多操作系统,其中包括Windows、Linux和macOS。本文将详细介绍Tigervnc在Debian系统上的应用情况。Tigervnc在Debian系统的应用系统集成:在Debian系统中,Tigervnc作为VNC服务器组件被集成到系统中。用户可通过命令行工具(例如vncserver)启动VNC服务,并自定义显示设置,如分辨率和色彩深度。跨平台连接:Tigervnc客户端支持Windows、Linux和macOS,这意味着用户可以从任何运行这

sublime写好代码后如何运行 sublime写好代码后如何运行 Apr 16, 2025 am 08:51 AM

在 Sublime 中运行代码的方法有六种:通过热键、菜单、构建系统、命令行、设置默认构建系统和自定义构建命令,并可通过右键单击项目/文件运行单个文件/项目,构建系统可用性取决于 Sublime Text 的安装情况。

laravel安装代码 laravel安装代码 Apr 18, 2025 pm 12:30 PM

要安装 Laravel,需依序进行以下步骤:安装 Composer(适用于 macOS/Linux 和 Windows)安装 Laravel 安装器创建新项目启动服务访问应用程序(网址:http://127.0.0.1:8000)设置数据库连接(如果需要)

Mac系统中的系统维护与优化工具推荐 Mac系统中的系统维护与优化工具推荐 Apr 12, 2025 pm 04:45 PM

Mac 系统维护包括:磁盘管理(使用 OmniDiskSweeper 清理磁盘空间,用磁盘工具检查磁盘错误)内存管理(用 Activity Monitor 监控内存占用,结束占用过高的进程)启动项管理(用 Linc 或 LaunchControl 管理启动项,禁用不必要的启动项)系统缓存清理(用 CleanMyMac X 或手动清理系统缓存)软件更新(及时更新系统和应用程序)定期备份(使用 Time Machine 定期备份数据)良好使用习惯(不过度安装应用程序,定期清理文件,监控系统日志)

如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! 如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! Apr 17, 2025 pm 09:54 PM

在Laravel开发中,处理复杂的模型关系一直是个挑战,特别是当涉及到多层级的BelongsToThrough关系时。最近,我在处理一个多级模型关系的项目中遇到了这个问题,传统的HasManyThrough关系无法满足需求,导致数据查询变得复杂且低效。经过一番探索,我找到了staudenmeir/belongs-to-through这个库,它通过Composer轻松安装并解决了我的困扰。

git软件安装 git软件安装 Apr 17, 2025 am 11:57 AM

安装 Git 软件包括以下步骤:下载安装包运行安装包验证安装配置 Git安装 Git Bash(仅限 Windows)

See all articles