Category Archives: AskGoogle/搜索学习/流水记录

Mark: Mono 的 AOT 模式类似于静态编译.

Mono在Full AOT模式下的限制
调试时遇到一个Mono运行时异常:
ExecutionEngineException: Attempting to JIT compile method ‘…’ while running with –aot-only.
最后发现原因是使用了泛型接口,导致Mono需要JIT编译,但在iOS平台中,Mono是以Full AOT模式运行的,无法使用JIT引擎,于是引发了这个异常。
Mono的AOT和.NET的Ngen一样,都是通过提前编译来减少JIT的工作,但默认情况下AOT并不编译所有IL代码,而是在优化和JIT之间取得一个平衡。由于iOS平台禁止JIT编译,于是Mono在iOS上需要Full AOT编译和运行。即预先对程序集中的所有IL代码进行AOT编译生成一个本地代码映像,然后在运行时直接加载这个映像而不再使用JIT引擎。目前由于技术或实现上的原因在使用Full AOT时有一些限制,具体可以参考MonoTouch的文档,这里提几条常见的:
不支持泛型虚方法,因为对于泛型代码,Mono通过静态分析以确定要实例化的类型并生成代码,但静态分析无法确定运行时实际调用的方法(C++也因此不支持虚模版函数)。
不支持对泛型类的P/Invoke。
目前不能使用反射中的Property.SetInfo给非空类型赋值。
值类型作为Dictionary的Key时会有问题,实际上实现了IEquatable的类型都会有此问题,因为Dictionary的默认构造函数会使用EqualityComparer.Default作为比较器,而对于实现了IEquatable的类型,EqualityComparer.Default要通过反射来实例化一个实现了IEqualityComparer的类(可以参考EqualityComparer的实现)。 解决方案是自己实现一个IEqualityComparer,然后使用Dictionary(IEqualityComparer)构造器创建Dictionary实例。
由于不允许动态生成代码,不允许使用System.Reflection.Emit,不允许动态创建类型。
由于不允许使用System.Reflection.Emit,无法使用DLR及基于DLR的任何语言。
不要混淆了Reflection.Emit和反射,所有反射的API均可用。
- See more at: http://ravenw.com/blog/2011/11/08/limitations-of-mono-with-full-aot/#sthash.JPliz7km.dpuf

Mark: Mono 的 AOT 模式类似于静态编译.

Mono在Full AOT模式下的限制
调试时遇到一个Mono运行时异常:
ExecutionEngineException: Attempting to JIT compile method ‘…’ while running with –aot-only.
最后发现原因是使用了泛型接口,导致Mono需要JIT编译,但在iOS平台中,Mono是以Full AOT模式运行的,无法使用JIT引擎,于是引发了这个异常。
Mono的AOT和.NET的Ngen一样,都是通过提前编译来减少JIT的工作,但默认情况下AOT并不编译所有IL代码,而是在优化和JIT之间取得一个平衡。由于iOS平台禁止JIT编译,于是Mono在iOS上需要Full AOT编译和运行。即预先对程序集中的所有IL代码进行AOT编译生成一个本地代码映像,然后在运行时直接加载这个映像而不再使用JIT引擎。目前由于技术或实现上的原因在使用Full AOT时有一些限制,具体可以参考MonoTouch的文档,这里提几条常见的:
不支持泛型虚方法,因为对于泛型代码,Mono通过静态分析以确定要实例化的类型并生成代码,但静态分析无法确定运行时实际调用的方法(C++也因此不支持虚模版函数)。
不支持对泛型类的P/Invoke。
目前不能使用反射中的Property.SetInfo给非空类型赋值。
值类型作为Dictionary的Key时会有问题,实际上实现了IEquatable的类型都会有此问题,因为Dictionary的默认构造函数会使用EqualityComparer.Default作为比较器,而对于实现了IEquatable的类型,EqualityComparer.Default要通过反射来实例化一个实现了IEqualityComparer的类(可以参考EqualityComparer的实现)。 解决方案是自己实现一个IEqualityComparer,然后使用Dictionary(IEqualityComparer)构造器创建Dictionary实例。
由于不允许动态生成代码,不允许使用System.Reflection.Emit,不允许动态创建类型。
由于不允许使用System.Reflection.Emit,无法使用DLR及基于DLR的任何语言。
不要混淆了Reflection.Emit和反射,所有反射的API均可用。
- See more at: http://ravenw.com/blog/2011/11/08/limitations-of-mono-with-full-aot/#sthash.JPliz7km.dpuf

Mark: Mono 的 AOT 模式类似于静态编译.

Mono在Full AOT模式下的限制
调试时遇到一个Mono运行时异常:
ExecutionEngineException: Attempting to JIT compile method ‘…’ while running with –aot-only.
最后发现原因是使用了泛型接口,导致Mono需要JIT编译,但在iOS平台中,Mono是以Full AOT模式运行的,无法使用JIT引擎,于是引发了这个异常。
Mono的AOT和.NET的Ngen一样,都是通过提前编译来减少JIT的工作,但默认情况下AOT并不编译所有IL代码,而是在优化和JIT之间取得一个平衡。由于iOS平台禁止JIT编译,于是Mono在iOS上需要Full AOT编译和运行。即预先对程序集中的所有IL代码进行AOT编译生成一个本地代码映像,然后在运行时直接加载这个映像而不再使用JIT引擎。目前由于技术或实现上的原因在使用Full AOT时有一些限制,具体可以参考MonoTouch的文档,这里提几条常见的:
不支持泛型虚方法,因为对于泛型代码,Mono通过静态分析以确定要实例化的类型并生成代码,但静态分析无法确定运行时实际调用的方法(C++也因此不支持虚模版函数)。
不支持对泛型类的P/Invoke。
目前不能使用反射中的Property.SetInfo给非空类型赋值。
值类型作为Dictionary的Key时会有问题,实际上实现了IEquatable的类型都会有此问题,因为Dictionary的默认构造函数会使用EqualityComparer.Default作为比较器,而对于实现了IEquatable的类型,EqualityComparer.Default要通过反射来实例化一个实现了IEqualityComparer的类(可以参考EqualityComparer的实现)。 解决方案是自己实现一个IEqualityComparer,然后使用Dictionary(IEqualityComparer)构造器创建Dictionary实例。
由于不允许动态生成代码,不允许使用System.Reflection.Emit,不允许动态创建类型。
由于不允许使用System.Reflection.Emit,无法使用DLR及基于DLR的任何语言。
不要混淆了Reflection.Emit和反射,所有反射的API均可用。
- See more at: http://ravenw.com/blog/2011/11/08/limitations-of-mono-with-full-aot/#sthash.JPliz7km.dpuf

使用TexturePacker 制作动画的贴图 导出在 SpriteKit 中使用.SpriteKit Animations and TextureAtlasses,Use TexturePacker.

作为经常使用的工具, TexturePacker的确是很方便的打包贴图的工具. 打包可以减少DrawCall次数.对于提升性能有很大作用.而且作者很友好,如果是开发阶段使用, 可以申请免费的授权. 当然,如果产品赚了钱都应该买一份正版.SpriteKit是ios7新的特性,为2D游戏开发而做, TexturePacker也推出了一个示范的实现,整合在一起. 工具化,制作流程规范化是趋势. 你out了么.
ios7 SpriteKit 开发者指南. http://upyun.cocimg.com/cocoachina/SpriteKit_PG.pdf
TexturePacker 下载: http://www.codeandweb.com/texturepacker/download
支持的真多啊: Cocos2d SpriteKit Corona SDK Starling Unity3D Flash / AS3 CSS / HTMLLibGDX AndEngine Moai Cocos2d-X XNA PlayStation® Suite V-Play
SpriteKit Animations and TextureAtlasses
http://www.codeandweb.com/blog/2013/09/23/spritekit-animations-and-textureatlasses
使用TexturePacker 制作动画的贴图 导出在 SpriteKit 中使用.
The main advantages over the pure Xcode solution are

Organizing your sprites in folders
Importing multiple formats such as [...]

Unity Network Programming Useful Link

Tutorials on Photon, Unity and Networking
List of third party tutorials on Photon Cloud, Photon Server, Unity 3D and Networking
Photon Tutorials

CJR Gaming (Photon Server): Comprehensive Tutorials on Photon Server, Unity and C#, from the basics to advanced. Covers development of a Photon Framework for both client and server.
Very basic Photon Cloud Tutorials Unity 3D Multiplayer Tutorial, [...]

被ios7bug,基于api的接口都是脆弱的.

此次ios7发布. 总体感觉,比ios6 ios5升级时颠覆感要强烈很多.
进而带来的就是老项目代码升级问题.
显然 作为开发应用的支持, apple 做了功课. 比如分辨率 透明statusbar处理等, 挖掘一下以后, app开发应该是可以无痛升级的. 核心代码不用改.
而游戏项目, 我们用了cocos2dx 的游戏就有点悲催, 会在ios7上闪退.  track了一番, 最后是 CCFileUtils 取路径的函数的bug. 真不知道ios7改动了啥. getfullpath 需要传入一个存在的文件名.
已经上架了的project,  至少还得重新patch compile 再提交一次..   用了cocos2dx 这么久了也有些要吐槽的, 接口差异变化挺大. 文件名改动. 换位置..各种… 冷不丁要从一旧版本升级到新版,还真有些小折腾.
跑题了, 回到标题.  ios7升级是个新的知识点. 初期没有太多可以google到的. 所以要么自己动手,要么等待..   没有项目压力的话, 还好. 否则, 你想象一下.  而基于ios api 的 api 就有可能随着底层变更而变得有些bug. 是被bug的.
而Apple显然也没进行额外的测试和支持?  只是保证了大多数情况下是ok的.
对于处理升级中遇到的问题,  其实, 如果平日你积累了人脉. 问一圈下来,大概也就有数了. 大方向不会错.
我总结如下
xcode4.6 编译也是可以跑在 ios7上的. 所以最快的方式先修了闪退的bug.  然后更新.
xcode5编译还有一些诡异的问题等着我们. [...]

cocos2dx ios7 彻底隐藏statusbar 状态栏.

在 info.plist 中添加 “View controller-based status bar appearance” 属性设置为 “NO” 就搞定了。

官方 Scaleform 文档资料和教程 链接

官方 Scaleform 文档资料和教程

Scaleform UDK 文档资料 – 官方 Scaleform 4.0 UDK 文档资料。
导入 SWF – 这个视频讨论的是创建 Flash 内容并将其导入到 UDK 中的一些重要规则。
渲染贴图 & 材质 – 这个视频讨论的是中创建对于将交互 Flash 内容显示在 UDK 关卡中的 BSP 表面上所必需的渲染贴图和材质。
将 SWF 添加到 BSP 对象 – 在这个视频中,我们谈到了将一个 Flash 文件添加到一个 BSP 表面上所需要进行的步骤,其中包括必需的 Kismet 工作流程。
捕获输入 – 在这个视频中,我们说明了如何使用 GFx 捕获按键 kismet 节点将键盘和游戏控制器输入传输到 Flash 文件中。这样它会解释说明这个输入,然后使您可以旋转 3D 中的视频剪辑。
使用 Invoke ActionScript & FSCommands – 在这个视频中,我们谈到了 [...]

Event in C#

Just to add to the existing great answers here – building on the code in the accepted one, which uses a delegate void MyEventHandler(string foo)…
Because the compiler knows the delegate type of the SomethingHappened event, this:
myObj.SomethingHappened += HandleSomethingHappened;
Is totally equivalent to:
myObj.SomethingHappened += new MyEventHandler(HandleSomethingHappened);
And handlers can also be unregistered with -= like this:
// -= removes [...]

Recheck the words and grammar that you previously checked and chose to ignore

Recheck the words and grammar that you previously checked and chose to ignore
In Word and Outlook, you can force a recheck of the words and grammar that you previously choose to ignore by doing the following:

Word

Open the document that needs to be checked.
Click the File tab.
Under Help, click Options.
Under Correcting spelling and grammar in Word, [...]