Jim Chen

Results 20 issues of Jim Chen

Doesn't work well with imput methods (IMEs). Under Linux (Mint 16) with IBus the canvas region polls changes too frequently, so for IMEs that require multiple keystrokes, input does not...

TODO: - [ ] Architecture - [x] Separate out rendering into pluggable renderers - [x] Type-safe definitions - [ ] Port over existing JS Classes - [ ] Core -...

enhancement

AS3的TextField提供了上述两个属性。可是在Worker里面无法准确计算渲染的参数,沙箱外通讯又困难(二者都是同步性访问的属性,鉴于使用实际情况考虑,可能异步回调结果会没什么用)。 所以目测只能估算值。 - 创建对象,估算(`textWidth = length * pixelheight`, `textHeight = pixelheight`,暂且认定字符等宽等高,不靠谱,有待提升) - 对象创建后返回回调的真实数据 - 更新文字等,都要等回调返新的数据。立即访问的话访问不到新的数据,估计只会访问到估算值。 欢迎提供建议

bug

目前 `grunt-template-jasmine-istanbul` 各种跟新的 2.0 jasmine不太work,所以先行关掉了coverage。 等这几个项目修好了之后再重新引入(或许也会改编译方案)

bug

![screenshot from 2014-05-10 21 11 24](https://cloud.githubusercontent.com/assets/821034/2937491/ba543928-d8a9-11e3-9d23-87c2600c0160.png) 目前BUG: - 进入video模式后没法退出。 - 之前的很多能用的测试就坏掉了 有待提升: - Profiler优化,支持记录 FPS - 更可靠的调试平台和更多的预置实验性脚本

enhancement

规范化弹幕格式接口,现在比较混乱

enhancement

``` XML [655,188,"1-1",0.3,"爱",0,0,655,188,1100,0,false,"黑体",1,"M152,84L152,83L153,83L153,84L154,84L154,85L156,86L156,88L159,92L161,94L162,96L164,98L166,100L167,101L168,101L169,101L170,103L171,104L172,105L173,106"] ``` 最后一个参数疑似是路径参数(M:moveTo,L:lineTo)? `M152,84L152,83L153,83L153,84L154,84L154,85L156,86L156,88L159,92L161,94L162,96L164,98L166,100L167,101L168,101L169,101L170,103L171,104L172,105L173,106` 难道现在高级弹幕里面可以内嵌SVG了?还是说定义运动路径?文字沿着路径排布? 有待研究。

question

有关属性更新目前效率相对低。比如 elem.x = 100, elem.y = 100, elem.rotation = 90 实际上会执行三次 postMessage操作每次更新一个属性。 本Issue将研究如果每次更改参数,并不立即发送 message而是在每次 enterFrame操作触发后在一批发送更新,或许可能提高弹幕的运行效率,同时因为所有的操作都会被缓存,同时连续 obj.x = 100, obj.x = 200 将可以合并成一个属性更新记录。 有关缺点: - 延时性:虽然enterFrame是理论刷新率,但是毕竟还是和实时不一样,而且在现实中很可能低于系统实际支持的传输效率(默认为24fps),这可能导致有一些属性更新产生微小但可能可察觉的延时。提高enterFrame到 60fps 或许会解决延时问题,但是将导致很多动画触发太快而悲剧。 - enterFrame总线繁忙:这样归类之后,每次enterFrame发送的信息包就变大了,而且所有DO的enterFrame是一起触发的,那么有可能导致总线堵塞,产生更新卡顿。(但是因为函数都是异步的又是nonblocking,应该不会卡) -一次PostMessage很大,据说Firefox有bug(未确认,可能已修)...

enhancement

目前基本能还原transform。采取的方式是传递2d或者3d的matrix来更新transform。但是和别的东西联动起来有时有BUG。 1. 目前SVG和Canvas的缺点是渲染的cropping切割问题,这是与AS3的最大兼容性问题: 举例,假如有一个 Shape 在坐标 (100,100),你绘制了一个 `drawCircle(0,0,100)` (圆心在原点,半径为100的圆)那么,在AS3上你将看到一个完整的圆,而在Canvas或SVG上由于渲染层不能溢出,所以你只能看到圆的右下1/4。 ![untitled](https://cloud.githubusercontent.com/assets/821034/3563267/bdd16866-0a2a-11e4-8b51-b4d233eb95de.png) 2. 为了解决Cropping问题,我们采取了一个一点也不机智的Hack: 在绘制SVG时,永远以 (0,0)放置SVG图层,但是在SVG图层里面放一个SVG组,绘制时绘制到SVG组里面,然后对整个组平移,这样就总能看到完整的圆了。 ![untitled](https://cloud.githubusercontent.com/assets/821034/3563268/312113fc-0a2b-11e4-9828-c013491a8ed6.png) 但是这有个BUG,就是如果把SVG图作为 child 添加到了一个 Sprite里面,那么SVG的相对坐标为(0,0)是相对父级对象的。而如果把这个Sprite放到 (100,100),把SVG放到Sprite里面的 (0,0) 则又只能看到1/4圆了。(图为半圆情况) ![untitled](https://cloud.githubusercontent.com/assets/821034/3563272/a1909b8a-0a2b-11e4-9495-9bb12e872850.png) 所以又机智的Hack了一下,即,每当SVG被当作子插入父级对象,则先向左平移SVG元素到相对于舞台的 (0,0),然后再把SVG里面的组平移,补齐位置差。 ![untitled](https://cloud.githubusercontent.com/assets/821034/3563285/23e26988-0a2c-11e4-826c-69db0a26befb.png) 3. 后来发现这个Hack会搞坏旋转: 假设有一个 Sprite...

bug

有关高级代码弹幕引擎,目前还需要实现如下 - 补全Bili播放器的API:估计部分需要采用一些getter/setter 的hack,或多或少会降低兼容性,保证在Webkit能跑就可以采取了通用的getter/setter模式 - 还原Bili和AS3的各个API - 细化沙箱传输协议:以便以后开发和调试,以及扩展(使用其他的代码解析器/API) - 考虑增加单一Worker模式,这样全局变量就能实现了,然后通过messaging来注入代码,因为在Callback里面,所以也不会破坏Worker - 解决目前SVG问题:Bili播放器图形绘制支持负坐标,SVG不支持(*目前设想是找到最小负坐标,然后offset一下所有的坐标。但是由于SVG是动态绘制的。。。可能比较BUG,也许看看有没有其他的SVG的API 支持负值坐标。。。) - Tween 库 - 解决事件挂载 event listener 效率问题 - 实现 canvas 作为前端渲染的绘图模式 - 支持 Bitmap 库 -...

enhancement