先说一下,我一直不是魂系玩家。
之前只是在Steam减价时买过《黑魂2》,结果打了一个小时左右。
本身就手残,还要用键盘鼠标,手感差再配合时机和判定奇怪,加上那阵子工作太辛苦,根本不可能有精力打下去。果断退款。
在Steam上每次看到Soul-Like和Difficult这两个标签的游戏我都几乎不会玩,有些倒是会先放在愿望清单。
但19年的时候还是玩了一款勉强算类魂游戏《遗迹:灰烬重生》。
多次打到怀疑人生,但逐渐靠着自己的操作提升,真的克服困难虐打敌人确实很爽。
就是最后大boss没过~
到了《艾尔登法环》,我一直在关注,抱着复杂的心情去关注。
为什么复杂?
一来,是对魂系游戏的抗拒~已经不是单纯的难,我总觉得那操作/判定很奇怪。
二来,是对日系游戏的抗拒~从小打日系游戏,并多少有点轻视欧美游戏。但过去十几年来越来越少打日系游戏,既不喜欢画风设定(近年几乎不看动画,会看的日漫都是偏冷门),也对日式rpg的叙事不感冒(还是倾向有更高自由度的欧美游戏)。
三来是看到《法环》的片段确实精美~可以说我再对魂系列没有爱,但画风还是挺赞的,而这次有着更加多元化的世界/景色,人物设定也不是像《龙之信条》那样「一看就是日式欧风」。
四来是发售以来看到很多人说难度相对低了,打不过可以逃~
就这样,我带着战战兢兢的心情入手了。
事前已经上网做了两天功课,一开始就选大家都说好的占星者。
因为有了手柄,操作感比之前打《黑魂2》时好太多。
但占星者没我想象的好用,于是开了个忏悔者,打算走圣骑士(信仰战士)路线,近战为主魔法为辅。
又试了下武士,远程弓箭近身打刀确实好,居合又帅又强,闪躲能力也强,就是不太适合我,于是又回到忏悔者了。
就这样玩了三个晚上,昨晚在一个悬崖上观看景色的时候,我突然领悟了一件事。
其实打不打得过那些boss,能不能通关,与我何干?
开放世界RPG里,《辐射:新维加斯》打了接近两百小时,和《上古卷轴:天际》打了五百多小时,我都没通关呢!
更不用说刷子RPG,《暗黑破坏神2》过千小时,《火炬之光2》280小时,《恐怖黎明》970小时,《流放之路》几百小时,都没试过满级~
我打游戏其中一个主要目的,是享受当中的世界、画面、故事、叙事、配乐、角色、技能、战斗系统等。
反正本身就不是那么好胜的人。
但同时我又很重视突破自己,我唯一执着要赢的对手就是自己。
尤其作为一个近四十年的游戏迷,我觉得,我可以打得更好。
比如上述的《遗迹》,就是一次突破。
近来的《叛乱:沙漠风暴》虽然只跟其他玩家合作打AI,但也突破了自己过去打同类游戏的成绩。
还有《分裂之门》,让抗拒PVP游戏的我也打出全场最佳的结果。
所以,我打《老头环》,除了探索这个有着独特美术风格的世界,也给我一次机会,去克服类魂游戏恐惧症。
@Patchouli Exarch 的答案很有意思。他把魂系玩家的属性说了出来。
有些人本身动态视力和反应就高于常人,对他们来说魂系游戏不到最高难度或者挑战无伤都不是什么难事。
对大部分玩家来说,其实都是菜。但我们可以承认自己菜的同时,选择放弃,或坚持。
(用修改/开挂是另一回事,在此不喷)
放弃一个游戏很容易,正如放弃人生中任何东西都很容易一样:
健身很辛苦,而且白天上班已经够惨为什么还要自己找事来受罪?
拍拖很累,单身最爽,一直单身一直爽~
升职,但工作量和责任更大?可不可以只加薪,职位我就不要了~
放弃不单容易,而且可以声称自己已经尝试过了,然后来一句「也就不过如此,没意思」,或者把原因归咎于外界。
健身房太远,教练不好,女友不善解人意还贼多要求,老板不近人情只会剥削。
总之无论如何都不是自己的问题。
所以当现实中已经被暴打了,为什么还要用这么一种变态佬弄出来的变态游戏来找虐?
我不敢代表任何人,但最少对我来说,游戏既是娱乐,是享受,更是一种锻炼和启发途径~这事我玩游戏的另一个主要原因。
什么?不是刚刚才说完通不通关都不要紧吗?怎么又变成锻炼了?
我说享受,没说自己就打得很佛系。
该反复刷的没少刷,该打的强敌也会找方法去克服。
哪怕有时候感觉到不公平,不合理。只要是找到了当中的逻辑,理出套路,就有窍门,就能攻克。
无论是在游戏还是现实世界,我们都极需要这种韧性,即跆拳道精神那句「忍耐克己,百折不屈」。
有些人能靠力敌,有些人能凭智取。但要获得真正的成功,在失败后爬起来再战再拥有更大的成功,必然要智勇兼备。
因为很多事情,无法强来。被boss一刀秒就是一刀秒,你需要智力去了解自己,了解对方,了解环境,调整战法。
反过来单有智力,你根本不敢去迎战强敌。要敢于冒险,才不至于成为空想家或键盘侠。
有勇有谋有韧性,无论是在游戏世界,还是现实世界,你都会是个了不起的玩家。
被《老头环》劝退没问题,不愿意面对来自宫崎老贼的恶意,完全是大家的自由。我们大部分人都能选自己的「游戏」,自己的「赛道」。
希望大家能把自己的耐力、智力和信仰等,在现实生活中好好发挥。
我是武者麦斯,灵性健身与极简武学创始人。想看更多健身和防身武术干货,可以关注我的知乎和公众号【极简武学】和【优约客】。有问题,想交流,也欢迎私信。
我们首先要确认一件事,那就是一款游戏是否赚钱并不是所有游戏制作者最关心的事,虽然很关心,但不是最关心,不然你没有办法解释为什么有那么多人喜欢做这种冷门的游戏。资本主义还没有厉害到能逼所有的游戏制作人或者说艺术家就范,尤其是逼迫宫崎英高这样一位隐藏得很深的老共产主义者。
再回答一下题主的问题:因为老头环本身就是一款婆罗门游戏|小众游戏,宫崎英高在手动筛选他的玩家而已。像这种制作者主动筛选玩家的情况在最顶级的游戏业界并不罕见,比如《辐射2》的前半个小时,凡是玩过的人都知道这个开头有多冗长和枯燥,目的就是把不懂得欣赏此类游戏的乐趣的玩家直接剔除出去,再比如荒野大镖客2等等。那些个人风格非常强烈,把游戏当作艺术品而非工业品的厂商和制作人经常会干这样的事情。开头遇到的大树骑士就是这样一个存在,他就是为了让你赶上两小时退款而放在那里的。
那么宫崎英高要筛选掉的玩家是什么样的呢?
毫无恒心的玩家以及不动脑子的玩家。
总的来说,要玩宫崎英高的游戏,你需要恒心和智力,这两个为互补关系,恒心+智力达到60分即可。如果你的恒心突破天际,就是不研究不动脑子不学习,一个boss死300次继续玩,那没有问题,你是这个游戏的受众;如果你的学习能力突破天际,第一次和boss交手,就能摸清这个boss的招数的话,那你也绝对是这个游戏的玩家;如果你有一定的恒心和智力,能够多次死亡还拥有强烈的求胜心,能在多次死亡的同时逐渐摸清boss的招数,那么你就是这款游戏最核心的玩家。
怕就怕,毫无恒心,受到一丁点挫折就像个巨婴一样哭哭啼啼;怕就怕,毫无进取心,一次次被boss送上西天几十次却依然无法摸清boss的行为逻辑,依旧疯狂贪刀被boss打死。这样的人,肯定是不适合玩老头环和其他魂系游戏的。
这也是为什么我说整个魂系列游戏都是婆罗门游戏,一个能玩下去魂游戏并且通关的人,一般在现实生活中也是一个意志坚定,迎难而上,同时善于在失败中总结经验教训的聪明人,这样的人只要时运到位,早晚是会取得“世俗意义上的成功的”,也就是说,成为现实社会中的婆罗门。
之前杭州那个骑车被交警抓到逆行要跳河的小伙子,就是魂系列玩家,在生活遇到巨大挫折和重压之后,他立刻就能在知乎上撰文澄清整个事件的全貌,为自己的老板、女友和警察同志开脱,并且把一切罪责归结于宫崎英高和苇名一心,整个事件都得到了化解,没有任何社会矛盾被激化。这是一种很珍贵很难得的品质和能力,而我相信每一个把魂系列游戏打通关的玩家身上都具有这样的品质。
《艾尔登法环》之所以会出圈,在于他场景的宏大和优美,在于上一作《只狼》的极大成功,在于老贼对开放世界的独特理解,在于人们游戏品质和完成度的认可,然而他的核心和玩法依旧是小众的,依旧只为一群小众的婆罗门玩家服务,这也是为什么这款游戏评价极高,但是绝大多数跟风来玩的新玩家被纷纷劝退,因为具备能玩魂游戏品质的玩家并不是很多。
以上
我本来想说这个游戏就是个小众游戏硬核游戏,不是玩动作游戏玩到吐的人不会喜欢的(比如我就不喜欢)
但是仔细一看题目描述,我感觉这是另外一个事情了。这就是典型的不同游戏平台文化差异的问题。
很多没有多年跨平台开发经验的公司,都会以为跨平台就是做个按键重绑定,毕竟游戏引擎里面看起来就是如此。
实际上却远远不是。不同平台用户的习惯差异,远远不是一个按键绑定所能涵盖的。
首先,不同的输入设备的特点有很大的差异。键盘的特点是按键多,缺点是全部为开关量输入,且距离远,组合键输入其实是很不方便的。
而鼠标的定位精细,但是给人的反馈感很弱,且点击的时候容易发生微小的移位。而且鼠标的位移误差会不断累积。
手柄的按键相较键盘要少得多,但是集中,组合键容易按,且带有开关量和模拟量两种模式,加上震动和力反馈,给人的反馈感更强。
尤其是,键鼠必须要长时间保持手掌向下,这个其实是很反人类的姿势。平时办公学习输入强度其实还可以,但是玩游戏就紧张很多了。
不仅仅是输入设备,UI的设计更加是如此。大屏(电视)游戏虽然屏幕大,但是一般坐得都比较远,而且电视一般自带全屏模糊特效,文字显示并不锐利。所以电视游戏特别忌讳满屏的弹幕,图标也不能过小过于密集,数量也不能太多(因为手柄按键少)
而电脑屏幕一般距离眼睛就要近得多,而且图文显示特性好,画面锐利,所以较小的图标和锐利秀气的字体往往能使得观感上的分辨率提高。UI设计上更多强调信息密度,甚至最好做成飞机驾驶室那样。(反正键盘按键多)
而移动设备普遍是触屏,所以UI设计以便于触摸为第一要义。滚屏操作只需要手指滑动,所以滚动式样的UI对于触屏非常自然,而对于上面其它两种类型就不行了。但是同时,由于手在触摸的时候精度低且对视线有遮挡,所以需要特别考虑这些因素。
还不止是这样。这些差异甚至还影响在游戏当中的玩法,运镜,尤其是动作游戏。比如鼠标大幅度转向转身就远比手柄容易,但是如果用鼠标控制飞行模拟游戏,那开的是过山车。
题主碰到的问题,正是因为开发商缺乏对于主机平台之外的平台的了解,或者态度上不够认真导致的。
笔者在日常当中由于主要是服务于国内开发者,遇到的情况则正好相反:虽然游戏移植到了主机,但是UI和操作全部是基于触屏或者键鼠的,玩起来十分诡异,没有几分钟就想放弃了。
原因也是一样的。很多国内游戏开发厂商的相关人员很少甚至完全没有接触过主机,不会用手柄,自然更加不知道主机用户的习惯。公司层面也只是知道海外用户需要主机版,以为就是做个额外的安卓机型适配,并没有深刻的认识啥叫主机版。
魂系列游戏每一作都有一个灰心哥。
本来这一作没有。
但是现在有了。
“楼主你好!我要去挑战下一个BOSS了!你就好好坐在这里等我凯旋归来吧!
我曾经手撕葛温,脚踢巨人,活啃薪王化身,而我现在即将去史东薇尔城砍下葛瑞克的龙头!
为了变强,我可经历了许多。
我会告诉你大书库那个法爷是如何强大不可一世而我最终却用一把梯子就杀死了他;
我要向你描述希芙拉的地下世界那令人流连忘返的璀璨星空,没想到吧,地下竟有如此美景;
对了,你根本无法想象满月女王的小脚丫是多么的肥美……哦,太美了,我已经忍不住BOKI了。
我要告诉你,我是怎样和巨人一样的狗熊搏斗,那可真是一场硬仗,我元素瓶都喝干啦,当时真的以为死定了;
你知道那个宝箱其实是去矿洞的陷阱吗?我在那里掉了6000点负担,如果你听说有人见到了请记得告诉我在哪里,我很想捡回来;
什么熔炉骑士,什么混血狮子,什么猎犬舞娘,他们的弱点只有一个——那就是小皮盾!
还有,我见到了老朋友巨狼希夫,但是他现在染了红发但他还是一个好女孩;
你知道水母的妙用吗?虽然这玩意看起来很不起眼,但是他能打败所有巨龙!
你问我和半神打辛苦吗?
放轻松啦,我第一次碰到他,被他宰了整整五个小时;
但是那又如何,我才是最后的赢家!
没有战胜不了的敌人;
没有克服不了的困难;
你就好好坐着等我凯旋的消息吧,我要去割下葛瑞克的狗头了!你就在这里等好吧!
驾!“
喜欢受虐才玩老头环?不!魂系列是最好的“死亡课”老师!
从5层理解聊一聊。
很多玩家还没玩魂系列,已经被劝退了。
因为宫崎老贼恶名在外,新手村BOSS就能虐得你怀疑人生,在视角盲区还会有小怪背刺你,死亡居然还会有惩罚,辛苦杀怪攒的货币,死亡后还会掉落……心态崩了好嘛。
我曾今也望而却步,尤其是我偏爱的游戏类型,一直都是重叙事、弱操作类型的,游戏难度一般只会选简单或普通模式,给自己的定位,一直都是手残党。
但这一切,在我遇到只狼后,发生了根本性的转变。
虽然刚入手只狼时,也是被虐的怀疑人生。
但后来,除了老年剑圣以外的所有BOSS、精英怪,甚至包括嗟怨之鬼、壮年义父在内,全都成功复了仇。
入坑只狼后,又补了血缘诅咒、黑魂3的门票,现在和魂系列的其他粉丝一样,正在游玩风头正热的老头环。
一定程度呢,我认为是宫崎老贼治好了我的手残症。
让我发生转变的根源,是老贼让我对游戏里死亡的理解,有了根本性的转变。
原来死亡可以不代表失败,而是熟悉BOSS机制的一个必要过程。
宫崎英高也在采访中表示:
我一直以来就不是很厉害的玩家,我死很多次。
因此,在我的作品中,我总是在想一个问题:如果死亡的意义不仅止于失败的话,我还能赋予它什么意义呢?我该如何让死亡化为一种享受?
新手刚入手魂系列游戏,往往会对体型大的怪物感到恐惧,下意识认为这么庞大的身躯,肯定很强吧。
刚开始遇到这种大型怪物,新手都会跑,有时一个不慎,跑路过程中被怪物打中了,直接半管血没了。
更加深了怪物很强的认知,也就是还没打,已经带上了恐惧心理。
等游戏慢慢上手了,才发现这类怪的弱点其实很明显,来来回回就那几招,动作还很缓慢。
一旦克服恐惧心理,一招万金油式的,爱的转圈圈,就能慢慢耗死这些体型巨大、看似强大、实际弱鸡的精英怪。
甚至还有玩家总结出了体大弱门、毛多弱火等规律。
意思是体积庞大的怪物,会被狭小的门卡住,卑鄙的外乡人可以趁机输出。
体毛旺盛的怪物,拿火属性物品去攻击总没错。
所以这魂系列啊,治好了我对外表强大的怪物的恐惧,是骡子是马,还是得拿出来溜溜,不要先入为主,被外表的强大给欺骗了,也许只是外强中干呢。
在一次次的死亡中,去观察,去获取BOSS的战斗信息。
魂系列本质是个背板游戏,就是你要学会见招拆招,要先记住怪物的动作,以及每个招式正确的应对方式,接着实战去演练,直到将如何应对变成肌肉性的记忆。
除了见招拆招,还能引诱怪物出招。
比如老头环的大树守卫,如果你一直拿马屁股对着这个BOSS,BOSS的招式套路是很固定的。
这样就能轻轻松松将战斗发展成回合制,马屁股对着BOSS等他出招,他出招了你就绕圈躲一下,等他出完招就上去A他一下,如此反复,慢慢把他耗死。
魂系列教会我苟,活着才有输出,让我学会了爱的转圈圈,先等BOSS出招,然后绕圈躲避,而BOSS出完一套连招的间隙,就是输出的好时机,而且不能贪刀,一般攻击个1、2下,就得走。
只狼更牛,又治好了我的苟,只狼的核心战斗机制是打铁积累架势条,架势条满了后,就能处决BOSS。相反一直苟着,反倒会不断积累自己的架势条,容易被BOSS处决。正所谓犹豫就会败北,有时候,进攻反倒是更好的防守。
还有在玩魂系列以前,我对动作类游戏如何提高输出的理解,就是疯狂地按攻击键,或者疯狂按连携组合键,也就是单位时间攻击更多次,输出能力就会越强。
但在魂系列,完全不是这样,你不停去按攻击键、或者一直按着防御键的结果,就是招式被BOSS打断,被BOSS打出硬直,就地处决。
所以魂系列追求的,是按键的干净利落。你的每一次按键,都要给角色反应时间,在正确时机,按下正确的键,才能达到预期效果。
但人的本能,又是习惯性贪刀的,看到BOSS倒地,就想多按几次键、多输出几次,但攻击又有后摇,往往导致BOSS起身后一个躲闪不及,就被一套带走。
所以这是一个磨砺心性、戒骄戒躁的过程。
首先,这死亡并不意味着失败,庞大的身躯、强横的力量,也并不意味着强大。
真正强大的,不是数值的碾压,而是你那股永不言弃的坚韧。
是你在无数次死亡后,总结出的生存意识、训练出的本能反应。
你的每一次死亡,并不都是白给,而是在你有意识的复盘中,你比那四肢发达、头脑简单的敌人,获取到了更多的信息差。
死亡、复盘、再开一局、再次死亡、再次复盘、再一次的重头来过…一次次的倒地后又站起,你不断打磨着自己的技艺。
直到你能看清敌人的每个动作走向,并烂熟于心;
直到你能预判BOSS的每个招式动作,凭借肌肉记忆本能地应对,
直到你终于能在那一秒,一招制敌,在敌人发力的瞬间,将利刃插进敌人的心脏。
哪怕你此刻掌心的汗水,已经浸湿水柄,哪怕你全身上下的肌肉,也因为过于投入,而微微发颤。
但那敌人喷涌而出的鲜血,却像是夏天出汗后的,那场最是畅快淋漓的冷水澡,冲洗掉了你全身上下的疲惫。
这一刻的你神清气爽,对自己的潜力,有着无与伦比的信心。
你相信:再难的挑战!只要你能洞悉其中最薄弱的一点,通过不断的训练、复盘、实践,你也终将能再一次地:
将TA拿下!
玩这游戏之前你就得考虑清楚。远的不说你通过只狼嘛?
为啥有2小时内无条件退货呢?
因为不适合的游戏两小时内就能知道了。
所以还不去退款吗?
别人说榴莲炖鸡好吃你不爱吃榴莲你会去吃吗?别人说炖狗肉香你不吃狗肉的人会去试试吗?误食了沙虫毛鸡蛋这些你觉得反胃的东西你会吐掉吗?
吃东西的口味都不一致,怎么玩游戏的品味就要一了?
不可能。
如果能做到这一点,说明房地产的泡沫还不够大,不需要破裂。
很少有人不基于框架直接写GUI界面啦,我这个回答就从GUI框架反过来推什么语言做GUI合适。(只聊桌面端GUI编程框架)
几乎是C++领域最流行的跨平台桌面端软件开发框架了,这个框架是两个挪威人在1995年创建的,发展至今可以说历史相当悠久,稳定性也很有保障。很多大公司都在用它做界面比如金山的WPS。
它内置了自绘引擎,也就是说界面上的一个按钮,一个文本框,都是Qt的引擎自己画的,这保证了基于Qt开发的软件界面在不同操作系统上看起来是一模一样的。
它提供了大量的与界面无关但与软件开发息息相关的API,比如、网络、文件系统、剪切板等,而且让这些API在不同的操作系统下都有效,这极大的节省了开发人员的时间。
但它也有一些缺点,比如在处理一些特殊需求上很不方便,比如:目前Qt有没有比较好解决高分屏下缩放显示的方案?,Qt没有真正完美的无边框解决方案吗?等,在一些组件的渲染上也会出一些隐藏的较深的问题(QListItem),一旦遇到,就很难解决。
Qt近年来不太专一,qml,qtquick等,搞了很多,而且这些新玩意儿一直不温不火,有些模块做了又废弃了,比如:qt script,搞来搞去,搞的模块繁多且复杂,用起来不是很舒服。
Qt有界面描述语言(XML描述界面),可以通过设计器拖拽空间设计界面,编译期界面描述语言被转义成C++代码,性能上没啥损失。
Qt商业授权不太友好,开发商业应用一定要谨慎,之前听说有公司为此付出了高额的版权费。个人开发者可以免费使用。Qt的免费版本不允许静态链接,会有版权上的限制,但开发者还是可以通过一些特殊的编译方法静态连接Qt的库的。
除了使用C++开发Qt应用外,开发者还可以使用其他语言开发Qt应用,最流行的就是使用Python基于PyQt做Qt应用了,其他语言的绑定不是很成熟,但PyQt仍然有版权的问题。
GTK是1997年创建的,也非常成熟稳定,是C语言开发的,但有很多语言的绑定,比如官方支持的JavaScript、Rust等,当然用C++语言操作GTK也很方便,它也有自绘引擎(Cairo),也提供了大量系统相关的API,商业授权也非常友好,基于GTK开发商业软件不用担心收到律师函的问题,虽然它是一个跨平台桌面软件,但它似乎只在Linux操作系统领域流行,有非常多的Linux桌面软件都是基于GTK开发的。
这也直接导致GTK的维护者很重视Linux领域的发展,而忽视Windows和Mac领域。这个框架提供的很多API,只在Linux下有,Windows和Mac下没有。这样的API数量众多。甚至在Windows下编译一下GTK的源码都要比Linux下难很多。而且GTK的渲染引擎在Windows下性能表现也不如在Linux下好。
GTK在Windows上也没办法静态连接,它到不是因为版权的问题,而是它依赖MSYS2的一些库,这个库用于在Windows上模拟Linux环境,这也是为什么GTK在Windows上表现不佳的原因之一。
另外,由于GTK是C语言开发的,所以开发风格也很C语言化,这对于部分开发者来说可能觉得繁琐。
wxWidgets是1992年英国的一个大学教授开创的跨平台GUI软件,也非常成熟稳定,商业授权非常友好。它没有自绘引擎,而是对不同平台下的界面API做了整合和封装,这样开发者在Windows下开发的软件看起来就是Windows窗口风格、Linux开发的软件看起来就是Linux窗口风格,这对于某些软件来说,正是他们想要的,但要想搞一些花哨的特效就没那么容易了。它同样也提供了大量的系统相关的API供开发者使用。
它是C++开发的,所以对C++开发者非常友好,除此之外它还支持静态连接,也就是说开发个应用不用分发给用户一大堆dll,当然Qt也支持静态连接,但是你得自己编译Qt的源码(不是很方便),而且Qt的授权规则也不允许普通开发者这么做。
它会有些小问题,比如我之前提的:wxEVT_NOTIFICATION_MESSAGE_DISMISSED event emit twice,但总体来说还是非常稳的。除了开发的界面比较死板外,没啥大的问题。目前使用这个框架开发软件的人越来越少了。
fltk是1998年创建的跨平台开源GUI框架,历史悠久,商业授权友好,而且C++之父也用它,它非常轻量级,支持静态连接,一个简单的应用编译后只有500K左右,非常赞,
它有自己的自绘引擎,没记错的话用的是OpenGL,但它的重绘机制是按区域重绘的,如果组件A所在的区域上存在组件B,那么A组件重绘时,会把B组件的给重回掉,开发者必须自己写代码处理这种情况。想象一下,如果你想实现一个A组件fade out的同时B组件fade in的效果,就会非常麻烦。
FLTK提供的一些组件样式都比较刻板,绘图API也比较少,你想实现一个漂亮一点的圆角按钮(它内置圆角按钮的圆角大小是不能改的),必须自己画,而且还得借助一些非常奇葩的手段才行(如果你想知道,可以联系我)
它是C++开发的,但API不够现代,用起来总体还算舒服的,它有Rust绑定:fltk-rs。它的用户比前面三个都少。它提供了一些与界面无关的操作系统API,但非常少,几乎可以忽略。
Duilib
是2010年国内一个开发者开发的GUI开发框架,因为底层基于DirectUI开发,所以只支持Windows平台,不支持跨平台,开源协议友好,商用没有任何问题(需要附加Lincence文件),国内有很多大厂基于这个技术做桌面端应用,比如网易、腾讯、百度,这个框架是基于C++开发的,对C++开发者友好。但框架本身还有一些问题,比如对高分屏支持不佳、特殊控件绘制上也有一些小问题,除了界面相关的API外,几乎没有提供系统级的API,作者纯粹是用爱发电来开发这个框架,所以更新不是很及时。
相对来说网易基于Duilib开发的分支更完善一些:NIM_Duilib_Framework,添加了高分屏支持、多国语言、整合了多线程处理的支持,但环境搭建相对比较麻烦。如果开发者要用这个框架,一定要用develop分支下的代码,master分支下的代码问题很多,这个框架看上去也是作者一个人努力的成果。
Sciter是2006年创建的跨平台闭源GUI框架,足够稳定,商业授权不友好,但个人开发者可以随便用(只能用动态链接库),一旦公司规模超过3人,就得买版权了(有权静态连接)。
它内部封了一个浏览器核心,让开发者使用HTML,CSS,JS来创建界面,但对这个浏览器核心做了大量的精简,不像Electron和NW.js动辄上百兆的体积,它只要6M就够了。当然这也意味着有些浏览器特性它是不支持的,比如CSS3的flex布局,它就不支持(但它提供了自己的flex布局实现方式)。以前它使用自研的一个脚本语言(和JavaScript很像),自从集成了Fabrice Bellard大神的QuickJs之后,就全面支持JavaScript了。它还对一些特殊的场景做了内置的支持,比如渲染大列表。
它使用C++开发,对C++开发者很友好,有Rust、go、Python等语言的绑定,但都是社区提供的,质量堪忧。有很多知名厂商都用这个库做界面,比如360、teamviewer、赛门铁克等。
RmlUi和Sciter很像,可以看成Sciter的替代框架,但RmlUi这个项目有三界作者,一个一个的弃坑不知道新任作者会不会弃坑,目前还不是很成熟,比如我正在尝试帮作者解决的CJK输入法的问题,目前还不推荐大家使用这个框架。
CEF是2008年创立的,基于Chromium的跨平台GUI框架,稳定且商业授权友好,国内很多大厂都用的CEF:比如微信桌面端、网易云音乐桌面端、QQ桌面端、微信桌面端、MATLAB、FoxMail、OBS Studio,装机量破亿。
由于它几乎封了一个完整的Chromium,所以体积非常大,但支持所有的HTMLCSSJS特性,它几乎不提供任何与操作系统相关的API,创建个托盘图标、读写个文件啥的,都要开发者自己完成,它是C/C++开发完成的,对C++用户非常友好,它有gopythonjava等语言的绑定,但都是社区提供的,质量值得担忧。
它对Chromium封装的很好,避免了开发者直接与Blink、V8、Chromium等复杂的代码打交道,很多功能都有默认实现方式,遵从约定由于配置原则,有经验的C++开发者可以很轻松的驾驭CEF框架。
由于Chromium是版本弟,所以CEF版本发布也非常频繁,很多被标记为稳定的版本,还是会出一些莫名其妙的问题,选一个好的版本非常重要。
与Electron一样,它也是分主进程和渲染进程的,所以开发者要非常娴熟的运用跨进程通信的技术,虽然CEF提供了跨进程相关的API,但复杂度还是有点高的,使用的时候要认真细心。
这是微软的跨平台GUI框架,不仅仅支持桌面端,还支持移动端,但官方并不支持Linux的桌面端(黑人问号,感觉与微软近些年向开放、开源的大方针相悖),这个框架新的狠,至今还没发布稳定版。目前还没什么人用。而且不知道将来会不会被微软放弃。
它是.NET平台下的GUI框架,有自绘引擎,对C#开发者很友好,界面依然是用XAML描述的,可能很多人一听到XAML就直接弃坑了。XAML表现力确实弱一些,我觉得WPF没火起来跟XAML有直接关系。
使用这个框架开发桌面应用得封一个.NET框架给用户,当然有了.NET框架应用程序访问一般的系统级API也就不成问题了。
这是JetBrains搞的跨平台GUI框架,也非常新,前段时间刚刚推出1.0.0版本,但这个版本还不是很稳,至少比Flutter Desktop的第一个稳定版要差很多。同样也几乎没什么人用。
它的自绘引擎用的是Google的skia,这个自绘引擎稳的很,Chrome和Flutter都是用的它,所以排版、绘制、渲染之类的工作不太会出问题。比Java生态圈里的Swing和JavaFx要好很多。
JetBrains的东西当然对Kotlin开发者友好啦,Java生态下的很多东西你都能用,访问系统级API也没啥大问题,同样也得考虑封一个JRE给用户。
这是谷歌的跨平台开发框架,开源、免费、文档齐全、投入力度大且持久,同样也新的很,Windows版本刚刚发稳定版,Mac版本还没稳定。
如果你完全没搞过移动端的flutter,想用这个框架开发桌面应用,那么意味着你要学的东西还挺多的。好在dart和flutter入门都不是很难,学习曲线比较平缓。
由于flutter在移动端积累了很多年,所以界面上的一些东西在desktop端都比较稳(skia自绘引擎),与操作系统相关的东西还不成熟,生态也不太好,比如你想订制一下窗口的标题栏,想访问一下注册表这类工作可能得自己想办法。不过它有类似FFI的支持,跟C/C++语言打交道很方便。
开发者直接使用Dart语言描述界面,这会导致众多大括号嵌套在一起的问题,可能很多开发者不习惯。
这是微软Edge浏览器团队推出的跨平台GUI引擎,是闭源的,目前只支持Windows,对C#和C++开发者友好,如果使用C#开发,就得考虑把.NET运行时分发给用户,如果使用C++开发,就得自己处理系统级API的操作,webview2本身是不对系统级API做封装的。
这个框架推出也没多久,很多API也还不稳定,更值得担忧的是这个团队,他们前不久刚刚放弃了自己的浏览器核心转而使用Chromium浏览器核心,不知道他们会不会放弃webview2这个框架。
它的优势是可以复用系统当中已存在的webview2二进制资源,也就是说它虽然封了一个Chromium浏览器核心,但如果你可以确定客户电脑已经存在了基于webview2开发的应用,你的安装包体积可以足够小。
它也是多进程架构,甚至比Electron还要多一个进程(为了复用二进制资源),资源占用比较多。
这个库使用操作系统的浏览器引擎来达到减小安装包体积的问题,Mac上使用Cocoa/WebKit,Linux上使用gtk-webkit2,Windows 10上使用Edge(也就是上一个小节里提到的webview2),它应该是不支持Win7的。开发者要考虑前端代码浏览器兼容的问题。
开源且免费(MIT)有go、Rust、Python等语言的绑定,不过官方支持的是go语言,C和C++,操作浏览器的API非常少,不支持自定义scheme,更别提系统级API了。
采用的技术方案与webview类似,所以安装包也足够小,非常新,还没发布稳定版,开源免费。webview框架碰到的问题TAURI都有,
使用Rust开发,将来会支持Deno,作者说将来会直接使用webview的技术来支持多平台,
NW.js最早把Chromium和Node绑定到一起,用前端知识做界面,用Node技术访问操作系统,最早叫node-webkit,在2012年创建。NW.js基于MIT开源,可以无忧使用。没记错的话,微信小程序开发工具是用NW.js开发的。作者是英特尔的员工,英特尔的一些工具也是用NW.js开发的。
除了Chromium和Node的能力外,NW.js自己也封装了一些系统级API,类似托盘图标、剪切板、系统菜单这种,但数量明显比Electron要少。
NW.js可以在多个窗口间共享同一个Node.js上下文,而且还可以通过配置让Node的上下文和Dom上下文混合,这给开发者带来了很多便利。心智负担减少很多。不像Electron要时刻想着进程间通信,哪些模块当前进程不能用这类问题。
NW.js虽然起步早,但奈何没有杀手级应用,周边的生态和工具链没发展起来。用的人越来越少,维护的投入也不如Electron大,再加上Chromium更新非常频繁,导致NW.js的有些API也不是很稳,恶性循环加剧。
Electron的作者曾经在NW.js团队工作过(NW.js项目贡献第二多的人就是Electron的作者),后来辗转到了github公司,于2013年在创建了Electron,也是个开源免费的产品。由于VSCode、slak等国际型产品都选择了Electron,所以从者甚众,生态和周边工具链也完善的多。虽然开发方式上有点蹩脚的地方(多进程架构及模块归属进程),但瑕不掩瑜。
Electron每创建一个窗口都会多一个进程,这使Electron创建窗口的效率不高(秒级),NW.js有复用进程的机制,即使新窗口加载完全不同域的页面也不会创建新的进程(毫秒级)。这也是为什么很多基于Electron开发的应用都使用Dom模拟弹窗的原因。
无论是浏览器相关的API,还是系统级API,Electron提供的都比NW.js多。
--------2022-02-25更新--------
这些框架除了对开发者使用的编程语言有要求外,还有一个重要的差异就是有没有独立的界面描述语言(也就是UI DSL),这非常重要,涉及到一个框架表达业务的重要能力。
类似XAML、qt的ui文件、HTML+CSS都是界面描述语言,下面这种也可以算界面描述语言,但我感觉它不够纯粹(flutter、qml和Compose Multiplatform都是类似这样的):
panel { row { checkBox(...) row { textField(...) // indented relatively to the checkbox above } } }
但无论如何,显而易见的是,没有任何一个界面描述语言能比的上HTML+CSS组合。想想看:HTML里各种花里胡哨的语义化标签和Dom操作技巧,CSS里的布局方式、伪元素、动画描述...,对比之下你就会觉得XAML、qml直流都是弟弟。
除此之外,一个优秀的GUI框架还有两个重要的需求,这里我简单聊聊:
强大的事件处理机制必不可少。
想想这些:鼠标事件、键盘事件、触屏事件...界面加载完成、媒体播放结束、元素大小改变...网络状态变更、数据段传输完成...另外,还得处理事件冒泡、事件捕获、事件分发吧...
qt的开发者曾经说过qt的SIGNAL和SLOT机制是有性能问题的(但影响很小)
强大的异步处理机制必不可少
你不能在用户处理业务逻辑的时候,让界面渲染工作阻塞,这就需要一个强大的异步处理机制,让开发者自己去开线程去完成业务处理,无疑是又麻烦又会增加开发者的心智负担。
我记得很早之前在C# WinForm应用中,点击一个按钮,如果不用Invoke执行逻辑处理的话,界面就会卡死。
这么看来,在你的GUI应用里包一个浏览器核心还是挺有必要的,这样你就可以用HTML+CSS强大的能力来描述你的界面,用JavaScript强大的事件处理机制和异步处理机制来完成用户交互。
可能有人会想,这会带来很多问题呀,比如应用体积会增大的100M以上、会占用更多的CPU和内存资源,还会更耗电等等。
确实,目前来看这些都是问题,但仔细想想,这些问题应该不会持续太久,网络会变的更快,用户的磁盘和内存会变得更大,CPU处理能力也会更好,耗电的问题当然会持续存在,甚至会愈发耗电,但电的供应会持续增长呀。
web相关的技术之所以胜出,并不是这些技术的设计者有多厉害,而是这20多年间,有大量的人涌入了这个领域,前赴后继的推动着它前进。其他任何一个领域都没有这么热火朝天的景象。推荐大家看看我的另一个回答:
------------2022-02-27更新----------
用Web相关的技术做GUI应用的优势是,让开发者可以把大部分精力投注在业务本身上,而不是处理与GUI相关的技术细节。
实际上所有的框架,都应该是这个目的,比如ORM框架,目的应该是让开发者把大部分精力投注在业务与数据之间的关系上,而不是管理关系型数据的技术细节。
当然这肯定是有损耗的,在性能、稳定性、资源消耗上,都会有所削减。而且,因为有框架的存在,开发者很难深入到框架内部做一些特殊的事情。比如,我们该如何修改HTML的排版渲染机制呢?
所以,有些框架注重性能,有些框架注重开发效率,开发者做选择题的时候也应该衡量这两个问题,你的应用对哪些方面要求多一些呢?
你如果要开发一个视频监控系统,没多少业务功能,但要24小时不间断的记录视频数据,随时调取某一段时间的视频数据,这种应用可能Qt是最好的选择。
你如果要开发一个类似飞书的团队协作应用,业务逻辑复杂的一塌糊涂,而且要在短时间内满足更多用户的需求,占领更多的市场,那么Electron可能是更好的选择(目前飞书已经不再用Electron了,他们自己编译了Chromium核心,自己封了一个类似CEF的框架)
目前微软、谷歌、JetBrains等公司都非常重视桌面端开发框架,也在推各自的框架产品,说明桌面应用领域并没有没落,反而应该更加受到重视。
虽然移动端应用大行其道,但我认为,只有生活、社交、轻娱乐等方向上的应用在移动端有较好的发展。文档协作、大型游戏、开发工具、专业管控软件等应用还是在PC端发展的更好一些,毕竟PC端有更多样的输入输出设备、更广阔的显示和交互的空间,更强的存储和计算能力。
希望桌面软件开发领域的从业者都能获得幸福。
满屏荒唐言,一把辛酸泪,一把辛酸泪,一把辛酸泪...
哦?毛熊和鹰酱同年同月同日死的愿望要成真了?
加油。