SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5395|回复: 5
打印 上一主题 下一主题

[Discuss] 集中询问SDL2ROSE目前的可用性以及可能遇到的坑和瓶颈

[复制链接]

2

主题

6

帖子

30

积分

新手上路

Rank: 1

积分
30
跳转到指定楼层
楼主
发表于 2016-12-30 15:11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 望江饥 于 2016-12-30 19:47 编辑

蔡总你好,之前我是做cocos2dx游戏开发,最近打算做ffmpeg或vlc的跨平台定制播放器。但无奈在知乎上看到这篇《cocos2dx 开发非游戏应用是否可行? 》https://www.zhihu.com/question/25815883,提到cocos2dx做应用会很耗电、性能也差。并且一年多以前我也曾在电脑上(win或mac记不清)试过cocos2dx嵌入libvlc播放x264视频,结果蛮卡,频繁出现画面撕屏,脑补手机上的话会更卡于是放弃cocos2dx与vlc结合。(当时我也忘记降低帧数了,如果把cocos2dx调到每秒24帧不知能否明显改善性能)

之后我用wax框架,可以跨ios和mac平台,但还差windows和android。现在听说SDL2性能还不错(毕竟ffplay天生就是和SDL结合的),还看到你的ROSE跨平台框架介绍感到非常用心和辛苦,
在尝试ROSE之前想询问你它目前的情况,开发中可能遇到的坑和瓶颈(主要针对系统:ios android win ,支持mac更好)

0. 我没找到rose studio下载链接,去github的Rose项目搜了一下,已经包含在源码apps-src/apps/studio这里了吗?

1. SDL2或者说ROSE既可以开发游戏又可以顺畅开发应用吗?如果开发应用的话,会不会像cocos2dx开发应用那样,要比平台原生应用更耗电?性能要差以及其它不足?

2. 应用中打开网页的话是如何处理的呢?能否跳转到各平台原生的浏览器?能否将平台原生的webview嵌入到ROSE中来?可以正常加载网页中CSS样式JS以及HTML5?

3. ROSE是如何支持内购的呢?是已经帮我们接好了类似anysdk、易接sdk这样的万能渠道sdk?还是仅仅接入了ROSE自己实现的个别渠道代码?(包括哪些渠道?)

4. 关于输入框输入法,由于之前被cocos2dx坑过。看到ROSE把联想词语打不出的细节问题都已解决了,还是想再次和你确认,目前ROSE在输入框输入法跨平台时,是否还存在不如意的地方?输入框内文字复制粘贴可以吗?输入法介入时,需要自己用代码抬高画面高度吧?还是不必操心,只管调用ROSE接口即可?

5. 多语种多行文本自动换行的问题,网上看到用原生SDL的程序员都抱怨需要自己想办法解决。目前ROSE有现成的支持中英文自动换行的文本控件吗?有富文本控件吗?文字描边用freetype可以实现吧其中有没有什么坑?

6. 关于多行列表,之前玩cocos2dx时被ccscrollview和cctableview坑过无数回。请问ROSE目前有支持单元自动回收的滑动列表控件吧,使用中有没有什么特别的问题?另外,Rose Studio都支持所有的Rose控件进行可视化界面布局吗?当年cocostudio就不支持cctableview,必须手写代码进行布局。

7. 关于触摸事件,ROSE目前除了支持单点触摸也支持安卓和苹果多点触摸吗?我需要自己定制特殊的手势,所以想要自己重写TouchBegin TouchMove TouchEnd这些事件。昨晚用ipad5(ios9)下载玩了王国战争,发现所有水平滑块均无法被拖动,刚才试玩了安卓版滑块也是一点都拖不动;滑动大地图是蛮正常的,地图比我手指移动稍快些;滑动超出屏幕范围的多行文字或者列表时,很不顺畅,必须要手指飞快擦过屏幕,才能带动滑动列表(但这样会导致滑过头了来不及看)。如果是手指慢慢按住屏幕,再慢慢拖动列表一点一点滑,那么滑动列表是不动的。不知道新版本ROSE是否已解决此问题?

8. 可以和平台特有API或回调对接吗,是否方便?例如我想调用苹果Siri的API,这是苹果特有的API。或者我想获取各平台cpu序列号作为机器码注册验证手段。亦或者按了iPad的HOME键,会触发苹果系统的applicationDidEnterBackground,我可以在这里补代码吧?还是ROSE已经给出了专门对应applicationDidEnterBackground的跨平台回调函数,我直接去ROSE指定的回调函数那里补写代码?

9. 昨晚玩王国战争时,只要按苹果HOME键切换回桌面,游戏都会崩溃,切换回来之后都要重新启动游戏,安卓版好像也是这样问题。不知新版ROSE是否已解决此问题?

10. lua调用ROSE方便吗?我是lua控,业务逻辑代码喜欢都用lua写,将来需求改变的话热更新代码也方便,ROSE有提供lua热更新的模块吗?用tolua++可以把大量C++代码作为接口给lua调用,但是据说C++模板代码不被tolua++支持,请问ROSE当中用C++模板的地方多不多?我可以很方便用lua代替C++代码来写业务逻辑吗?

以上问题同时也可作为程序员的需求,想听到您的解答。再次感谢蔡总多年的耕耘和为开源所做的这一切!毕竟cocos2dx背后有着近亿美元的融资和多人的团队才做成那样,真心祝愿ROSE早一天形成规模,大家也会更易于使用,到那时我们不再是孤独的战斗!
回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
发表于 2016-12-30 22:26:17 | 只看该作者
本帖最后由 ancientcc 于 2016-12-30 22:39 编辑

看你有说到播放视频,先说下这段时间我正在做的事:把google的webrtc模块集成进Rose。这几天刚解决在iOS平台用硬编码的h264进行视频聊天。明天开始尝试在Window用ffmpeg解码出iOS硬编码的h264。

除了王国战争,App Store还有两个基于Rose的app,“芝麻睡眠”、“芝麻宝宝贴”(这个需要体温贴,一个蓝牙设备),公司都是Shanghai OpenSesame。下载“芝麻睡眠”,就可体验双点触摸、微信、QQ登录等功能了。

0. 我没找到rose studio下载链接,去github的Rose项目搜了一下,已经包含在源码apps-src/apps/studio这里了吗?
Rose Studio是基于Rose写的,源码中就包含了Rose源码,具体是当中的apps-src/apps/librose。因为开发肯定缺不了这个app,所以不再提供单独librose,就用这个app源码代替了。

1. SDL2或者说ROSE既可以开发游戏又可以顺畅开发应用吗?如果开发应用的话,会不会像cocos2dx开发应用那样,要比平台原生应用更耗电?性能要差以及其它不足?
SDL2是个纯C库,在封装功能后不做任何修饰就交给app,因而效率非常高。另外说下,SDL2对SDL的最大提升是渲染图像支持了硬件加速,即iOS、Andorid是OpenGL ES,Windows则同时支持了DirectX、OpenGL。

2. 应用中打开网页的话是如何处理的呢?能否跳转到各平台原生的浏览器?能否将平台原生的webview嵌入到ROSE中来?可以正常加载网页中CSS样式JS以及HTML5?
应用中打开网页,不同平台是不同方法,流行的趋势是两个app间跳转。像iOS,你自个有个app,想调用浏览器则去打开Safari。要跳转到原生浏览器,Andorid、iOS、Windows都是支持的。现代操作系统对app的处理是越来越“沙盒”,即要保证各app间互不干扰。

3. ROSE是如何支持内购的呢?是已经帮我们接好了类似anysdk、易接sdk这样的万能渠道sdk?还是仅仅接入了ROSE自己实现的个别渠道代码?(包括哪些渠道?)
Rose当前没实现标准化的内购代码。但看你玩过iOS下“王国战争”,那应该知道“王国战争”是支持内购了。“王国战争”中内购代码是用ObjectC写的,我当时参考网上些例子很快就写了。

4. 关于输入框输入法,由于之前被cocos2dx坑过。看到ROSE把联想词语打不出的细节问题都已解决了,还是想再次和你确认,目前ROSE在输入框输入法跨平台时,是否还存在不如意的地方?输入框内文字复制粘贴可以吗?输入法介入时,需要自己用代码抬高画面高度吧?还是不必操心,只管调用ROSE接口即可?
输入框的问题的确较坑人,这个估计和国外开发人员多是母语就是英文有关。就说你写的“联想词语”,官方SDL到现在都没支持,我只是在自个修订版的SDL中实现了。对输入框,如果只是输字,iOS、Android都已较稳定了。但除去输入,输入框还须要其它功能,像长按要弹出“复制”、“粘贴”、“选择”菜单啥的,这当前没实现。

5. 多语种多行文本自动换行的问题,网上看到用原生SDL的程序员都抱怨需要自己想办法解决。目前ROSE有现成的支持中英文自动换行的文本控件吗?有富文本控件吗?文字描边用freetype可以实现吧其中有没有什么坑?
“多行文本自动换行”,这个须要你进一步解释下。不过Rose处理了这个问题:即不会让强行拆开单词。举个例子,要输“student”,但此行已不够输这整个单词了,这时Rose会换行,整个“student”从下行开始。
描画文字Rose是借用SDL_ttf,当前没在SDL_ttf上提供更强功能。


6. 关于多行列表,之前玩cocos2dx时被ccscrollview和cctableview坑过无数回。请问ROSE目前有支持单元自动回收的滑动列表控件吧,使用中有没有什么特别的问题?另外,Rose Studio都支持所有的Rose控件进行可视化界面布局吗?当年cocostudio就不支持cctableview,必须手写代码进行布局。
对多行列表,Rose提供了listbox控件。动态删除某行,那肯定是支持的,不太清楚你说的“自动回收”是啥功能。listbox控件是个较复杂的复合控件,要说什么特别估计一、两句话说不清。Rose Studio能支持布出所出控件,但当对该控件内细节设置,那就要看不同控件了。

7. 关于触摸事件,ROSE目前除了支持单点触摸也支持安卓和苹果多点触摸吗?我需要自己定制特殊的手势,所以想要自己重写TouchBegin TouchMove TouchEnd这些事件。昨晚用ipad5(ios9)下载玩了王国战争,发现所有水平滑块均无法被拖动,刚才试玩了安卓版滑块也是一点都拖不动;滑动大地图是蛮正常的,地图比我手指移动稍快些;滑动超出屏幕范围的多行文字或者列表时,很不顺畅,必须要手指飞快擦过屏幕,才能带动滑动列表(但这样会导致滑过头了来不及看)。如果是手指慢慢按住屏幕,再慢慢拖动列表一点一点滑,那么滑动列表是不动的。不知道新版本ROSE是否已解决此问题?
新版已支持双点触摸,像根据两指头间的距离实现放大、缩小。要试用这些功能,你可下载“芝麻睡眠”,它进入模屏后有双点触摸放大功能。对滑动,一旦处理完webrtc后,接下计划中的任务就是优化滑动。

8. 可以和平台特有API或回调对接吗,是否方便?例如我想调用苹果Siri的API,这是苹果特有的API。或者我想获取各平台cpu序列号作为机器码注册验证手段。亦或者按了iPad的HOME键,会触发苹果系统的applicationDidEnterBackground,我可以在这里补代码吧?还是ROSE已经给出了专门对应applicationDidEnterBackground的跨平台回调函数,我直接去ROSE指定的回调函数那里补写代码?
Rose为什么要用C/C++,就是要让开发者能灵活加入自个功能,包括要直接调用源生代码。对iOS来说,Xcode完全支持C/C++和objectC互编,所以要直接调Apple API那完全没问题。像“芝麻睡眠”为和iOS自带的“健康”app交互,就在app层加了个health.m。

9. 昨晚玩王国战争时,只要按苹果HOME键切换回桌面,游戏都会崩溃,切换回来之后都要重新启动游戏,安卓版好像也是这样问题。不知新版ROSE是否已解决此问题?
这个完全就是王国战争这个app自个这么干。“芝麻睡眠”、“芝麻宝宝贴”都是用默认的HOME键切换回桌面。

10. lua调用ROSE方便吗?我是lua控,业务逻辑代码喜欢都用lua写,将来需求改变的话热更新代码也方便,ROSE有提供lua热更新的模块吗?用tolua++可以把大量C++代码作为接口给lua调用,但是据说C++模板代码不被tolua++支持,请问ROSE当中用C++模板的地方多不多?我可以很方便用lua代替C++代码来写业务逻辑吗?
为支持跨平台,你要做的是在你的app中要加官方给的lua库。王国战争有在使用lua,具体见scripting/lua.cpp。另外,在C/C++、lua互编上,个人认为韦诺之战源码是个较好范例,将来我就想直接用当中的接口代码。
回复 支持 反对

使用道具 举报

2

主题

6

帖子

30

积分

新手上路

Rank: 1

积分
30
板凳
 楼主| 发表于 2016-12-31 02:53:54 | 只看该作者
感谢你从百忙中抽出时间回答这么多问题,这么看来的话RoseSDK的成熟度应该蛮高的。

1. SDL2和Rose是否有像cocos2dx那样,每秒绘制60帧之类的概念?你的观点是,SDL2和Rose不会比平台原生应用更耗电吧

5. 是我口误,其实我是想说“超长文本自动换行”。看到你的回答应该已经完美解决了,而且还是保证单词完整性的自动换行,给力!

6. 有些超长的滑动列表,例如几万行数据时,但是手机屏幕有限只能显示十条数据,于是只构建这十个单元控件,当第一个单元滑出屏幕外时,自动回收这个本该消失掉的单元控件,用于此时刚好要滑入屏幕的第十一个单元进行重复利用。苹果和安卓原生列表都支持该特性,cctableview也是支持的,可以节约内存开销,ROSE也支持吧?我突然想到gridview,ROSE也有吧,cocos2dx就没有gridview,当然程序员可以变通listview来实现。

10. 之前见过有些旧手游项目仅仅拿lua当作配置文件读取,也就充当.csv来用,这样令人惋惜。我喜欢主张底层引擎用C++来写,像画面渲染、寻路算法这些对性能要求较高的都用C++,此外的业务逻辑代码全部用lua来写。quick-cocos2dx就是这种流派,开发效率很高,新人也可很快上手写lua代码。热更新lua代码时,几乎项目的所有逻辑都可被修改,因为都是用lua写的呵呵。每次改lua代码不需要重新编译傻等时间,差电脑也玩的转。甚至后来有人研究出在程序运行时直接修改lua代码,这边改那边就生效,无需重启程序就看到修改效果,有点像用swift写playground。这些做好之后想必会吸引大量开发者来用RoseSDK,因为开发变得如此简单,即便新手也会迷恋。

lua作为脚本语言还有些好处是:正因为它不是面向对象语言,不受面向对象设计模式约束,所以它既能在需要时模拟(伪装)成面向对象语言,又能运用一些静态编译语言(C++)无法使用的设计模式。这些我是在《Ruby元编程》那本书里看到的动态脚本语言34种元编程法术,确实比传统23种设计模式多了不少灵活玩法。例如new出100只猫中,有三只猫是不吃鱼而是和狗一样啃骨头的,想想就好玩。

话题扯远了,再说回来,我真觉得RoseSDK是相当不错的跨平台解决方案,有机会我用用看。SDL是跨平台的,早该有人想到基于它来做跨平台应用/游戏开发引擎,怎么国内外一直没人做?看到你这儿很冷清,我好寒心。

目前市面上几种支持native调用的跨平台方案都有些许问题。CoronaSDK获得过200万美元融资,它不开源,是和cocos2dx一样适用于游戏开发,没听说做去应用的,据说开发者还得上传项目代码到Corona官方服务器进行编译,无法接受。Apportable好像只跨ios和android,而且好像大部分都是游戏看不到应用,获得240万美元融资。最近看到阿里聚划算团队搞的LuaView开源项目,用的是各平台原生native界面,应该还不错,但只支持android和ios。此外就是RoseSDK了,所有平台通吃,祝Rose不断进化变得更加成熟易用。
回复 支持 反对

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
地板
发表于 2016-12-31 10:39:24 | 只看该作者
本帖最后由 ancientcc 于 2016-12-31 11:01 编辑

Rose向外提供的功能,对写一般app勉强可说凑合了。但问题是,一个好的SDK并不仅仅是向外提供api,还包括像标准化api、以及怎么让开发者使用SDK,等等。就说这让开发者使用SDK,这涉及到如何管理资源包、源码包,它是开发者使用SDK第一步,在这方面急须增强Rose Studio的功能。

1. SDL2和Rose是否有像cocos2dx那样,每秒绘制60帧之类的概念?你的观点是,SDL2和Rose不会比平台原生应用更耗电吧
对如何处理刷新屏幕,在原理上,各个SDK、甚至操作系统原生都大同小异,即不断在刷。因为刷的频率极高,怎么实现这个刷,确实会影响耗电。具体到SDL2+Rose,基本只和Rose有关。刷的效率要高,必须使用硬件加速,而SDL2已实现了,而且是几乎原生不改的向上提供给app,为此SDL2方面没啥大的可优化了。然后就是Rose,刷新效率和怎么实现窗口系统相关。举个例子,设备是640x1136,一个窗口布满了整屏,我简单说几种情况。1)窗口没任何变化,那理论上这不变化期间不应该出现刷新。2)窗口中的某个80x80按钮被按下,那理论上只该刷80x80部分,别的不应该刷部分就不要刷。3)窗口中有若干魔法师,它们在放魔法球动画,这若干魔法球有相互重叠,对一帧来说,你可以一个个球的刷,也可以多个球合成一个大矩形只一次刷。——怎么处理这些直接考验着SDK,或许可以可么说,没个SDK敢说我做得没问题了,只能说通过不断优化能做得更好。设计Rose时,在刷新方面我是坚持一条原则:尽量避免让app直接调用刷新函数。这一来降低app编程难度;二来SDK优化了刷新算法时,app层不用改代码。

5. 是我口误,其实我是想说“超长文本自动换行”。看到你的回答应该已经完美解决了,而且还是保证单词完整性的自动换行,给力!
这里补个当前SDK没实现的:超过屏幕宽度的单行编辑框。app可能需要这么种编辑框,它高度上只占一行,但它要不断能输,一屏显示不下时,它也不加水平滚动条,只是已有部分向左移,当然,这个框会支持能把隐藏部分移出来。

6. 有些超长的滑动列表,例如几万行数据时,但是手机屏幕有限只能显示十条数据,于是只构建这十个单元控件,当第一个单元滑出屏幕外时,自动回收这个本该消失掉的单元控件,用于此时刚好要滑入屏幕的第十一个单元进行重复利用。苹果和安卓原生列表都支持该特性,cctableview也是支持的,可以节约内存开销,ROSE也支持吧?我突然想到gridview,ROSE也有吧,cocos2dx就没有gridview,当然程序员可以变通listview来实现。
这功能没实现,但是我一直想立即实现的,我在2楼说的“滑动”就是它的一部分。为什么急这个,因为王国战争就着急须要,它有个武将列表,全武将打开那会400多条,当前做的是一开始就加载全这400多条记录,这使得加载时间变长又占内存。等webrtc集成差不多了,就会重点处理这个。


10. 之前见过有些旧手游项目仅仅拿lua当作配置文件读取,也就充当.csv来用,这样令人惋惜。我喜欢主张底层引擎用C++来写,像画面渲染、寻路算法这些对性能要求较高的都用C++,此外的业务逻辑代码全部用lua来写……
你对lua的看法看来和我差不多,lua不该仅仅是配置,应充分发挥它写的代码和C/C++代码互调这个特色。C/C++是编译性语言,代码中改一个字母都要重编译,这太不灵活了;用lua,正好弥补这个缺点。而相比于js、java这类解释性语言,lua简洁,解释器很mini,和C/C++相互搭配,正是优良跨平台脚本语言。不过一来我当前还要忙于SDK内部,二来我比较看好韦诺源码中写的lua和C接口,反正那里会更新,我想法等时机到了拿过来就行。当然,如果你能让SDK补上这部分,那更是求之不得。
对lua多说一句。lua和C/C++互补起来,功能上是没得挑剔了,但它的语法,我实在有点那个。如果让我选一种脚本语言,作为一个看惯了C/C++语法的,那可能是php的语法然后lua的功能。




你说到几种跨平台SDK,这方面也说下我看法。我把使用SDK的使用者由浅到深分为三类:新手、专业、骨灰。新手指的是不会改SDK,只要把SDK当黑盒子。专业指的是会去改SDK当中代码,像为了增加自定义控件。骨灰指的是用操作系统原生代码直接写,像SDK没支持3D、VR,他就给写了,然后又和SDK相融合。——Rose一定要同时支持这三种开发级别。要同时支持这三种,意味着只能选C/C++,因为它是唯一一种各主流平台都能支持的语言。有人会认为C/C++使用难,那就用设计简洁、高效的API接口去弥补。
回复 支持 反对

使用道具 举报

2

主题

6

帖子

30

积分

新手上路

Rank: 1

积分
30
5#
 楼主| 发表于 2016-12-31 12:07:17 | 只看该作者
本帖最后由 望江饥 于 2016-12-31 13:05 编辑

我对各种语法格式都能接受,php确实更像C++的语法,其实pytyon那种走极端的缩进式代替花括号我也觉得蛮有道理,我的C++同事就受不了python这个。php还自带面向对象语言关键字,挺好。lua的话自由度太高,需要程序员自己模拟出一套面向对象机制,想要多继承的话也可以自己造,主要是每个人的实现可能不一样,导致风格不统一。喜欢折腾的人倒是可以把lua当玩具来玩,定制成一套特定领域语言蛮方便。此外lua没有continue确实怪怪的,说是为了什么尾调用?还有lua数组从1开始数,这个对于初学第一门语言的人,听着还觉得蛮有道理,真不知道该说好还是不好。

非常支持你说的“Rose一定要同时支持三种开发级别:新手、专业、骨灰”,这意味着SDK将会100%开源,开发者们也可以对SDK任何地方进行修改优化,这样的SDK生命力无限!

近期我打算先把网页播放器整出来上线,将来找机会再把各终端播放器补上,到时候肯定会尝试用RoseSDK。如果RoseSDK的cpp代码还没有绑定lua,那我会用tolua++把.h改写后的.pkg接口批量生成lua绑定代码,这样就可以全部用lua编写逻辑代码来调用RoseSDK里的C++,不知道你说的是不是给SDK补上这个功能?另外,想询问你说的韦诺源码当中,他们都是纯手写C代码来和lua对接吗?那样工作量很庞大不可思议。因为一般都是用tolua++生成C代码和lua绑定。还有一种做法是通过lua的ffi库去调用外部C函数,也是省心省事的。此前ffi集成在luajit当中,后来开始有人把ffi单独抽取出来用了,我一直没用过。
回复 支持 反对

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
6#
发表于 2016-12-31 23:10:51 | 只看该作者
本帖最后由 ancientcc 于 2017-2-27 14:15 编辑

已发布V1.0.5,该版本支持了垃圾回收式列表,回收式列表在处理成百上千行数据时也只耗极小CPU、内存。此版本也对触摸进行了改善,把之前的只有swipe改为pan+swipe(iOS、Android都在用这种方式)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 23:28 , Processed in 0.065033 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表