也给我发一个呗,很正点工具箱的。

副主任医师
本站已经通过实名认证,所有内容由雒生杰大夫本人发表
为何“偶发”二度二型房室传导阻滞,非一直。
状态:就诊前
希望提供的帮助:
以上为大致基本情况,想咨询医生几个问题:
1、二度二型房室传导阻滞我听说是治不好的,只能尽可能转为低度的,而且很有可能向高度转型。我想问,我这个病其实已经要2年了,还没有向高度转,病情是不是可以趋于稳定?不装起搏器,有没有很高的生命危险?我通过网上查看文献,大致意思是说装起搏器与不装,其实对于生命的长短并没有太大影响,只是生活质量问题。不知道是否科学。
2、我一直纳闷一个问题:阻滞发生的时候,我自己其实是有感觉的,只要休息好,我一般不会发生。但劳累了,一天中难免会发生1-2次,时间长短不等。 病情是偶发的,但我就是想不通为何是偶发的,你说心脏有问题,那就一直传导阻滞呗,但为什么大多数情况下是正常的,但一天中总有那么1-2次会发生阻滞呢?难道这个像一个接触不良的线路板的状态吗?
烦医生给我解惑,感激不尽!特别是第二个问题,一直想不明白。
所就诊医院科室:
上海中山医院 心内科
用药情况:
药物名称:辅酶Q10,宁心宝,黄芪颗粒
服用说明:一天一次国外的blackmores的辅酶Q10(1粒/次),一天一次宁心宝(2粒/次),一天两次黄芪颗粒冲剂(1小包/次)
&副主任医师
你确实需要安装起搏器治疗。
副主任医师
雒生杰大夫通知分享:
大夫郑重提醒:因不能面诊患者,无法全面了解病情,以上建议仅供参考,具体诊疗请一定到医院在医生指导下进行!
副主任医师
雒生杰大夫通知分享:
大夫郑重提醒:因不能面诊患者,无法全面了解病情,以上建议仅供参考,具体诊疗请一定到医院在医生指导下进行!
疾病名称:偶发二度二型房室传导阻滞&&
希望得到的帮助:以上为大致基本情况,想咨询医生几个问题:
1、二度二型房室传导阻滞我听说是治不好的...
病情描述:本人性别男,今年2014年已28岁。
2011年11月(25岁)第一次发生晕厥,后多次核查病情,最终通过24小时holter发现有二度二型传导阻滞,那次检查,一天中有一次长R-R间期,大约2.3秒,发生于下午...
疾病名称:二度房室传导阻滞&&
病情描述(发病时间、主要症状、就诊医院等):
患儿一年来三次自诉心脏有停跳感,深呼吸后很快恢复,一年前查心肌酶正常,心电图正常,近二月来做过五次动态心电图,除第三次为夜间二度二型房...
疾病名称:支架术后仍发作心绞痛&&
病情描述(发病时间、主要症状、就诊医院等):
支架术后一个月就复发心绞痛,有时连两次,一般在凌晨两点到四点,硝酸甘油有效。动态心电有些异常。
曾经治疗情况和效果:
常规西药。
疾病名称:二度二型房室传导阻滞&&
希望得到的帮助:浦教授您好,我在重庆看过不少医生,有医生说可能是心肌炎后遗症,但我确实不知道什么...
病情描述:尊敬的浦教授您好,我是重庆的一名男性患者,现年34岁。2014年3月份一个晚上我吃了很多东西,然后睡觉,睡觉时感觉心悸,第二天到区门诊检查动态心电图有两百多次房早,彩超正常,心肌酶正常,医...
疾病名称:心脏病&&
病情描述(发病时间、主要症状、就诊医院等):
三次hot结果是二度二型房室传导阻滞,偶发室性早搏,偶发房性早搏,停搏16次,均为夜间。心动过缓。最小心率45.白天无昏厥。已经做过冠脉ct,冠...
疾病名称:二度二型房室传导阻滞&&
希望得到的帮助:您对这个病有什么建议吗?需不需要用药?可以剧烈运动吗?我想回北京进一步检查。家住...
病情描述:医生您好。我是17岁女生。北京人。有心脏不适感3个月。在沈阳玩时胸闷情况加重。心电图显示T波低平。 心脏彩超正常。 24小时动态心电图结果窦性心率 偶发室早 偶发早搏 二度二型房室传导阻滞 沈...
疾病名称:二度二型房室传导阻滞&&
病情描述(发病时间、主要症状、就诊医院等):
二次hot,均诊断为二度二型房室传导阻滞。停搏16次,最长停搏2'33秒。偶发室性早搏偶发房性早搏。窦性心动过缓。本人经常心悸心慌,偶有闷痛。
疾病名称:室性早搏,二度二型房室传导阻滞&&
病情描述(发病时间、主要症状、就诊医院等):
患者男,30岁,以前身体状况良好,每周六踢足球,在金融系统工作,压力较大,时常应酬。联续两日后半夜间胃部呕动,觉醒,感觉心脏不适去医院检...
疾病名称:房室传导阻滞&&
病情描述(发病时间、主要症状、就诊医院等):
女,36岁,身高180CM,体重75KG,平常坚持游泳等平缓运动,半月前去高原旅游,一切正常,无症状。
2000年体检首次静态心电图发现一度房室传导...
疾病名称:二度二型房室传导阻滞,是否需要装起搏器?&&
希望得到的帮助:县级市医院医生要求安装心脏起搏器,请问是否必要?是否还有其他治疗方法?期待您的答...
病情描述:病人女,64岁,患高血压14年,吃药控制,血压一直稳定。平时身体素质很好,心率60-70。2013年11月感冒后按照感冒治疗,感冒症状消失后开始胸闷不适,稍微运动或者爬楼就气喘不止。12月后情况好转...
投诉类型:
投诉说明:(200个汉字以内)
雒生杰大夫的信息
头晕、眩晕症,耳石症手法复位
医学博士,毕业于首都医科大学,晕病专家,心脑血管病专家,中国研究型医院协会眩晕专业委员会委员,中国中...
神经内科可通话专家
安徽省立医院
南京总医院
上海华山医院
武汉协和医院
上海华山医院
副主任医师
好大夫在线电话咨询服务神问答|谁有发,求发?网友:美女啊,把你的发给我一个呗。神问答|谁有发,求发?网友:美女啊,把你的发给我一个呗。百闻问答精选百家号导语:谁有发,求发?关于“谁有发,求发?”这个问题,小编整理了多个来源的用户回答,供大家更全面的了解。对于ID为“漫步人生路烟雨任平生”网友的精彩回答,大家纷纷点赞支持,他是这么回答的:据之情人士透露,头条集12生肖分两亿活动最终将发出500万套完整的十二 以及发财。也就意味着有500万个發被500万人领取,而头条目前有四亿用户,也就是说80个人只有一个人能够抽到发财。其实这个概率是很高的,因为头条注册人数虽然非常多,但是活跃用户并不多,只要你始终保持活跃,与好友粉丝持续互动,成功概率将大大增加。截止目前,只发出去四万套十二生肖,说明大头还在后面!当然话说会来,抢不到也没关系,听说好运会传染,小發抢不到,大發来找你。一定会好运连连。我昨天分享了一个發被粉丝抢走了,不过明天还会送出去一个。头条机制是邀请制,只要你邀请过好友成功下载注册了头条,你的机会就要比其他人高出很多,这些数据头条都会统计,会逐步从高向低送下去。名为“告白你个气球”的网友的回答也是很透彻:谁帮我做个任务?20多个QQ,5个微信,接近200多次的翻卡,连续3天,今天才翻到的4个发,送人1个,还剩2个,粉丝超过500,做任务的优先考虑赠送!看我动态第一条。对于ID为“0_”网友的精彩回答,大家纷纷点赞支持,他是这么说的:回答问题,超过一百个字,并上传一张图片,就有机会再抽5张卡片,那么我就来试一试。听说回答问题,超过一百个字,并上传一张图片,就有机会再抽5张卡片,那么我就来试一试。听说回答问题,超过一百个字,并上传一张图片,就有机会再抽5张卡片,那么我就来试一试。听说回答问题,超过一百个字,并上传一张图片,就有机会再抽5张卡片,那么我就来试一试。听说回答问题,超过一百个字,并上传一张图片,就有机会再抽5张卡片,那么我就来试一试。
创建于。来看看网名为“向钱看向厚赚”的网友是怎么说的:这些人通过什么方法集的!给个建议!我觉得这是娱乐,不要求啥的
就像当时敬业福一样后面用钱买!发也是一样我觉得没必要。来看看网名为“美先917”的网友是怎么说的:在别人的问题里面去回答别人的问题,而且有一个条件,就是回答的字数需要超过一百个字才可以有机会得到5张卡片,可以回答8次,也就是说一天可以有额外的40张卡片入手,我也还没有得到發那张卡片呢,祝你也祝我早日得到發发 这个完全就是凭运气吧,反正自己从来都不是走运的那一个人,如果周围有人抽到多余的发,可以去求一张,别人有的你没有,你有的别人没有,这个时候就互相赠送呗,帮助别人也帮助自己了嘛,反正我周围是没有抽到的,今天为了 发 ,结果都没有发,唉,现在我的手机已经没办法在赠送卡片了,因为说怕我有诈骗,我也很无奈啊 我也想要发,但是怎么得到,是不是有特殊途径,感觉应该是故意的等到最后,才放出来,所以,大家不用等了,洗洗睡觉吧,发发发w。发发发,最丑的人最丑的策划和想法,坚决抵制发,可是,就剩最后一个发,是坚持还是放弃,要等到十五号揭晓,发发发发发,一定会发,我就喜欢发,无穷发,实实在在发!本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。百闻问答精选百家号最近更新:简介:一个人问,一群人答;在这里,找到你所需要的答案!作者最新文章相关文章&blockquote&浙江温州,浙江温州,最大皮革厂江南皮革厂,倒闭啦。王八蛋老板,黄鹤,吃喝嫖赌欠下3.6个亿,带着小姨子跑啦。我们工人没办法,拿着钱包顶工资。原价都是一百两百的钱包,现在通通只要十块钱,只要十块钱。王八蛋老板,你不是人,不是人,还我血汗钱。&/blockquote&&figure&&img src=&https://pic2.zhimg.com/v2-bbd35a09e9c807a10cef1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&480& data-rawheight=&270& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&https://pic2.zhimg.com/v2-bbd35a09e9c807a10cef1_r.jpg&&&/figure&&p&以上是中国街头巷尾经常播放的版本。&/p&&p&&br&&/p&&p&实际上浙江温州确实有江南皮革厂确实是温州有名的企业,老板黄鹤也确有其人,而且真的跑路了。2002年,江南控股集团在温州龙湾区创办温州江南皮革厂,黄鹤占股10%,是江南控股董事长黄作兴的侄子。当时生意红火,成为知名皮革企业,皮革厂的业务完全由黄鹤负责。不过,到了日,黄鹤突然失踪。坊间传言是欠下一大笔赌债外逃。&/p&&p&2011年6月份,浙江省银监局和温州银监分局出具了一份温州民企经营状况调查,其中就有对江南皮革厂的描述:“2011年初,由于该公司法人代表黄鹤受国际赌博集团引诱,参与大额赌博,欠下巨额赌资后外逃,造成公司经营整体瘫痪。”黄鹤并不仅是他一个人消失,其全家都不知所踪。&/p&&p&工厂于2011年破产清算。日,公司股东出资结清了300多名员工的80万元工资。&/p&&p&&br&&/p&&p&而且江南皮革厂并不生产钱包皮具,他们生产的是人造革原材料。&/p&
浙江温州,浙江温州,最大皮革厂江南皮革厂,倒闭啦。王八蛋老板,黄鹤,吃喝嫖赌欠下3.6个亿,带着小姨子跑啦。我们工人没办法,拿着钱包顶工资。原价都是一百两百的钱包,现在通通只要十块钱,只要十块钱。王八蛋老板,你不是人,不是人,还我血汗钱。以…
谢邀。&br&&br&抱歉,也许我无法准确客观地评判《伤心者》这部作品,&br&因为,直至今日,每每想起它的一些情节,我都会感动得瑟瑟发抖,&br&它曾经在很长时间内深深影响我,&b&于我而言,它就是中国科幻的图腾。&/b&&br&&br&********************&br&&br&&b&【序】&/b&&br&&br&记得那是一个夏日的傍晚,天青青兮欲雨,沉闷的空气令人聒噪。&br&我悠悠地踱入学校的图书馆,想找几篇小说翻翻,让自己从心神不定中解脱出来。&br&&br&随手拿起一本,喏,《&a href=&//link.zhihu.com/?target=http%3A//baike.baidu.com/link%3Furl%3DZyI6tqkpTeyRcAj-SCsqstOmaLr30JUxl4Bbnzr1vFsu9q2gAQzUtJ5KSKX4G-2S4iHCLpCJITjMi02n36hlxa& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2003中国年度最佳科幻小说&/a&》&br&&figure&&img src=&https://pic3.zhimg.com/c11e031e17554cbc95a6_b.jpg& data-rawwidth=&258& data-rawheight=&371& class=&content_image& width=&258&&&/figure&&br&“看起来都是中短篇小说嘛,用来放松心情倒是不错……” 我默默地想。&br&&br&于是,我满怀期望地翻开了它。&br&&br&那时的我,或许并不知道,我正在看的,可能是史上最精彩的中国科幻年度选集。&br&&br&我有倒读小说集的习惯,从最后一篇看起。&br&&br&首先映入眼帘的是 九戈龙的《&a href=&//link.zhihu.com/?target=http%3A//tieba.baidu.com/p/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&永远的朋友&/a&》,这是一部游戏小说,也许是我看过的最棒的游戏小说之一。&br&小说中“杀死好友经验更多” 的设定令人激动不已,在 “没有永远的朋友”的设定让游戏中的友谊显得弥足珍贵。&br&&br&然后让我留下深刻印象的是 韩松 的《&a href=&//link.zhihu.com/?target=http%3A//blog.sina.com.cn/s/blog_00oa.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&地铁惊变&/a&》,韩老师的脑洞之大让人惊叹不已。&br&【翻译:胡思乱想能到这种水准真让人大开眼界(非贬义)】&br&&br&接着是 刘慈欣 的《&a href=&//link.zhihu.com/?target=http%3A//www.kanunu8.com/book3/6636/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&诗云&/a&》,文中的 “李白” 的 “暴力作诗” 让人印象深刻。&br&【“啊啊啊啊啊,啊啊啊啊啊,啊啊啊啊啊,啊啊啊啊唉” 这首“绝妙好诗” 让人忍俊不禁】&br&&br&最后一篇小说,也就是这本选集的第一篇小说,是何夕的《&a href=&//link.zhihu.com/?target=http%3A//www.douban.com/group/topic//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&伤心者&/a&》。&br&&br&在读《伤心者》之前,我合上书,默默地思忖着:&br&&b&一部小说需要写得多好,才能使它在一本选集中排在《诗云》、《地铁惊变》和《永远的朋友》前面?&/b&&br&&br&在读完《伤心者》之后,我已然忘记了之前的疑问,&br&只是愣愣地望着窗外,这才注意到,窗外早已雷声阵阵,暴风骤雨也已经降临多时。&br&&br&正如我那时的心境。&br&&br&(剧透预警。)&br&&br&&b&【一】&/b&&br&&br&&b&《伤心者》不是一部优秀的“科幻”作品。&/b&&br&&br&当我们在谈论科幻作品时,我们会想到什么?&br&&br&有人会想到《黑客帝国》——因为它的世界观太颠覆,连统治者都变了;&br&有人会想到《盗梦空间》——因为它用生活中最平凡的“做梦”,开出了非凡的脑洞;&br&有人会想到《三体》——因为它的场面之大,时间跨度之久,足以让他成为“科幻史诗”;&br&&br&但很少有人会想到《伤心者》。&br&&br&&b&作为一部“科幻”作品,《伤心者》是苍白的。&/b&&br&&br&整部小说,和科幻相关的内容,仅仅是“时空转换回到过去”——这是一个被使用了无数次的设定,早已烂大街了,毫无创意可言。&br&&br&除此之外,它还是一部不能更“软”的科幻。除了“时空转换”、“大统一方程”以外,全文几乎没有出现任何和科学相关的词汇,对了,那个主人公的著作 《微连续理论》恐怕也是作者一拍脑袋想出来的吧。&br&&br&&br&&b&【二】&/b&&br&&br&&b&《伤心者》并不能准确地反映社会现实。&/b&&br&&br&回头看这部小说,&br&&ul&&li&文中描写的所谓 “理科生的世界” 是不真实的,在很多地方带有文科生对理科生的误解。&br&&/li&&li&文中描写的所谓 “大学学术环境” 也是不真实的,为了出一本书费了如此多的“精力”,在主人公所处的大学很难发生。&br&&/li&&li&文中描写的所谓 “出书后的窘境” 更是作者的臆想,如此宏大的作品,哪怕真的是没有意义的,也应该会在大学里有备份(否则我们的那些毕业论文早就被丢2333),根本不必走上“自费出书”的道路。&br&&/li&&/ul&…………&br&&br&总之,《伤心者》不是一部经得起推敲的作品。&br&&br&&b&【三】&/b&&br&&br&我承认,《伤心者》有很多缺点。&br&&br&&b&然而,于我而言,它是一部把 事业、亲情、爱情、社会现实 结合得几乎完美无瑕的作品,每一次结合,在我的心里都会滚过长久的浩叹。&/b&&br&&br&让我们静静地感受那些令人印象深刻的情节吧——&br&&br&1、&br&&blockquote&&i&在江雪看来何夕并不像外界所认为的那样是一个迂腐的书呆子,恰恰相反,江雪觉得何夕身上充满了灵气。给江雪印象最深的是何夕的眼睛,在此之前她从未见过谁拥有这样一双睿智的眼睛,看到这双眼睛的时候江雪总止不住地想有着这样一双眼睛的人一定是不平凡的。&/i&&/blockquote&&br&朴实无华的语言,却道尽了我们很多人从小对数学的崇高敬意。&br&有多少人曾为“性感”的数学着迷?又有多少姑娘曾经想嫁给充满“灵气”的数学家?&br&现实把我们中的大部分人从美妙的数学世界拉回,却拉不回埋在我们心中的数学情种。&br&&br&2、&br&&blockquote&&i&
&四点半不到,时间还早呢。&江雪看表,&要不我们到'金道'保龄球馆去。&何夕迟疑了片刻:&我看还是在学校里找个地方玩吧。&江雪摆头,乌黑的长发掀起了起伏的波浪:&学校里没有什么好玩的,都是些老花样。还是出去好,反正有老麦开钱。&何夕的脸突然涨红了:&我觉得老让别人付钱不好。&江雪诧异地盯着何夕看:&什么别人别人的,老麦又不是外人。他从来不计较这些的。&
&&/b&&b&他不计较可我计较。&何夕突然提高了声音。&/b&&/i&&/blockquote&&br&从阅读理解的角度,如何理解粗体字的含义呢?&br&&ul&&li&生动形象地展示了主人公 虽然贫穷但有骨气 的倔强性格;&br&&/li&&li&承上启下,将故事推向第一个高潮;&br&&/li&&li&为未来主人公的悲剧结局埋下伏笔。&/li&&/ul&当年,我们就是这样做着语文阅读题的。&br&&br&只是,如果看完了全文,回头再看这一段,它带给我的,却是无尽的心酸。&br&&br&3、&br&&blockquote&&i&
&我们的研究终究要获得应用才是有意义的,否则只能误入为数学而数学的歧途。& &可它看起来是那样的和谐。&何夕争辩道,&充满了既简单又优美的感觉。老师,我记得你说过的,形式上的完美往往意味着理论上的正确。&刘青一怔,他知道自己说过这段话,也知道这段话其实是科学巨匠爱因斯坦的经验之谈。他不否认微连续理论符合这一点,当他浏览着手稿的时候内心的确有种说不出的充满和谐的感受,就像是在听一场完全由天籁之声组成的音乐会。&/i&&/blockquote&&br&曾几何时,我们仅仅因为“美” 而喜欢一样东西。&br&可长大后,面对 “实用主义” 的世界,我们中的大部分人,都退却了。 &br&&br&4、&br&&blockquote&&i&何夕下意识地摸了一下口袋里的存折,那里母亲二十七年的工龄,从青春到白发,母亲连问都没有问一句就给他了。何夕突然有点犹豫,他不知道自己究竟有什么权力来支配母亲二十七年的年华-虽然他当初是毫不在乎地从母亲手里接过了它。&/i&&/blockquote&&br&最深沉的母爱,不是天天说“我爱你”,而是递过存折时的毫不犹豫。&br&&br&5、&br&&i&&blockquote&&i&胖眼镜一等到何夕的背影转过楼梯口便露出了得意的笑容,他小心翼翼地收好有何夕答名的那张约会。&雏儿。&胖眼镜不屑地转身,随手将另几页纸扔进了垃圾桶。 &br&
我看着那几页纸,它们同何夕签字的那张纸的内容完全一样,只是在填写金额的地方填着另外的数字。那些金额都更小&/i&。&/blockquote&&/i&&br&“胖眼睛” 的哂笑,如同社会的一角。&br&在利益面前,梦想被践踏得一文不值。&br&&br&6、&br&&i&&blockquote&&i&
书山还在何夕眼前晃动着,不过已经变得有些小了。那天何夕刚到这有夏群芳便很高兴地说有几套书被买走了,是C大的图书馆。夏群芳说话的时候得意地亮着手里的钞票。但是何夕去的时候管理员说篇目上并没有这套书,数学类书架也找不到。何夕说一定有一定有准是没登记上麻烦你再找找。管理员拗不过只得又到书架上去翻,后来果真找出了一套。何夕觉得自己就要晕过去了,他大口呼吸着油墨的清香,又手颤抖着轻轻抚过书的表面,就像是抚摸自己的生命,巨大的小滴掉落在了扉页上。管理员讷闷地嘀咕,这书咋放在文学类里。他抓过书翻开了封面,然后有大发现地说,这不是我们的书,没印章。对啦,准是前天那个闯起来说要找人的疯婆子偷偷塞进去的。管理员恼恨地将书往外面地上一扔,我就说她是个神经病嘛,还以为我们查不出来。何夕简直不知道自己是怎样回到家里的,他仿佛整个人都散了架一般。一进门夏群芳又是满面笑容地指着日渐变小的书山说今天市图书馆又买了两册,还有蜀光中学,还有育英小学。&/i&&/blockquote&&/i&&br&主人公的母亲怎么就这么“傻”呢?&br&花了自己半辈子的钱,帮儿子做自己不理解的事情,还为了让他高兴,去欺骗他。&br&这大概就是母爱吧。&br&&br&7、&br&&blockquote&&i&“两年前的某末我送十一岁的小儿子去上学,当时他们的一幢老图书楼正被推倒。在废墟里我见到一套装在密封袋里的书,后来我才知道这套书已经出版了一百五十年,但是当时它的包装竟然完好无损,也就是说从未有人留意过它。如果当时我不屑一顾地走开,那么我敢说世界还将在黑暗里摸索一百五十年。但是一股好奇心让我拆开了它,然后你们可以想像我当时的心情,就像是一个穷到极点的乞丐有一天突然发现了阿里巴巴的宝藏。我不知道这样一部我难以用语言来评述的伟大著作怎么会被收藏在一所小学校里,不知道上天为何对我这样好,让我有幸读到这样非凡的思想。我只知道当时我简直失去了控制了,在废墟上大喊大叫不能自己。这正是我要找的东西,它就是大统一理论的数学表达式,甚至比我要的还要多得多。”&/i&&/blockquote&&br&你知道这种感受吗?是的,就像是一个穷到极点的乞丐有一天突然发现了阿里巴巴的宝藏。&br&&br&8、&br&&blockquote&&i&
&古希腊几何学家阿波洛尼乌斯总结了圆锥曲线理论,一千八百年后由德国天文学家开普勒将其应用于行星轨道理论。 &br&
数学家伽罗华公元1831年创立群论,一百余年后获得物理应用。 &br&
公元1860年创立的矩阵理论在六十年后应用量子力学。 &br&
数学J.H莱姆伯脱,高斯,黎曼,罗马切夫斯基等人提出并发展了非欧几何。高斯一生都在探索非欧几何的实际应用,但他抱憾而终。非欧几何诞生一百七十年后,这种在当时毫无用处的理论以及由之发展而来的张量分析理论成为爱因斯坦广义相对论的核心基础。
何夕提出并于公元1999年完成的微连续理论,一百五十年后这一成果最终导致了大统一场理论方程式的诞生。& &b&世界沉默着,为了这些伤心的名字,为了这些伤心的名字后面那千百年的寂寞时光。&/b&&/i&&/blockquote&&br&每次读到这段话,都会令人产生无尽的嗟叹。&br&超越时代的伟大,真的只能是悲剧么?&br&&br&9、&br&&i&&blockquote&&i&我拿出一张光盘:&何夕后来一直没有说过话,医生说他已经丧失了语言能力。但是我这里有一段录间,是后来何夕临死前由医院制作为医案的,当时离他的母亲去世不到一个星期。我现在已无法知道这究竟是因为何夕在母亲去世之后失去了支撑呢,还是他虽然疯了但却一直在潜意识里坚持着比母亲活得长久-这也许是非曲直他惟一能够报答母亲的方式了。还是让我们来听听吧。&背景声很嘈杂,很多人在说话。似乎有几位医生在场。放弃吧。一个浑厚的声音说,他没救了,现在是十点零七分,你记下时间。好吧,一个年轻的声音说,我收拾一下。年轻的声音突然升高,听,病人在说话,他在说话。不可能,浑厚的声音说,他已经二十年没说过一句话了,再说话也不可能有力气说话。但是浑厚的声音突然打住,像是有什么发现。周围安静下来,这里可以听见一个带着潮气仿佛已经锈蚀多年来的声音在说着什么。 &br&&br&
&妈-妈——&那个声音有些含糊地喊到。 &br&
&妈——妈-&他又喊了一声,无比的清晰。&/i&&/blockquote&&/i&&br&静静地感受吧,这是爱的回报。&br&&br&&br&&b&……&/b&&br&&br&&br&&b&【四】&/b&&br&&br&看完《伤心者》的很长一段时间里,我都震惊得说不出话来。&br&&br&在这个自私的世界里,依然有些东西,它们是那样地洁白无瑕;&br&&br&何夕的《伤心者》,告诉了我们其中三样:&br&&br&&b&一是父母的爱;&/b&&br&&br&&b&二是对真理的追求;&/b&&br&&br&&b&三是埋在心底的梦想。&/b&&br&&br&&br&也许,在我们每个人内心深处,都曾经,或依旧保有这样一个“伤心者”吧。&br&&br&【完】
谢邀。 抱歉,也许我无法准确客观地评判《伤心者》这部作品, 因为,直至今日,每每想起它的一些情节,我都会感动得瑟瑟发抖, 它曾经在很长时间内深深影响我,于我而言,它就是中国科幻的图腾。 ******************** 【序】 记得那是一个夏日的傍晚,天青…
&p&题目是:&b&有哪些行为堪比“1949年加入国民党”?&/b&&/p&&p&&br&&/p&&p&比如去IT公司当码农的人毕业前在学校入XX党。听过几个清华的人(清华的人普遍入党)吐槽,工作以后每年要交好几千的党费。当公务员交党费也就算了,毕竟能通过党员身份获得一些好处。他们纷纷表示学计算机的十有八九是要去当码农,入党没有任何好处,当时脑子肯定是被驴踢了才会入党。他们现在想退X根本就退不掉,每年都要被割肉。&/p&&p&所谓不交党费、信宗教就自动退X,都是骗人的。要是信基督教就能退X,估计IT公司里都能办教会了。&/p&&p&还是我一个老同学聪明,已经是预备党员了,决定要出国的时候,坚决退了。要是当时意志不坚定,听了组织的劝说,更进了一步,可就脱不了身了。&/p&&p&&br&&/p&&blockquote&&b&  北京党费收缴标准2016&/b&&br&&br&  第二条 党员交纳党费的比例为:每月工资收入(税后)在3000元以下(含3000元)者,交纳月工资收入的0.5%;3000元以上至5000元(含5000元)者,交纳1%;5000元以上至10000元(含10000元)者,交纳1.5%;&b&&u&10000元以上者,交纳2%&/u&&/b&。&/blockquote&
题目是:有哪些行为堪比“1949年加入国民党”? 比如去IT公司当码农的人毕业前在学校入XX党。听过几个清华的人(清华的人普遍入党)吐槽,工作以后每年要交好几千的党费。当公务员交党费也就算了,毕竟能通过党员身份获得一些好处。他们纷纷表示学计算机的…
说个自己的事&br&&br&&br&
以前做过一个梦,我处在一根粉红色的管道中间,管道两端都延伸得很远,看不见尽头。管道很窄,人站不起来,只能屈膝爬行。&br&
一个声音告诉我,这跟管道一端是开口的,可以出去,而另一段是没有尽头,无限延伸的,而且我不知道我所处的位置离出口那端有多远。&br&
梦里还有一个设定:我的寿命是无限的。&br&
做梦时我没想太多,也不觉得有什么恐怖的,立刻就动身爬起来。爬了很久,我醒了,当时也不觉得是个噩梦。但当我睡意减退,仔细回想那个梦时,我才觉得毛骨悚然。&br&
每当我想起这个梦,我都会想到“绝望”这个词。原因如下:&br&1.在爬到出口之前,我永远都不知道管道的哪一端是出口,那一端是无尽,我将不断地怀疑自己选择的是不是错误的方向。一旦错误,我将永无止境地走下去……&br&2.我并不知道出口离自己有多远。我可能爬了100米,100米,10000米都没有找到出口,这时,我要想:我的方向是不是错了?我应不应该掉头?但我不可能知道答案。我只能不停爬下去,不停怀疑。&br&3.我的寿命是无限的,只意味着前两点给我带来的折磨将是永无止境的。&br&&br&
不知道别人怎么想,反正我每次想起这个梦,都有后怕。这是我做过最恐怖(也是最有创意的)的噩梦。&br&&br&可能跑题了,将就看吧。
说个自己的事 以前做过一个梦,我处在一根粉红色的管道中间,管道两端都延伸得很远,看不见尽头。管道很窄,人站不起来,只能屈膝爬行。 一个声音告诉我,这跟管道一端是开口的,可以出去,而另一段是没有尽头,无限延伸的,而且我不知道我所处的位置离出口…
童言无忌,有时候小朋友不经意说的话,细思极恐。&br&&br&下面是国外网友分享的一些自己身边的小故事,翻译分享给大家:&br&&figure&&img src=&https://pic4.zhimg.com/v2-6e14b89a3b6930aba40bb_b.png& data-rawwidth=&695& data-rawheight=&273& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&https://pic4.zhimg.com/v2-6e14b89a3b6930aba40bb_r.png&&&/figure&&p&我和妹妹妹夫,还有两岁大的侄女儿在一起聊天。&/p&&p&谈到最近去世的亲人时,妹夫把他母亲的照片拿出来,妹夫才6岁的时候,他母亲就因为车祸去世了。&/p&&p&我侄女看到照片后哈哈大笑,我们问她笑什么。&/p&&p&她说,“这就是那个给我唱歌的朋友啊!”&/p&&p&麻蛋,一想就浑身发抖。&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-9cc20b21a1aa504d76034_b.png& data-rawwidth=&694& data-rawheight=&150& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&https://pic1.zhimg.com/v2-9cc20b21a1aa504d76034_r.png&&&/figure&&p&我把两岁大的儿子抱进被窝,他跟我说,“再见爸爸。”&/p&&p&我纠正他,“应该说晚安。”&/p&&p&他说,“我知道,但这次应该说再见。”&/p&&p&这位老爸一晚上起床好几次,检查儿子是否还在床上。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/v2-6edaa8d6fee5bdb1fc445f_b.png& data-rawwidth=&693& data-rawheight=&145& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&https://pic4.zhimg.com/v2-6edaa8d6fee5bdb1fc445f_r.png&&&/figure&&p&散步,路过一座破旧的公墓。&/p&&p&3岁的儿子忽然说,“我哥哥在那里。”&/p&&p&我告诉他,他没有兄弟姐妹。&/p&&p&他说,“我说的是以前,那时候我妈妈是另一个女人。”&/p&&br&&br&&figure&&img src=&https://pic2.zhimg.com/v2-4bbb364c0f3e_b.png& data-rawwidth=&699& data-rawheight=&147& class=&origin_image zh-lightbox-thumb& width=&699& data-original=&https://pic2.zhimg.com/v2-4bbb364c0f3e_r.png&&&/figure&&p&我堂妹大概2岁时,她妈妈又怀孕了。&/p&&p&一天,她抱着妈妈的肚子说了一句,“弟弟生病了。”&/p&&p&几天后,她妈妈流产了……&/p&&br&&figure&&img src=&https://pic3.zhimg.com/v2-ea7d3cbffedab232f91ba24e_b.png& data-rawwidth=&693& data-rawheight=&145& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&https://pic3.zhimg.com/v2-ea7d3cbffedab232f91ba24e_r.png&&&/figure&&p&这是我儿子小时候的事。&/p&&p&我跟他讲怎么种土豆,如何培土。&/p&&p&他说,“我还是个老头子的时候经常干这活儿。”&/p&&br&&figure&&img src=&https://pic2.zhimg.com/v2-2b0d77f4a181edca82f4cd71_b.png& data-rawwidth=&689& data-rawheight=&179& class=&origin_image zh-lightbox-thumb& width=&689& data-original=&https://pic2.zhimg.com/v2-2b0d77f4a181edca82f4cd71_r.png&&&/figure&&p&给2岁半的女儿洗完澡,妻子教育她,要保持女孩的私处干净清洁。&/p&&p&她说,“没人碰我那儿。有一天,他们破门而入,想欺负我,我反击了。后来我死了,再后来就到这里来了。”&/p&&p&她说这话的时候一直很淡定。&/p&&br&&br&&figure&&img src=&https://pic2.zhimg.com/v2-631ba0e700cae929c835f5_b.png& data-rawwidth=&686& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&686& data-original=&https://pic2.zhimg.com/v2-631ba0e700cae929c835f5_r.png&&&/figure&&p&女儿不停地哭,“有坏人。”&/p&&p&“哪儿有坏人?”&/p&&p&她指着昏暗的墙角,“那儿。”&/p&&p&我刚要扭头去看,墙角书架上的台灯忽然莫名其妙地掉了下来。&/p&&p&那天晚上,女儿挨着我们睡的。&/p&&br&&br&&figure&&img src=&https://pic3.zhimg.com/v2-6fd3e297bdafd78b07be4b9b04e99542_b.png& data-rawwidth=&675& data-rawheight=&204& class=&origin_image zh-lightbox-thumb& width=&675& data-original=&https://pic3.zhimg.com/v2-6fd3e297bdafd78b07be4b9b04e99542_r.png&&&/figure&&p&4月份的时候,我姐姐出车祸了,车子严重变形。&/p&&p&当时,我4岁的侄子和还是个小婴儿的侄女也在车上,好在他们并未受伤,连擦伤都没有。&/p&&p&我妈妈赶到医院的时候,侄子说,“外婆,我想谢谢那些大个子叔叔。”&/p&&p&“什么大个子叔叔?”&/p&&p&“外面又吵又乱的时候,他们在车里抱着我和妹妹呐。”&/p&&br&&br&&figure&&img src=&https://pic2.zhimg.com/v2-b5edd401e897897eaee98bafa60d6b95_b.png& data-rawwidth=&689& data-rawheight=&221& class=&origin_image zh-lightbox-thumb& width=&689& data-original=&https://pic2.zhimg.com/v2-b5edd401e897897eaee98bafa60d6b95_r.png&&&/figure&&p&我睡得很沉很沉,凌晨6点的时候,4岁女儿忽然把我弄醒了。&/p&&p&她的脸离我只有几厘米,死死盯着我的眼睛,“我想剥了你的皮。”&/p&&p&我当时吓糊涂了,后来回想起来,不知道是在做梦还是真有此事。&/p&&p&事情的后续就是,我被太阳严重晒伤,身体不停地脱皮。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/v2-dc6c23d711e9f029c9bfe4ce41a1f5a3_b.png& data-rawwidth=&684& data-rawheight=&263& class=&origin_image zh-lightbox-thumb& width=&684& data-original=&https://pic4.zhimg.com/v2-dc6c23d711e9f029c9bfe4ce41a1f5a3_r.png&&&/figure&&p&我儿子4岁,他有一个我们看不见的朋友,叫约翰。&/p&&p&一天,他很严肃的走到我面前,“大约翰说他爱你。”&/p&&p&我爷爷的名字就叫约翰,大家平时都叫他大约翰。&/p&&p&我6岁的时候爷爷就去世了,我提起他时总是称呼他为爷爷,儿子不可能知道他的名字。&/p&&p&这件事之后,儿子提到这个朋友时都称他为,“我的朋友约翰……”&/p&&br&&br&&figure&&img src=&https://pic4.zhimg.com/v2-4cc2bb77c052e3772ccc1f_b.png& data-rawwidth=&686& data-rawheight=&177& class=&origin_image zh-lightbox-thumb& width=&686& data-original=&https://pic4.zhimg.com/v2-4cc2bb77c052e3772ccc1f_r.png&&&/figure&&p&曾祖母去世后2个月,小妹Hailey就出生了。&/p&&p&一天,Hailey起床后告诉大家,“今天是我95岁生日。”&/p&&p&大家跟她讲道理,她急哭了,“我叫Irene,不叫Hailey。”&/p&&p&Irene是曾祖母的名字。&/p&&p&这种情况持续了一整天,第二天起床后她什么都不记得了。&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-00e302aa81d244d5a48b81c2a23d8edc_b.png& data-rawwidth=&679& data-rawheight=&222& class=&origin_image zh-lightbox-thumb& width=&679& data-original=&https://pic1.zhimg.com/v2-00e302aa81d244d5a48b81c2a23d8edc_r.png&&&/figure&&p&和4岁的儿子排队等餐。&/p&&p&他突然抚摸我的肚子,还跟它说话。&/p&&p&我问他在干什么,他说,“我在跟小宝宝说话。”&/p&&p&我说,“妈妈没怀孕哦。”&/p&&p&“你肚子里真的有宝宝……我看见他从地板上爬进你肚子里了。”&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-22e57e3b7f382f729b63f43af3b9d4fc_b.png& data-rawwidth=&688& data-rawheight=&146& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic1.zhimg.com/v2-22e57e3b7f382f729b63f43af3b9d4fc_r.png&&&/figure&&p&5岁的儿子问我,“我什么时候才能长到23岁?”&/p&&p&我告诉他,“18年后。”&/p&&p&“好吧,希望那时候我不会又死掉,上次我就是23岁的时候去的天堂。”&/p&&br&&figure&&img src=&https://pic4.zhimg.com/v2-f77a92e7d76bee9cdbe970f80b05728f_b.png& data-rawwidth=&684& data-rawheight=&242& class=&origin_image zh-lightbox-thumb& width=&684& data-original=&https://pic4.zhimg.com/v2-f77a92e7d76bee9cdbe970f80b05728f_r.png&&&/figure&&p&这是我的故事,我母亲告诉我的。&/p&&p&我大概4岁时,每天都要去探望曾祖母,陪她玩一会儿。&/p&&p&每次回家的时候,我都会说,“上帝与你同在。”&/p&&p&有一天,我回家的时候跟曾祖母说,“跟上帝走吧!”&/p&&p&母亲纠正我,但我一直坚持说,“跟上帝走吧!”&/p&&p&当天晚上,曾祖母就去世了。&/p&&br&&br&&figure&&img src=&https://pic3.zhimg.com/v2-30d42c2376f1aedb904a4a_b.png& data-rawwidth=&683& data-rawheight=&161& class=&origin_image zh-lightbox-thumb& width=&683& data-original=&https://pic3.zhimg.com/v2-30d42c2376f1aedb904a4a_r.png&&&/figure&&p&6岁大的女儿坐在汽车后座。&/p&&p&“爸爸,等我7岁的时候我要杀了你。算了,还是等到8岁的时候吧。”&/p&&p&我逗她,“你打算怎么杀死爸爸呢?”&/p&&p&她笑了笑,“我要开着这辆车碾过你的头。”&/p&&br&&p&英文原贴地址:&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.boredpanda.com/%3Fver%3Dnopic%26utm_expid%3D.H96weK4-RU66F9S66czstQ.1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bored Panda&/a&&/p&
童言无忌,有时候小朋友不经意说的话,细思极恐。 下面是国外网友分享的一些自己身边的小故事,翻译分享给大家: 我和妹妹妹夫,还有两岁大的侄女儿在一起聊天。谈到最近去世的亲人时,妹夫把他母亲的照片拿出来,妹夫才6岁的时候,他母亲就因为车祸去世了…
&p&我还是匿了……&/p&&hr&&p&高中的时候,有个同学…………&/p&&p&每天背单词,和打怪似的,背完了还给单词配台词……&/p&&p&然后 还自己算经验值 (好像是按单词长度?)……&/p&&p&过几天发现自己没背下来,还模拟受到攻击,还假装自己被扣血(还有台词!!!)&/p&&p&——————————————————————————&/p&&p&还是这个同学……&/p&&p&高中课间操还好好做的不多,&/p&&p&我勉强算是一个,不过也就是按标准做,也就这样了。&/p&&p&但是他做课间操,动作幅度比我大50%以上的感觉……&/p&&p&比如弓步这样的 身高和我差不多高的情况下,能比我低一头……&/p&&p&——————更新——————&/p&&p&口头禅是“我跟你说”,看起来很普通吧……&/p&&p&但是说的时候,右臂伸直,食指指向对方,&/p&&p&其余四指要下垂,但不握拳;左拳则举于脸侧。&/p&&p&&_&别问我这个姿势是怎么来的,我也不知道……&/p&&p&——————更新1————————&/p&&p&打CS一定要当匪,绝对不玩警&/p&&p&一定要选头上绑红绳的那各&/p&&p&最喜欢的武器是 机枪 ……&/p&&p&买了机枪的局,就可以听到 哒哒哒哒哒哒 的声音……&/p&&p&如果买不起 机枪,会买 Uzi&/p&&p&依然可以听到 哒哒哒哒哒哒 的声音……&/p&&hr&&p&反正戏很多…… &_&bbb&/p&
我还是匿了……高中的时候,有个同学…………每天背单词,和打怪似的,背完了还给单词配台词……然后 还自己算经验值 (好像是按单词长度?)……过几天发现自己没背下来,还模拟受到攻击,还假装自己被扣血(还有台词!!!)——————————————…
山西太原大东关国营酒厂在上世纪九十年代,曾推出一款价廉物美的52度白酒《高粱白酒》,盛极一时。然后太原清徐县某个私人酒厂开始仿冒。&br&后来大家普遍认为清徐出产的【太原大东关《高粱白酒》】比真正的大东关出品要好,所以我们那时候去小饭店吃饭,让服务员上酒的时候,会特别关照一句:要假的啊,不要真的!
山西太原大东关国营酒厂在上世纪九十年代,曾推出一款价廉物美的52度白酒《高粱白酒》,盛极一时。然后太原清徐县某个私人酒厂开始仿冒。 后来大家普遍认为清徐出产的【太原大东关《高粱白酒》】比真正的大东关出品要好,所以我们那时候去小饭店吃饭,让服…
&figure&&img src=&https://pic3.zhimg.com/v2-82c669daa574d08738a4_b.jpg& data-rawwidth=&927& data-rawheight=&521& class=&origin_image zh-lightbox-thumb& width=&927& data-original=&https://pic3.zhimg.com/v2-82c669daa574d08738a4_r.jpg&&&/figure&&p&&a href=&https://link.zhihu.com/?target=http%3A//dtysky.moe/article/Skill-_a& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在我的BLOG上观看获得最佳体验。&/a&&/p&&p&&br&&/p&&p&在正式看这篇文章之前,希望大家先去此处体验一下游戏,这样才能更好地理解我的此次分享:&/p&&p&&b&咳咳,这里本来是这个个性二维码,你乎不让贴就不让帖吧,可以去BLOG这篇扫或者访问:&/b&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.bilibili.com/blackboard/activity-xmas2017.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jingle Beats&/a&&/p&&p&&br&&/p&&p&继七夕活动之后,我又负责了圣诞活动&a href=&https://link.zhihu.com/?target=https%3A//www.bilibili.com/blackboard/jingel-beats.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jingel Beats&/a&的开发,这次放弃了白鹭引擎,使用了侵入性比较低的&code&pixi.js&/code&。下面我就此次活动的一些心得。&/p&&blockquote&不过在了解到有&b&Phaser&/b&之后,其实本游戏应该用它来做,比起&b&PIXI&/b&这个渲染引擎,它才是一个实际的游戏引擎,自带音频、物理引擎、摄像机、输入归一化、全局画布管理、内置状态管理等等设计也更符合游戏的需求,希望大家可以尝试一下。不过对于一般的轻量级游戏,还是可以直接用PIXI,毕竟Phaser的mini版本也有1.7m了...&/blockquote&&h2&前言&/h2&&p&在活动开发方面,我一直致力于形式的探索,而由于国内审美环境特别,现在国际主流的设计无法很好使用(这个也和跳过了桌面端而直接到移动端有关),所以需要另辟蹊径。不难想到,交互形式的极致其实就是游戏,而游戏同时也是受众最为广泛的一种形式,加之本人本身就对游戏有着极高的兴趣和爱好,所以这次在这个方向又做了一个尝试。&/p&&p&&b&当然,如果大家谁有有趣的、纯公益或者纯艺术性与新媒体结合的路子,可以找我,视情况我可以提供无偿的技术支持,不仅仅是web前端,硬件我也可以视情况奉陪。&/b&&/p&&p&这次的游戏形式是MUG,即音乐节奏类游戏,这类游戏的代表有&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%E9%259F%25B3%25E6%259C%25AA%25E6%259D%25A5_-%25E6%25AD%258C%25E5%25A7%25AC%25E8%25AE%25A1%25E5%-& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Project Diva&/a&、&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%25A4%25AA%25E9%25BC%%25B9%258B%25E9%E4%25BA%25BA%25E7%25B3%25BB%25E5%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&太鼓达人&/a&、&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/DJMax& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DJMAX&/a&、&a href=&https://link.zhihu.com/?target=https%3A//osu.ppy.sh/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OSU&/a&等。其形式各有所长,输入方式也千门百类,且每种都有大量fans(当然,真fan无论哪种都很喜欢)。而由于是此游戏主打移动端,并且是运行在浏览器内,所以考虑到输入方式和一些边边角角的问题后,我初步给出了两种形式:&/p&&ol&&li&&b&玩法一&/b&:太鼓达人式的游戏模式,其核心在于一个和音频同步、不断向一侧移动的元素序列,由于整体是一个长条,所以绘制较为简单,但玩家控制并非直接作用于元素之上,而是利用两个按钮进行输入,所以逻辑有些复杂。在正常模式之后,还会有一个随意点击屏幕可视区域的奖励模式。这种玩家操作都规约到两个按钮的游戏模式比较亲民,而且操作上也不会有和浏览器以及设备本身有过多的冲突,中规中矩,比较保险。&/li&&li&&b&玩法二&/b&:有些像PSV上的那一作DJMAX,或者是触控模式的OSU。元素不像太鼓达人在一个长条内,而是多出一个空间的属性,铺满了整个屏幕。随后,我将给每个元素赋予不同的类型,每种类型代表一个手势,当元素出现时,玩家需要去定位元素,之后遵守元素自身的手势去拖动它,完成判定,最终也有个奖励模式,就是模仿地雷社的&b&限界凸骑&/b&中的撸动屏幕,带来整个游戏的高潮——这个方案充分挖掘了触屏的优势,可玩性也很高,不过也有其自身的问题。&/li&&/ol&&p&玩法二的问题在于当玩家投入游玩后,可能会手势越界,唤醒浏览器自身的手势行为,亦或是唤醒设备本身的通知栏等。而MUG本身是一种不能被中断的游戏,所以为了保险,最终还是选择了玩法一——这也是在浏览器中做游戏的限制。不过,忙过这阵子我将尝试实现这种模式(作为个人项目)。&/p&&h2&架构&/h2&&p&一个MUG,或者说几乎任何一个游戏,都可以被拆解为&b&逻辑&/b&和&b&展示&/b&这两个部分,而逻辑部分和试图部分的分离也是复杂度得以控制的根源。拿此游戏为例,运行时的状态和判定等,并非是由元素的位置决定,而是由当前的时间决定的,而这个时间也同时控制着元素位置和状态的绘制——这样一种状态视图解耦、状态驱动视图、单向数据流的模型,和现代前端开发的MVC等视图框架没有太大区别。所以接下来,我将从&b&控制层&/b&和&b&表示层&/b&这两层来描述。&/p&&h2&玩法核心&/h2&&p&控制层的核心便是围绕玩法的逻辑,本游戏逻辑相对单纯却也不失丰富:&/p&&ol&&li&元素的类型,有&b&左按&/b&、&b&右按&/b&、&b&一起按&/b&三种。&/li&&li&在操作维度上,有&b&点击&/b&和&b&长按&/b&两种。&/li&&li&判定方面,有&b&miss&/b&、&b&good&/b&和&b&perfect&/b&三种。&/li&&li&游戏流程,则有&b&普通模式&/b&、&b&奖励模式&/b&,还有基于&b&能量&/b&的&b&fever机制&/b&和&b&失败判定&/b&,以及&b&得分&/b&、&b&Combo&/b&和&b&判定类型&/b&的统计。&/li&&li&难度方面,我们提供了&b&easy&/b&、&b&normal&/b&和&b&hard&/b&三种模式。&/li&&li&而在数值设计上,参照魔界战记大额伤害带来的爽快感,这里一个&b&good&/b&积分666、&b&perfect&/b&积分1000,fever状态翻倍。&/li&&/ol&&p&以上要素加起来,其实已然不仅仅是一个HTML5小游戏,而可以说是一个完整版音游了。加之后面会说的可以灵活切换的谱面设计,套个壳再多加几首歌都可以上架了(逃。&/p&&h2&图层管理&/h2&&p&作为一个MUG,玩家的注意力应当是高度集中在玩法本身上的,所以应当给节奏条和控制器很高的优先度,而其它元素则是以客场的身份——它们只是作为背景,并且不宜过度复杂,否则将会干扰视觉(这一点在歌姬计划的某些曲目有所体现),所以经过讨论,加之B站背景的限制,我们选择了&a href=&https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/av1747345& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&今天妈妈不在家&/a&这个鬼畜的梗(bgm本身也是鬼畜版的),让玩家的操作来控制22和33的动作,并利用一些小的元素(比如烤箱喷射的食物、fever时候降下的灯)等来烘托氛围。基于以上,图层实际被分割为:&/p&&ol&&li&background: 背景图层,用于放置在最底层元素的基础元素,比如屋子的图片、闪烁的灯等。&/li&&li&chars: 人物图层,放置22和33.&/li&&li&magic: 核心元素图层,用于放置节奏条和控制器。&/li&&li&ui: UI图层,记分板、引导页和结果页放在这里。&/li&&/ol&&p&这些图层自底而上,一层一层构成了整个游戏的视觉部分。&/p&&h2&自适应&/h2&&p&本游戏和七夕游戏一样,也遇到了强制横屏的问题,但pixi并没有提供官方的强制竖屏和自适应方案。一开始我按照egret的方案去做,但遇到了一些问题,而解决方案我确实也找到了,如有需要,请参照我写的这篇文章:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&在pixi.js实现设备自适应和强制竖屏&/a&。&/p&&h2&实现&/h2&&p&架构说完了,让我们进入细节来看看具体的实现吧。&/p&&h2&谱面设计&/h2&&p&将可配置的尽量提出来变成可配置的,是降低工程复杂度的最佳方式之一,无论这个配置看起来和程序主题耦合的多么深——在此游戏中,这个最大的配置就是谱面本身。如果我只是为了一个谱面来单纯写一个游戏,那它只是一段是毫无价值的堆砌式代码,而倘若我将谱面作为一个配置项来服务于程序主体,那我就做了了一个引擎似的东西——它高度复用,以后有新的需求或者需求的修改,只需要修改配置即可。做好架子,将核心逻辑和形式内容分离,当产品或内容想修改的时候将只需要将配置拿来,这是最合理的分工。&/p&&p&好,废话不多说,先来看一看下面的类型定义:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&export&/span& &span class=&nx&&type&/span& &span class=&nx&&TRhythm&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&level&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&bps&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&direction&/span&: &span class=&kt&&TDirection&/span&&span class=&p&&,&/span&
&span class=&nx&&award&/span&&span class=&o&&:&/span& &span class=&p&&{&/span&
&span class=&nx&&start&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&end&/span&: &span class=&kt&&number&/span&
&span class=&p&&},&/span&
&span class=&c1&&// 0 ~ 1&/span&
&span class=&nx&&fever&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&duration&/span&: &span class=&kt&&number&/span&&span class=&p&&;&/span&
&span class=&nx&&sequence&/span&: &span class=&kt&&TRhythmElement&/span&&span class=&p&&[]&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&&code&TRhythm&/code&即为谱面的数据结构,它最核心的几个要素是:&/p&&ol&&li&bps: 一秒的拍数,用于控制谱面整体的速度。&/li&&li&award: 奖励模式的起始和结束拍数定义。&/li&&li&fever: fever阈值定义,其为一个比例,这个比例代表的是fever所需能量占据游戏可获取的所有能量的比例。&/li&&li&duration: 谱面长度,以拍数记。&/li&&li&sequence:核心,谱面序列,这个定义其实是解析后的元素序列,解析前则是一个字符串,解析过程将会在下一节讲到。&/li&&/ol&&p&这些属性加起来就定义了一个谱面,若有需求变更,只需要修改这个谱面即可。&/p&&h2&谱面解析&/h2&&p&有了原始的谱面定义,程序便可以将其解析,转换为运行时实际的谱面。而这个解析的核心,实际上是对&code&sequence&/code&这个序列的转换。让我们来看看一段原始的、字符串描述的谱面和转换后的&code&TRhythmElement[]&/code&序列是怎样的:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&export&/span& &span class=&nx&&type&/span& &span class=&nx&&TRhythmElement&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&type&/span&: &span class=&kt&&TElement&/span&&span class=&p&&,&/span&
&span class=&c1&&// int, beats from last element&/span&
&span class=&nx&&start&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&c1&&// 1 is short, others are long-touch element&/span&
&span class=&nx&&beats&/span&: &span class=&kt&&TBeats&/span&
&span class=&p&&};&/span&
&span class=&kr&&const&/span& &span class=&nx&&squence&/span& &span class=&o&&=&/span& &span class=&s1&&'010|121|233'&/span&&span class=&p&&;&/span&
&span class=&c1&&// bps = 1&/span&
&span class=&kr&&const&/span& &span class=&nx&&convertedSequence&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&
&span class=&p&&{&/span&&span class=&nx&&type&/span&: &span class=&kt&&0&/span&&span class=&p&&,&/span& &span class=&nx&&beats&/span&: &span class=&kt&&1&/span&&span class=&p&&,&/span& &span class=&nx&&start&/span&: &span class=&kt&&0&/span&&span class=&p&&},&/span&
&span class=&p&&{&/span&&span class=&nx&&type&/span&: &span class=&kt&&1&/span&&span class=&p&&,&/span& &span class=&nx&&beats&/span&: &span class=&kt&&2&/span&&span class=&p&&,&/span& &span class=&nx&&start&/span&: &span class=&kt&&1&/span&&span class=&p&&},&/span&
&span class=&p&&{&/span&&span class=&nx&&type&/span&: &span class=&kt&&2&/span&&span class=&p&&,&/span& &span class=&nx&&beats&/span&: &span class=&kt&&3&/span&&span class=&p&&,&/span& &span class=&nx&&start&/span&: &span class=&kt&&3&/span&&span class=&p&&}&/span&
&span class=&p&&];&/span&
&/code&&/pre&&/div&&p&可以看到,原始的谱面实际上是由一段由&code&|&/code&分割的字符串描述的,其定义为&code&${type}${beats}${start}|...&/code&,它们正好对应&code&TRhythmElement&/code&中的三个属性,分别表示节奏元素的&b&类型&/b&、&b&拍数&/b&和&b&距离上一个元素结束时的拍数&/b&,在本游戏这种类型的MUG中,这三个属性足以描述一个元素。&/p&&p&从标准化的字符串向&code&TRhythmElement[]&/code&的转换只是第一步,在拿到了转换后的&code&TRhythm&/code&后,对谱面的解析才真正开始。第二步解析的目的是——将拍数描述的谱面转换为时间描述,并同时生成每个元素对应的视觉容器,之后将它们放入顶层容器中。视觉方面的实现下一节再讲,这里先说一下逻辑上的实现,来看看下面的这个新类型:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&export&/span& &span class=&nx&&type&/span& &span class=&nx&&TRhythmPlayElement&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&nx&&type&/span&: &span class=&kt&&TElement&/span&&span class=&p&&,&/span&
&span class=&nx&&start&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&end&/span&: &span class=&kt&&number&/span&&span class=&p&&,&/span&
&span class=&nx&&beats&/span&: &span class=&kt&&TBeats&/span&&span class=&p&&,&/span&
&span class=&nx&&element&/span&: &span class=&kt&&PIXI.Container&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&这是经过解析后元素的最终形态,和&code&TRhythmElement&/code&不同,这里的&code&start&/code&和新多出的&code&end&/code&的单位都是&code&ms&/code&,并且它们的值都不再是相对于上一个元素的偏移,而是绝对时间,这是游戏运行时进行判定操作所必要的。与此同时,这里还多出了一个&code&element&/code&属性,它用于保存元素在视图层容器的引用。&/p&&h2&元素序列条&/h2&&p&谱面被解析后,生成了被各种属性描述的元素,被保存在一个序列中。这个序列除了逻辑,还保存着其视图容器的引用。而这个视图容器其实就是游戏过程中的那一个个圆形或者长条的元素,这些容器的也是伴随着谱面解析同步生成的。下面我就来说说这些容器生成的细节。&/p&&p&节奏元素以及其外部容器分为四个部分,其一是最底层的那个半透明轨道,其二是圆形的判定框,第三是那一个个元素构成的序列条,第四就是元素被命中时判定框环测的闪光和星星。在游戏过程中,元素在轨道上不断从右向左运动,到了判定框后,随着玩家的操作或者自发发起操作来引起游戏判定,判定后元素消失,如果是长按型的元素(长条状),则要保证该元素不会穿过判定框,即产生一个&b&进洞&/b&的效果。这三部分中,半透明轨道直接使用了&code&PIXI.Graphics&/code&来绘制:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&nx&&rail&/span&&span class=&p&&.&/span&&span class=&nx&&beginFill&/span&&span class=&p&&(&/span&&span class=&nx&&config&/span&&span class=&p&&.&/span&&span class=&nx&&railColor&/span&&span class=&p&&,&/span& &span class=&nx&&config&/span&&span class=&p&&.&/span&&span class=&nx&&railAlpha&/span&&span class=&p&&);&/span&
&span class=&nx&&rail&/span&&span class=&p&&.&/span&&span class=&nx&&drawRect&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&nx&&width&/span&&span class=&p&&,&/span& &span class=&nx&&config&/span&&span class=&p&&.&/span&&span class=&nx&&rhythmRailHeight&/span&&span class=&p&&);&/span&
&span class=&nx&&rail&/span&&span class=&p&&.&/span&&span class=&nx&&endFill&/span&&span class=&p&&();&/span&
&/code&&/pre&&/div&&p&而判定框,则是一个&code&PIXI.Sprite&/code&,它的宽高是和轨道相关的,比轨道的高略小。这里要注意的是判定框并非真的主导了“判定”操作,“判定”操作实际上是和核心逻辑、也就是每个元素自身存储的&code&start&/code&和&code&end&/code&决定的,这里的判定框不过是给了玩家一个视觉上的预期,让他们有了操作的依据。&/p&&p&在这四个部分当中,元素序列条最为重要。在游戏过程中,从玩家角度来看,元素似乎是一个一个从屏幕右侧生成的,但实际上,实时生成元素对于性能和复杂度而言都是不太可取的。我这里采用的策略是预生成,也就是说,我先生成了一个名为&code&elements&/code&的容器,之后在谱面解析时、对一个一个节奏点的循环中去生成元素&code&element&/code&,并按照它们的拍数去计算相对位置,然后将它们放入&code&elements&/code&中:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&element&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&Element&/span&&span class=&p&&(&/span&&span class=&nx&&textures&/span&&span class=&p&&[&/span&&span class=&err&&`&/span&&span class=&nx&&elements&/span&&span class=&o&&-&/span&&span class=&nx&&$&/span&&span class=&p&&{&/span&&span class=&nx&&type&/span&&span class=&p&&}&/span&&span class=&err&&`&/span&&span class=&p&&],&/span& &span class=&nx&&beats&/span&&span class=&p&&,&/span& &span class=&nx&&diam&/span&&span class=&p&&);&/span&
&span class=&kr&&const&/span& &span class=&nx&&diffBeats&/span& &span class=&o&&=&/span& &span class=&nx&&start&/span& &span class=&o&&+&/span& &span class=&nx&&preBeats&/span&&span class=&p&&;&/span&
&span class=&nx&&center&/span& &span class=&o&&+=&/span& &span class=&nx&&diffBeats&/span& &span class=&o&&*&/span& &span class=&nx&&diam&/span&&span class=&p&&;&/span&
&span class=&nx&&element&/span&&span class=&p&&.&/span&&span class=&nx&&x&/span& &span class=&o&&=&/span& &span class=&nx&&center&/span& &span class=&o&&-&/span& &span class=&nx&&radius&/span&&span class=&p&&;&/span&
&span class=&nx&&preBeats&/span& &span class=&o&&=&/span& &span class=&nx&&beats&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&&code&Element&/code&是我自己定义的一个类,其通过类型、拍数和直径绘制出一个元素,绘制原理本质上也很简单,如果&code&beats&/code&为1,即一拍的元素,则直接当做一个&code&Sprite&/code&处理,如果是多拍的元素,则套上一个容器,在内部利用&code&Graphics&/code&画好白色的外框背景,然后再把一个&code&Sprite&/code&放到背景上即可。绘制好了之后便要调整她的位置,由于只有一个维度的运动,所以只需要调整&code&x&/code&的值。我是用了一个&code&center&/code&变量来存储每个元素中心的位置,利用中心同步而非边缘有利于降低心智负担,其中&code&radius&/code&和&code&diam&/code&是元素的半径,这个是可以调整的,&code&preBeats&/code&是上一个元素的拍数,&code&start&/code&是此元素距离上一个元素结束时的拍数,通过这样不断的循环计算,我们便可以得到一个&code&element&/code&的序列,在实际运行时,运动的实际上是外层的容器,而不是元素自身,这样也减少了计算和更新的逻辑。&/p&&p&至此,元素序列条本身的绘制已然完成,但如果仅仅如此,当这个序列条的容器运动时,元素还是会越过判定框,没有符合&b&进洞&/b&这个效果的预期。为了实现这一点,我是用了&code&mask&/code&这个属性:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&nx&&elementsContainer&/span&&span class=&p&&.&/span&&span class=&nx&&addChild&/span&&span class=&p&&(&/span&&span class=&nx&&elementsMask&/span&&span class=&p&&);&/span&
&span class=&nx&&elementsContainer&/span&&span class=&p&&.&/span&&span class=&nx&&addChild&/span&&span class=&p&&(&/span&&span class=&nx&&elements&/span&&span class=&p&&);&/span&
&span class=&nx&&elementsContainer&/span&&span class=&p&&.&/span&&span class=&nx&&mask&/span& &span class=&o&&=&/span& &span class=&nx&&elementsMask&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&创建一个更顶层的容器&code&elementsContainer&/code&,将&code&elements&/code&作为child加入其中,之后对其设置一个&code&mask&/code&。容器的位置固定,和轨道的宽高一致,而&code&mask&/code&本身是一个&code&Graphics&/code&,其形状为一个半圆和一个长方形的拼接,直接将判定框以及其右侧的轨道纳入其中。如此一来,&code&elements&/code&这个序列条超出判定框左侧的内容将不会被展示,这样就达到了一个“进洞”的效果。&/p&&p&以上三部分完成后,便可以考虑第四部分的实现。第四部分本质上是一个光罩和其上的星星,光罩没什么特别的,就是一个&code&Sprite&/code&,而星星则是一个序列帧动画,这个可以用&code&PIXI.extras.AnimatedSprite&/code&实现。这二者的绘制和定位非常简单,唯一的麻烦在于如何让它们配合每一次的判定结果进行显示——即玩家命中后会有发光和星星散出的效果。这里有两种方案备选:其一,在命中时再去设置光罩和星星的&code&visiable&/code&属性,并开始播放星星的动画,这种方式要频繁触发&b&播放&/b&动作,需要进行变动的地方也较多;其二,将这两部分放入一个容器中,初始化完毕后不变动它们,而是变动容器的&code&visiable&/code&属性,这意味着星星始终在闪,只不过由外层的容器控制它是否可见,这里也有一个潜在的问题——加入在切换容器显示状态时,动画只播了一半怎么办?所以这种控制实际上虽然简单,但不精确。我最终选择了第二种方案,虽然有风险,但考虑星星播放速度较快,并且切换也足够迅速,人眼几乎无法觉察,所以这个障眼法可行。&/p&&h2&动起来&/h2&&p&准备工作做完,便要考虑如何让序列条动起来了。上面讲到过,序列中元素的运动其实就是其外层容器的运动,所以我只需要在游戏过程中不断根据时间修改容器的&code&x&/code&即可,而时间,实际上是由一个计时器&code&ticker&/code&驱动的:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&ticker&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&PIXI&/span&&span class=&p&&.&/span&&span class=&nx&&ticker&/span&&span class=&p&&.&/span&&span class=&nx&&Ticker&/span&&span class=&p&&();&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&ticker&/span&&span class=&p&&.&/span&&span class=&nx&&add&/span&&span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&update&/span&&span class=&p&&);&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&ticker&/span&&span class=&p&&.&/span&&span class=&nx&&start&/span&&span class=&p&&();&/span&
&/code&&/pre&&/div&&p&这段代码中,我创建了一个&code&ticker&/code&,而后在其中注册了一个回调&code&update&/code&,最后启动它,开始计时。之后在计时器的每一次更新时,它都回去调用&code&update&/code&,我便在其中更新容器的&code&x&/code&:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&preTime&/span& &span class=&o&&=&/span& &span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&currentTime&/span&&span class=&p&&;&/span&
&span class=&kr&&const&/span& &span class=&nx&&diffTime&/span& &span class=&o&&=&/span& &span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&ticker&/span&&span class=&p&&.&/span&&span class=&nx&&elapsedMS&/span&&span class=&p&&;&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&currentTime&/span& &span class=&o&&+=&/span& &span class=&nx&&diffTime&/span&&span class=&p&&;&/span&
&span class=&kr&&const&/span& &span class=&nx&&diff&/span& &span class=&o&&=&/span& &span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&pixelsPerMs&/span& &span class=&o&&*&/span& &span class=&nx&&diffTime&/span&&span class=&p&&;&/span&
&span class=&nx&&elements&/span&&span class=&p&&.&/span&&span class=&nx&&x&/span& &span class=&o&&-=&/span& &span class=&nx&&diff&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&其中&code&this.ticker.elapsedMS&/code&为距离上一次回调经过的时间,而&code&this.pixelsPerMs&/code&是一个定量,表示容器每毫秒需要移动的像素值,它是在元素序列被初始化完毕时计算的。如此便可以完成容器位置的更新,不过需要注意的是当浏览器被切出时,&code&ticker&/code&的计时将会&b&休眠&/b&,在这个过程中,虽然其计时没有停止,但将不会触发回调。当再次切回页面时,回调会再次被触发,但此时的&code&this.ticker.elapsedMS&/code&将会是一个很大的值,这对于本MUG是无法接受的,所以我这里用了一个相对粗暴的手段——直接弹出提示让玩家重新开始。这也是无奈之举,如果有更好的方案请务必告诉我。&/p&&h2&玩家输入&/h2&&p&玩家输入指的便是开始说过的那六种操作——左按钮、右按钮、一起按,以及这三个的长按模式。将这六种操作映射到玩家这边的两个按钮、两对事件(分别的&code&touchstart&/code&和&code&touchend&/code&)上,并不是一件特别简单的事情,会涉及到一个稍显复杂的状态机。&/p&&p&首先我们定义&b&原始输入&/b&,&b&原始输入&/b&指的通过监听玩家对两个按钮的&code&touchstart&/code&和&code&touchend&/code&事件得到的输入。在这一步,程序将会对玩家的输入进行预处理,将其处理为&b&左按开始&/b&、&b&左按结束&/b&、&b&右按开始&/b&、&b&右按结束&/b&、&b&同时按开始&/b&、&b&同时按结束&/b&,来为下一步处理做准备。其具体的实现见状态机:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-3d49a12e0c1d9e3a3e975e094932bba3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&951& data-rawheight=&471& class=&origin_image zh-lightbox-thumb& width=&951& data-original=&https://pic3.zhimg.com/v2-3d49a12e0c1d9e3a3e975e094932bba3_r.jpg&&&/figure&&p&&br&&/p&&p&当接收到玩家对某个按钮的输入后,先缓存输入状态,将其保存为一个类的属性中,之后合理利用&code&setTimeout&/code&函数,在delta时间(这个时间自行调整,此处为30ms,基本是两个主循环周期)后做一次延迟判断,如果在这段时间内玩家没有另一个按钮的输入、还保持着这个操作的状态,则直接触发其对应按钮的全局事件(这个全局事件是本游戏状态同步机制的基础,下面会细说)。但如果在delta时间内,用户又触发了另一个按钮的操作,则在另一个按钮的事件回调中先获取当前缓存的输入状态,此时可以检测到在短短时间内,玩家前后对两个按钮触发了&code&touchstart&/code&或者&code&touchend&/code&事件,这在宏观上可以等价为用户同时触发了两个按钮的相同事件,那么此时我就可以将两个事件合并成一个事件,触发全局的&b&同时touchstart&/b&或者&b&touchend&/b&事件。&/p&&p&这一段可能有点晕,但原理其实很简单。比如,玩家按了左按钮,并且delta内没有其他操作,则触发&b&左按钮的touchstart&/b&的全局事件;如果delta内玩家又按了右按钮,则触发&b&一起按的touchstart&/b&事件。&/p&&p&合并了玩家的输入后,便可以进入下一步的判定,从而真正实现输入和六种操作的映射,这将会在下一节说到。&/p&&h2&背景和前景人物动画&/h2&&p&在具体的判定逻辑分析之前,让我们来点轻松的——画面中随着玩家输入而动的22、33是如何实现的呢?其实并不复杂,合理运用序列帧动画&code&AnimatedSprite&/code&和补间动画库&code&Tween.js&/code&便可。&/p&&p&22和33分别都是一个&code&AnimatedSprite&/code&,只需要按照其规范初始化和定位即可,但其中33需要特别注意,细心的玩家应该注意到了她所持烤箱的盖子其实是和她一体化的——这是为了在后续食物喷射出的时候,让食物能处于烤箱和盖子之间。所以33和背景上烤箱的定位其实有一定的耦合关系。&/p&&p&初始化只是第一步,要让22和33能响应玩家的输入做出动作,就要实现一个跟随玩家输入播放/停止动画的逻辑。我实现了&code&act22&/code&和&code&act33&/code&方法来完成这个逻辑,以22的为例:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&public&/span& &span class=&nx&&act22&/span&&span class=&p&&(&/span&&span class=&nx&&mode&/span&&span class=&o&&:&/span& &span class=&s1&&'start'&/span& &span class=&o&&|&/span& &span class=&s1&&'end'&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&mode&/span& &span class=&o&&===&/span& &span class=&s1&&'start'&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&playing&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&loop&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&.&/span&&span class=&nx&&play&/span&&span class=&p&&();&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&playing&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span& &span class=&k&&else&/span& &span class=&p&&{&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&loop&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span& &span class=&o&&=&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这里的&code&mode&/code&参数对应前面合成时间中的&code&touchstart&/code&和&code&touchend&/code&(以及&code&touchendoutside&/code&),22对应左按钮,33对应右按钮,一起按的操作则两个都对应。可以看到,这里本质上是利用&code&AnimatedSprite&/code&的&code&play&/code&方法来控制播放的,如果输入只有短按一种,那么每次在&code&touchstart&/code&的时候直接调用&code&play&/code&方法即可,但输入不止短按,还有长按,而长按时我的设计是让动画不断loop,当&code&touchend&/code&的时候取消loop即可。一个显而易见的方法是利用&code&AnimatedSprite&/code&自身的&code&loop&/code&属性和其&code&stop&/code&方法、&code&onComplete&/code&回调方法进行控制,然而这种方式在当前版本的PIXI下会出现难以理解的行为(我认为这是一个bug),所以必须用替代方案。我这里是利用一个自己保存的&code&this.loop&/code&属性结合&code&AnimatedSprite&/code&的&code&onLoop&/code&回调方法,来实现一个自定义的&code&loop&/code&方案,并使用&code&this.playing&/code&方法来防治动画播放过程中用户的意外输入:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&.&/span&&span class=&nx&&loop&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&.&/span&&span class=&nx&&onLoop&/span& &span class=&o&&=&/span& &span class=&p&&()&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&loop&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span&&span class=&p&&.&/span&&span class=&nx&&stop&/span&&span class=&p&&();&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&playing&/span&&span class=&p&&.&/span&&span class=&nx&&two&/span& &span class=&o&&=&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&如此一来,便实现了22和33响应用户输入的功能。除此之外,还有一个在fever状态下、33拉烤箱门时同时喷射食物的效果,食物总共有五种,需求是随机选取其中的一个喷射而出,喷射位置也最好有所不同。我的做法是建立一个用于容纳食物的容器,当进入fever状态后,在触发33动画的同时调用一个&code&actFood&/code&方法,在这个方法中,我先随机取出五种食物中的一种texture,之后生成其对应的&code&Sprite&/code&,,为其指定初始位置和大小,将其添加到食物的容器中。之后用&code&Tween.js&/code&生成一个&code&Tween&/code&对象,为其添加变换位置(&code&x&/code&和&code&y&/code&,从预定义目标位置集合中随机选取)和大小(&code&scale&/code&)的动画,然后在&code&onComplete&/code&回调中将其从容器中移除即可:&/p&&div class=&highlight&&&pre&&code class=&language-ts&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&tw&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&TWEEN&/span&&span class=&p&&.&/span&&span class=&nx&&Tween&/span&&span class=&p&&({&/span&&span class=&nx&&x&/span&: &span class=&kt&&food.x&/span&&span class=&p&&,&/span& &span class=&nx&&y&/span&: &span class=&kt&&food.y&/span&&span class=&p&&,&/span& &span class=&nx&&scale&/span&: &span class=&kt&&food.scale.x&/span&&span class=&p&&})&/span&
&span class=&p&&.&/span&&span class=&nx&&to&/span&&span class=&p&&({&/span&&span class=&nx&&x&/span&: &span class=&kt&&end.x&/span&&span class=&p&&,&/span& &span class=&nx&&y&/span&: &span class=&kt&&end.y&/span&&span class=&p&&,&/span& &span class=&nx&&scale&/span&: &span class=&kt&&food.scale.x&/span& &span class=&o&&*&/span& &span class=&mi&&2&/span&&span class=&p&&},&/span& &span class=&mi&&500&/span&&span class=&p&&)&/span&
&span class=&p&&.&/span&&span class=&nx&&onUpdate&/span&&span class=&p&&(({&/span&&span class=&nx&&x&/span&&span class=&p&&,&/span& &span class=&nx&&y&/span&&span class=&p&&,&/span& &span class=&nx&&scale&/span&&span class=&p&&})&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&nx&&food&/span&&span class=&p&&.&/span&&span class=&nx&&x&/span& &span class=&o&&=&/span& &span class=&nx&&x&/span&&span class=&p&&;&/span&
&span class=&nx&&food&/span&&span class=&p&&.&/span&&span class=&nx&&y&/span& &span class=&o&&=&/span& &span class=&nx&&y&/span&&span class=&p&&;&/span&
&span class=&nx&&food&/span&&span class=&p&&.&/span&&span class=&nx&&scale&/span&&span class=&p&&.&/span&&span class=&nx&&x&/span& &span class=&o&&=&/span& &span class=&nx&&scale&/span&&span class=&p&&;&/span&
&span class=&nx&&food&/span&&span class=&p&&.&/span&&span class=&nx&&scale&/span&&span class=&p&&.&/span&&span class=&nx&&y&/span& &span class=&o&&=&/span& &span class=&nx&&scale&/span&&span class=&p&&;&/span&
&span class=&p&&})&/span&
&span class=&p&&.&/span&&span class=&nx&&onComplete&/span&&span class=&p&&(()&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&foods&/span&&span class=&p&&.&/span&&span class=&nx&&removeChild&/span&&span class=&p&&(&/span&&span class=&nx&&food&/span&&span class=&p&&);&/span&
&span class=&p&&})&/span&
&span class=&p&&.&/span&&span class=&nx&&start&/span&&span class=&p&&();&/span&
&/code&&/pre&&/div&&h2&操作判定&/h2&&p&好,让我们回到用户输入到操作判定的逻辑。在前面,程序已经完成了对用户输入的合并,那么接下来这一步就是对已经合并的输入进一步处理了。在这一步,用户输入将会被转为&code&miss&/code&、&code&good&/code&或者&code&perfect&/code&的判定,而这个判定对于短按和长按元素的逻辑又不相同,我们来一个一个分析:&/p&&h2&判定流程&/h2&&p&首先理清整个判定的流程,如下图:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-edf12f626a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&985& data-rawheight=&581& class=&origin_image zh-lightbox-thumb& width=&985& data-original=&https://pic3.zhimg.com/v2-edf12f626a_r.jpg&&&/figure&&p&&br&&/p&&p&元素序列条随着时间的推进不断更新位置,而在更新的同时,玩家或者程序自发(这个后面会说到)触发输入事件,去诱发判定逻辑,在判定结束后视情况更新玩家本次游戏状态,然后将当次判定过的元素从队列中移除......如此如此,进入一次又一次的判定循环。&/p&&p&&b&1. 取出要判定元素&/b&&/p&&p&判定的第一步是要得知接下来要判定的是短按还是长按,由于已然判定过的元素会被从队列中移除,所以当下从队列中取出的第一个元素一定是接下来要判定的新元素,而这个新元素中有它自身的所有属性,其中一个就是&code&beats&/code&属性——它决定着当前元素的长度,若为1,则按照短按判定,否则按照长按判定。&/p&&p&&b&2. 对操作进行判定&/b&&/p&&p&若按照短按判定,那么很简单,首先,程序将比较当前输入事件的&b&操作&/b&是否和待判定元素的&code&type&/code&一致(比如元素&code&type&/code&为&code&0&/code&对应左按,那它对应的输入类型就是左按钮的&code&touchstart&/code&事件,在本游戏中我设定为&code&MAGIC.FIRE_START&/code&),之后在将当前游戏时间(即前文所示的&code&this.currentTime&/code&)和元素的&code&start&/code&和&code&end&/code&属性进行比对,在距离中心&code&±1/4&/code&的时间差内时,判定为&code&perfect&/code&,在&code&±1/2&/code&的时间差内时,判定为&code&good&/code&。如果时间差在范围内但类型不对,则判定为&code&miss&/code&。&/p&&p&长按判定比起短按要复杂许多。程序维护一个状态&code&actionPre&/code&,这个状态用于存储上一个输入,而输入分别为三种操作的&code&start&/code&和&code&end&/code&。当接收到&code&start&/code&输入时,先判定其是否和当前元素的&code&type&/code&一致,如果一致则直接将状态存储下来,否则忽略。而当接收到&code&end&/code&输入时,首先也判定是否和当前元素的&code&type&/code&一致,倘若是则进入下一轮判断,否则忽略。下一轮判断对比的是当前输入的&code&type&/code&和&code&actionPre&/code&中存储的&code&type&/code&是否一致,如果是,则表明它们是同一类型操作的开始和结束,这也正好描述了一个“长按”的过程,如果不是,则说明此次长按失败,判定为&code&miss&/code&。&/p&&p&长按的&code&good&/co

我要回帖

更多关于 虚发笢宒蚾党嘉婘呗 的文章

 

随机推荐