iDom

关注HTML5 UI框架 Mobile 图形渲染

开启V8的JavaScript调试服务

V8的Javascript调试服务就是一个本地的Socket连接,嵌入V8的程序通过这个本地连接发送JSON字符串协议内容,与前端的调试工具进行交互。前端的调试工具通常是Chrome自带的开发者工具窗口,也有一些实现了V8调试协议的IDE,比如WebStorm,VSCode等。具体的调试协议内容可以参考这里:https://github.com/v8/v8/wiki/Debugging-Pr...

V8里又有一大波即将废弃的API

相关链接:https://groups.google.com/forum/#!topic/v8-users/gQVpp1HmbqM 这次API变动涉及的规模非常之庞大,绝大部分我们会使用到的接口都要更新一遍。这里简单解读一下变动的原因以及新接口的使用方法。首先来看下面这个示例: Local<Value> x = some_value; Local<String> ...

V8中JS与C++性能测试对比

测试方法 预先在JS端构造1000w组随机数据,每组数据四个数值,代表:x,y,width,height。然后将所有测试数据传入Native,确保JS和Native测试的数据是完全相同的。 var data = []; var i, t, x, y, width, height, index, start; for (i = 0; i < SIZE; i++) { x = ...

在Mac下使用libc++编译v8

Mac从10.7开始,系统默认的标准库改成了libc++,支持c++11标准,系统里也还有之前的libstdc++,但它是一个固定的旧版本,不支持c++11标准。虽然大的趋势是都使用libc++,但是还有不少老项目在使用libstdc++编译,导致跟其它库混合使用的时候可能会出现链接错误。chrome v8 就是这样,默认的编译配置是依赖libstdc++的而不是libc++,导致编译出来的...

使用代理同步谷歌项目时出现文件下载失败

在按官方文档使用 gclient sync 命令同步谷歌v8或Chromium项目时,最后总是会出现文件下载失败的报错: Failed to fetch file gs://chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305 for src/buildtools/mac/gn. ... Error: Command 'download_...

Mac上直接解压C++静态库的问题

这段时间在研究C++的各种编译构建过程,学习了一下cmake,gyp/ninja这些自动化构建工具后,想着自己试下用纯命令行跑一遍编译流程。在试图把C++静态库编译为动态库的过程中遇到了棘手的问题,找了好久,最后发现是跟Mac平台相关的,这里记录一下,希望对遇到类似问题的童鞋有帮助。 C++的静态库(*.a文件)就是一个压缩包,把所有 *.o 文件打包在里面。所以我想尝试做的事很简单:就是...

显示列表与脏矩形渲染

这篇文章主要讲解显示列表与脏矩形渲染的基础概念,希望这部分内容对大家理解2D屏幕渲染过程会有帮助。:D 什么是显示列表? 在2D图形渲染中,显示列表是非常成熟的一种渲染组织方式,它封装了晦涩难以操作的底层绘图接口,提供给开发者一套非常简易且高效的API,来组织显示元素最终呈现到屏幕上。如下图,是一个简单的显示列表示例。 显示列表是一个树状的结构,列表中的每个节点叫做显示对象。显示对...

博客以及邮箱全面更换域名

最近偶然间发现.me的域名居然还有四位字母的可以注册,赶紧注册了一个:「idom.me 」。同事们纷纷表示这个域名比之前的「domlib.com」好多了,说之前的「xxxlib」透露着一股浓浓的屌丝码农气息(此处应有二胡声)。。。为了顺应广大人民群众的意见,含泪换掉了用了4年的「domlib.com」,一并连各种账号以及邮箱都更新到了「idom.me」。最新博客地址为:http://www....

JS中常用类型格式化方法

由于JavaScript是弱类型的语言,项目写大了会非常难以把控,容易出各种问题。幸好有强类型的TypeScript可以很大程度上弥补这一缺陷,但TypeScript提供的强类型是编译阶段的,虽然绝大部分类型相关的问题在编译阶段都能被覆盖到,但对于小部分在运行时才会出错的错误还是无能为力。 例如以下几种常见的情况: 定义为number的属性,赋值的时候,如果赋值源没有定义强类型,这...

区分TS中的namespace和module

从TypeScript 0.9的beta版本就开始用它了,很有意思的地方它自身的编译器也是用TS写的,只要想起这个就会陷入深深的递归。。。这几天有时间去研究了一下TS的编译器项目,想看看官方是如何用TS组织一个nodejs命令行项目的。突然发现一直用了很久的module关键字全都变成了namespace,赶紧查了一下文档是这么说的: A note about terminology: It...

WebGL获取Context时的附加参数

最近在研究WebGL渲染,本想用模板缓冲实现类似Canvas2d上的clip()接口,绘制时裁切指定范围。可是发现无论怎么设置模板缓冲都没法正确显示。最后谷歌了一下才发现只设置gl.enable(gl.STENCIL_TEST)是不够的,在获取WebGL的context时还需要额外设置参数才能开启模板缓冲功能: var gl = canvas.getContext("webgl",{ste...

TypeScript进阶玩法

本来这篇文章准备写一下TypeScript的各种语法特性。发现N神的那篇博客《从 ActionScript3 到 TypeScript》好像又更新了,对TS的语法覆盖已经挺全的了。那这篇文章就接着N神的博客,写一下部分进阶部分的内容吧。另外,推荐从ActionScript3转到TypeScript上的童鞋,同时可以看一下这篇关于JavaScript的教程,对理解TypeScript也非常有帮...

Lark新特性解读(三)

更新: Lark项目的新特性现已全面合并到Egret Engine 2.5+中,不再独立维护,Lark GUI(Swan)扩展库,对应Egret Engine 2.5+中的EUI扩展库。 这是这系列文章的第三篇,主要介绍Lark GUI库的新特性。Lark GUI的API在swan这个模块名下,开发者可以通过swan.*方式访问到它们。在前两篇介绍的Lark核心库中,我们通过各种优化措施,...

Lark新特性解读(二)

更新: Lark项目的新特性现已全面合并到Egret Engine 2.5+中,不再独立维护,Lark GUI(Swan)扩展库,对应Egret Engine 2.5+中的EUI扩展库。 这篇文章接着上一篇《Lark新特性解读(一)》,继续解读Lark核心库新特性的后半部分。 屏幕适配模式 Lark里精简了初始化过程,设置屏幕适配模式,不再需要去修改加载器代码,只需在Lark Div节...

Lark新特性解读(一)

更新: Lark项目的新特性现已全面合并到Egret Engine 2.5+中,不再独立维护,Lark GUI(Swan)扩展库,对应Egret Engine 2.5+中的EUI扩展库。 什么是Lark? Github开源地址:https://github.com/egret-labs/Lark Lark 是一款基于 HTML5 技术构建跨平台移动 Web 应用,微站和富媒体广告营...

一个最精简的MVC系统

其实我蛮不理解MVC这种东西怎么会被写成一个框架的,它应该只是一篇项目结构的规范文档。没有具体考证,我所知道的最早引入MVC的也用的最好的应该是JAVA Web开发,Spring之类的框架。后来不知道谁开始把这套web架构推广到了游戏开发里。搜索一下MVC你会发现无数的框架出来:PureMVC,RobotLegs。。。我不知道具体到底有多少人在用这些框架,至少我所认识人和游戏项目,好像都没见...

AS3类在第一行报override错误解决方法

感慨一下,好久好久都没写过博客了。工作实在忙的没人性。。[流泪] 今天遇到一个问题,网上找了好久没搜索到答案。后来解决了,来这里记录一下。剧情经过是这样的:我们之前的多个项目,一直在用FB4.7开发,纯ActionScript+AIR项目,FB4.7自然默认给你用新的编译器。可是这个新的编译器非常坑。自己都有无数个bug。估计是刚刚开发出来还没来得及测试Flash团队就被Adobe裁掉了。...

Mac下导出的绑定运行时AIR程序闪退的问题

这几天在测试AIR的运行时绑定功能,目标要导出桌面系统的AIR程序包。Windows是直接生成一个文件夹,双击里面的xxx.exe运行正常。而Mac下生成的是xxx.app的文件夹,但是在mac里直接显示成一个文件,双击启动总是闪退。经过不断的测试。发现跟磁盘分区格式可能有关系。 我的Mac是安装了双系统,所以有三个分区。两个系统,一个数据共享盘(NTFS格式)。Flash Builder...

写在EgretWing出来之前

剧透一下:经过我们软件工具团队的努力,Egret Wing应该会提早跟大家见面。第一个公开测试版预计会在两月后发布。在发布之前,为了让大家少走弯路,我感觉很有必要说明一件事:千万千万别直接从编辑器开始学Egret GUI。 先说一下Egret GUI的来历。这要先说FlexLite这个开源框架。详细信息可以参考这里:FlexLite游戏UI解决方案 简单说:FlexLite是基于Fle...

使用Chrome调试NodeJS脚本

1.首先在命令行执行npm以全局模式安装node-inspector插件: npm install -g node-inspector 2.然后用node命令执行需要调试的脚本,但是要加上–debug-brk参数,例如:node –debug-brk=5858 test.js 脚本现在就已经断点在了第一行,并且在等待5858端口的监听程序启动。 3.重启一个命令行窗口(注意是重启...