精华内容
下载资源
问答
  • 新买的手机不管怎么流畅,一旦用...华为手机返回键怎么调整华为手机的返回键需要在设置中将手势模式切换。下面用华为P40手机(系统版本:EMUI10.1)为例说明具体的操作方法:1、在华为P40手机上打开【设置】菜单,下拉...

    新买的手机不管怎么流畅,一旦用的时间长了之后不清理内存,手机就会越来越卡,为避免手机速度变慢,有必要及时清理,让软件缓存对手机使用不造成影响,。那么下面就让我们来看一下华为手机返回键怎么调整?华为手机怎么设置返回键?

    华为手机返回键怎么调整

    华为手机的返回键需要在设置中将手势模式切换。下面用华为P40手机(系统版本:EMUI10.1)为例说明具体的操作方法:

    1、在华为P40手机上打开【设置】菜单,下拉到底部选择【系统】。

    2、在【系统】菜单中打开【系统导航】选项,点击选择【屏幕内三键导航】即可。

    3、点击下方的【更多设置】,根据实际需要选择导航键组合(默认为左返回、中退回主屏幕、右进入多任务管理)。

    4、如果在设置中显示已经开启了【屏幕内三键导航】,但屏幕底部并没有出现导航键,可能是用户设置了自动隐藏功能,可以尝试从屏幕底部上滑恢复显示。

    华为手机怎么设置返回键

    1.在华为手机主界面点击设置进入设置界面;

    2.在设置主页最下方找到【智能辅助】设置;

    3.在智能辅助设置中选择【系统导航方式】;

    4.在系统导航方式中选择【屏幕内三键导航】即可!

    在华为手机中大家可以进行按键设置,虚拟按键就是很多人喜欢的一个设定,那么具体怎么进行返回按键设置呢?所以以上小编就为大家带来了华为手机返回键怎么调整?华为手机怎么设置返回键?希望对大家有所帮助。

    展开全文
  • 华为怎么把返回那三个调出来

    千次阅读 2021-01-14 14:44:30
    华为怎么把返回那三个键调出来 其实这个方法一点都不难...勾选屏幕内虚拟导航后,我们点击下面的【更多设置】,可以设置虚拟导航按键组合,5、选择三角形返回键在右边的导航键组合即可。华为nova6下面的返回键要怎么...

    华为怎么把返回那三个键调出来 其实这个方法一点都不难

    1、首先在华为nova3的桌面找到【设置】,并点击进入,

    2、点击打开【系统】,

    3、在系统菜单下,点击进入【系统导航】,

    4、点击勾选【屏幕内虚拟导航栏】即可打开虚拟导航,不勾选即可直接关闭虚拟导航。勾选屏幕内虚拟导航后,我们点击下面的【更多设置】,可以设置虚拟导航按键组合,

    5、选择三角形返回键在右边的导航键组合即可。

    华为nova6下面的返回键要怎么设置的操作方法

    1、打开桌面的设置图标,下滑至底部,点击【系统和更新】选项。

    2、点击进入【系统导航方式】。

    3、点击勾选【屏幕内三键导航】。

    4、点击【更多设置】,选择符合自己使用的导航键组合,三角形按键即是返回键。

    华为手机升级后没有屏幕内导航键,怎么操作?怎么调出三角键导航

    什么是全面屏导航,怎样操作

    全面屏幕导航,是华为8.0以后加入的一个新的功能,全手势操作,不显示按键。可以降低按键占屏幕的比例节省屏幕空间。

    全面屏手势的操作方法。

    返回桌面:从屏幕底部往上轻轻滑动。

    返回上一级:从屏幕左侧或右侧边缘往屏幕内滑动

    调出多任务后台程序:从屏幕底部中间往上滑动后稍微停顿。

    语音助手和智慧视觉:需要打开这个开关,然后在屏左侧可调出语音助手,右侧可以调出智慧视觉,也就是扫描,智能识物等功能。

    不习惯全面屏手势怎么调回三角键导航

    不习惯全面屏手势也可以调回三角键导航的。

    打开手设置

    找到屏底部的“系统”这里包含了屏幕导航设置

    点开系统导航

    选择你喜欢的导航方式,一般以往的导航是第三个屏内三角键导航。

    最近很多人找我帮调节,希望这篇文章帮到你。

    华为mate30返回键在哪设置怎么调出来 怎么设置到右边

    首先打开华为手机系统【设置】,然后点击底部【系统】-【系统导航方式】-【屏幕内三键导航】即可开启虚拟导航栏,就可以看到返回键了;

    点击【更多设置】,还可以选择导航键的组合模式哦。

    2019全球公认拍照最好用10大手机

    2019全球公认拍照最好用10大手机

    1.Galaxy Note10+ 5G版

    屏幕:6.8英寸AMOLED屏幕材质,开孔全面屏设计,分辨率3040x1440,屏占比92.24%,像素密度498ppi。

    前置摄像头:1000万像素,F2.2光圈。

    后置摄像头:1200万像素广角镜头,F1.5-F2.4智能可变光圈+1600万像素超广角镜头, F2.2 光圈+1200万像素长焦镜头,F2.1光圈+3D景深摄像头,F1.4光圈。支持OIS光学防抖,支持光学变焦2倍,数码变焦高达10倍。

    视频拍摄:支持UHD 4K(3840 x 2160)@60fp、HD1080P @960fps、FHD720P @240fps视频录制。

    处理器:高通骁龙855处理器,7nm制程工艺,八核Kryo 485(1×2.84GHz+3×2.42GHz+4×1.80GHz)架构设计;GPU方面,搭载Adreno 640 585MHz图形处理器。

    存储:12GB+256GB,最高支持1TB扩展存储。

    电池:4300mAh,最高支持25W快充。

    2.华为P30 Pro

    屏幕:6.47英寸OLED屏幕材质,水滴(官方称之为珍珠全面屏)全面屏设计,分辨率2340x1080,屏占比88.61%,像素密度398ppi。

    前置摄像头:3200万像素,f/2.0光圈。

    后置徕卡四摄:4000万像素超感光摄像头,f/1.6光圈,支持OIS防抖+2000万像素超广角摄像头,f/2.2光圈+800万像素超级变焦摄像头,f/3.4光圈,支持OIS+华为ToF摄像头,支持AIS防抖。支持5倍光学变焦(5倍变焦为近似值,镜头焦段分别为16mm,27mm,125mm)、10倍混合变焦(三个摄像头通过不同组合实现各种环境下出色的10倍变焦效果)、50倍数字变焦。

    视频拍摄:支持4K(3840*2160)、720p@960fps视频录制 。前置摄像头:最大支持FHD+(2160*1080)视频录制,不支持光学防抖。

    处理器:海思麒麟980处理器,7nm制程工艺,双核A76主频2.6GHz+双核A76主频1.92GHz+四核A55主频1.8GHz八核架构设计;GPU方面,搭载Mali-G76 MP10720MHz图形处理器。

    存储:12GB RAM+256GB ROM,最高支持256GB扩展存储。

    存储:8GB+128GB、8GB+256GB、8GB+512GB,最高支持256GB扩展存储。

    电池:4200mAh,最高支持40W快充。

    3.荣耀20 PRO

    屏幕:6.26英寸TFT LCD屏幕材质,开孔全面屏设计,分辨率2340x1080,像素密度412ppi。

    前置摄像头:3200万像素,f/2.0光圈。

    后置摄像头:4800万像素,f/1.4光圈 ,支持OIS+1600万像素,f/2.2光圈+800万像素,f/2.4光圈,OIS+200万像素,f/2.4光圈 ,支持自动激光对焦。支持3倍光学变焦,30倍数字变焦。

    视频拍摄:最大支持4K(3840×2160)视频录制,支持720p@960fps录制。

    处理器:海思麒麟980处理器,参数与上述华为P30 Pro一致。

    存储:8GB+128GB、8GB+256GB。

    电池:4000mAh,最高支持22.5W快充。

    4.华为Mate 20 Pro

    屏幕:6.39英寸OLED屏幕材质,刘海屏设计,分辨率3120x1440像素,屏占比88.02%,像素密度538 PPI。

    前置摄像头:支持3D深度感知相机2400万像素,f/2.0光圈。

    后置徕卡三摄:4000万像素广角镜头,f/1.8光圈)+2000万像素超广角镜头,f/2.2光圈+800万像素长焦镜头,f/2.4光圈。支持激光对焦,支持AIS防抖。支持3倍光学变焦(3倍变焦为近似值,实际等效焦距为27mm-80mm)、5倍混合变焦(三个摄像头通过不同组合实现各种环境下出色的5倍变焦效果)、10倍数字变焦 。

    视频拍摄:最大支持4K(3840*2160)视频录制、720p@960fps视频录制 。

    处理器:海思麒麟980处理器,参数与上述荣耀20 PRO一致。

    存储:6GB+128GB、8GB+128GB、8GB+256GB,最高支持256GB存储。

    电池:4200mAh,最高支持40W快充。

    5.三星Galaxy S10+

    屏幕:6.39英寸AOLED屏幕材质,开孔屏设计,分辨率3040 x 1440像素,屏占比87.54%,像素密度526ppi。

    前置摄像头:1000万像素,F1.9光圈+800万像素,F2.2光圈。

    后置摄像头:1600万像素超广角,f/2.4光圈+1200万像素长焦,f/2.4光圈+1200万像素广角,f/1.5–2.4可变光圈。支持光学变焦2倍,数码变焦高达10倍。

    视频拍摄:支持UHD 4K(3840 x 2160)@60fp、HD1080P @960fps、FHD720P @240fps视频录制。

    处理器:高通骁龙855处理器,参数与Galaxy Note10+ 5G一致。

    存储:8GB+128GB、8GB+512GB、8GB+1TB,最高支持512GB扩展存储。

    电池:4100mAh,标配15W快充。

    全球知名的DxoMark拍照排行榜上,目前排名第一的是三星Note10+ 5G版,以总分113分的综合成绩击败华为P30 pro登顶世界第一。三星note10+的具体得分情况为后置拍照118分,视频101分,前置99分无敌。期待华为新机mate30系列的表现,不出意外的话应该会重返第一宝座。

    值得一提的是,三星Note10+的后置四摄最高才1600万像素(超广角镜头),主摄依旧是万年1200万像素(F1.5/2.4智能可变光圈)。相比市面上的4800万像素、6400万像素,三星略显寒酸,不过凭借神仙算法和优化,愣是吊打了众生。另外需要说明,三星note10+使用的摄像头并非索尼,而是三星自家的传感器。

    其次是华为P30pro,主打未来影像,拍照有多强大家有目共睹,手机发布会差点成了相机发布会,更是嘲讽三星S10拍不出银河。P30pro后置超感光莱卡四摄,主摄4000万像素索尼IMX650,拥有1/1.7英寸的超大底,支持10倍混合变焦,50倍数码变焦,堪称望远镜。华为P30pro是目前拍照最强的手机之一,这应该是没有争议的。

    再来说说新款iPhone,最大的改变就是后置浴霸三摄,十分显眼。不过目前iPhone 11系列的具体拍照得分还没有出来,但是不难猜测这次苹果在相机上是花了不小的功夫, 提升巨大是必然的。主摄依旧是1200万像素,但是苹果厉害的地方在于三个摄像头能够同时运作,流畅切换,光这点国产就要追很久了。

    可以大胆预测,今年拍照最强的三款手机分别是:三星Note10+ 5G版、iPhone11 pro max,以及华为Mate30 pro。

    019全球手机拍照排名:国内两款手机并列第一

    由目前市场的整体结构来看,现在很多手机厂商对于摄像头配置方面都进行了创新的发展,市面上已经很少再见到单摄手机,更多的出现是三摄、四摄、五摄手机。

    关于手机方面的推广,各大品牌厂商也将自己家的产品往好的方向去吹捧。但是关于真正的情况却需要消费者进行购买之后才能进行真实的了解。

    而最近一段时间,DxoMark方面在近期也随着手机方面的更新进行了更新数据,这不得不让很多想要进行购买新手机的消费者们感到十分的舒心。

    在排行榜当中我们可以看到,排行榜并列第一的是小米CC9 Pro和华为Mate 30 Pro,整体两款手机的排行数据分数是相同的,但是关于视频方面,小米CC9 Pro的设计方案却要比华为的Mate 30 Pro数据高出2分,而在其他方面,小米这款手机不仅得到了纹理第一的成绩,还得到了变焦第一的成绩。

    而这一次的排名对比,让小米内部也感到欢呼雀跃,雷军方面也对小米内部人员进行了嘉奖,关于摄像方面也成功让小米方面走向了另一个巅峰。

    另一方面,同为第1名的华为mate 30 Pro,是19年度华为旗下拍摄能力最好的手机,关于在影像系统方面也进行了大方面的升级,同时将电影镜头加入了主摄行列。

    小米蓝牙耳机恢复出厂设置

    小米蓝牙耳机恢复出厂设置

    给耳机充电

    耳机低电量的时候,会闪烁红灯和发出低电量语音提示,这时候需要给耳机进行充电。

    恢复出厂设置

    在充电状态下,长按多功能键至耳机指示灯红灯白灯交替闪烁,完成恢复出厂设置,再根据需要重新连接手机进行使用。

    由于不同蓝牙耳机的重置方法不同,建议翻阅蓝牙耳机的说明书;可以同时按住【电源】键和【音量+】键15秒;也可以将耳机开机,给耳机充电5-10秒;或者是长按耳机上的Reset按钮;如果是AirPods,可以把耳机放入充电盒长按外壳上的小按钮。以下是详细介绍:

    1、不同蓝牙耳机的重置方法不同,建议翻阅蓝牙耳机的说明书,查看详细的蓝牙耳机重置的方法;

    2、如果蓝牙耳机上是有电源键和两个音量键的设计,可以同时按住【电源开关】键和【音量+】键15秒,随后蓝牙耳机会自动恢复出厂设置并关闭,重启后就可以使用;

    3、可以尝试先将耳机开机,插上数据线给耳机充电5-10秒。若在耳机开机状态下充电,部分耳机会自动关机并被强制恢复出厂设置;

    4、检查一下耳机是否有Reset按钮,尝试长按此键5-10秒,可能会有指示灯闪烁等提示;

    5、苹果AirPods可以在外壳背部找到小按钮,按住外壳的小按钮直到指示灯闪烁橙色几次,然后闪烁白色,这表示AirPods已重置。

    很多朋友在使用蓝牙耳机之后,发现设备有问题想把蓝牙耳机恢复出厂设置,但不知道怎么恢复,下面就让佳佳来教一下大家。

    小米蓝牙耳机低电量时闪烁红灯和发出低电量语音提示,这时需给蓝牙耳机充电,在充电状态下,长按多功能键至耳机指示灯红灯白灯交替闪烁,即可完成恢复出厂设置,再根据需要重新连接手机即可,在蓝牙耳机关机状态下,长按耳机多功能键按键,直到蓝色闪烁表示蓝牙耳机进入配对状态,打开手机蓝牙进行搜索,找到小米蓝牙耳机,点击配对即完成小米蓝牙耳机恢复出厂设置操作。

    展开全文
  • 原标题:没有home的iPhone XS怎么进入恢复模式?我教你 距离 iPhone XS 和 iPhone XS Max 开售已经有一段时间,而 iPhone XR 也即将开卖。从今年发布的三款新机可以看到苹果正式进入了全面屏时代,Home 将不复...

    原标题:没有home键的iPhone XS怎么进入恢复模式?我教你

    距离 iPhone XS 和 iPhone XS Max 开售已经有一段时间,而 iPhone XR 也即将开卖。从今年发布的三款新机可以看到苹果正式进入了全面屏时代,Home 键将不复存在,全部改用手势和侧边电源键来取代原有的 Home 键功能,假如你是刚从 iPhone 7、iPhone 8 和iPhone 8 Plus 或更早的 iPhone 更换新款无 Home 键的 iPhone 用户,那一定会很好奇没有了 Home 键要如何关机、强制重开机和进入 恢复 模式?不用担心,GeekBar 来告诉你。

    侧边电源键取代 Home 键

    不管是使用 iPhone XS、iPhone XS Max 或是 iPhone XR 操作都完全相同,另还可以搭配音量键 “+” 与音量键 “-” 来实现功能。

    Home 键的功能并没有消失,而是转移到了侧边电源键上,设计上也变的更长更容易按压,不过我们还可以发现到萤幕最底会有一根白线条,称为 Home Indicator ,在进行手势控制的就会显示,如太久没触碰就会自动隐藏。

    iPhone XS/XR/XS Max「关机」教学

    方法 1

    在「设置」→「通用」滑到最底会看见「关机」按钮。

    方法 2

    快捷键是按「侧边电源键」+「音量降低键 “-” 」或「音量增加键 “+” 」约两秒,就可唤出关机功能,另外还会出现 SOS 紧急联络选项。(你也可以通过连续点按 5 次电源键的方法唤出 “SOS 紧急联络” 选项)

    iPhone XS/XR/XS Max「开机」教学

    方法 1

    按压一下「侧边电源」就能够开机。

    方法 2

    关机状态下,如果电量足够,只要接上 Lightning 转 USB 传输线充电后就会立即自动开机。

    iPhone XS/XR/XS Max「强制重新开机」教学

    按压一下「音量增加键 “+” 」键。

    (不用持续压住)

    按压一下「音量降低键 “-” 」键。

    (不用持续压住)

    最后长按压机身右侧的「侧边电源键」约10秒后,直到萤幕变暗,出现 Apple Logo 再放开。

    注意:三个步骤都要在音量图案消失前按完,就可强制重开机。如死机或卡顿导致屏幕无法触碰和看不见画面呈现黑屏时,就通过以上步骤实现强制重开机。

    iPhone XS/XR/XS Max 进入恢复模式

    将 iPhone XS/XR/XS Max 设备用数据线连上电脑,并打开 iTunes

    按压一下「音量增加键 “+” 」

    (不用持续压住)

    按压一下「音量降低键 “-” 」

    (不用持续压住)

    长按「侧边电源键」约10秒,直到 iPhone 屏幕变黑强制关机

    瞬速长按「音量降低键 “-” 」(电源键不要放开继续压住)约 5 秒后松开「侧边电源键」

    继续长按「音量降低键 “-” 」约10秒就会进入 恢复 模式,此时画面会是呈现黑色没讯息画面

    iTunes 上就会出现要替设备更新或恢复 iPhone 的提示画面,接下来你就可以选择恢复或者更新了。

    iPhone XS/XR/XS Max 退出恢复模式

    按压一下「音量增加键 “+” 」

    (不用持续压住)

    按压一下「音量降低键 “-” 」

    (不用持续压住)

    最后长按压机身右侧的「侧边电源键」约10秒后,直到萤幕变暗,出现Apple Logo在放开。

    iPhone XS/XR/XS Max 暂时停用 Face ID

    同时按住「侧边电源键」与「音量键增加(+)」不放

    点击「取消」按钮

    此时就会停用iPhone上的Face ID功能,只能通过 iPhone 解锁密码来解锁,输入解锁后就会启用 Face ID 功能。

    iPhone XS/XR/XS Max 开启 SOS 求救功能

    方法 1

    同时按压「侧边电源键」与「音量增加键 “+” 」不放

    看见「SOS紧急服务」功能滑动开来,就可立即启用 SOS 求救功能

    方法 2

    快速按下「侧边电源键」5 下即可启用 SOS 紧急服务功能。

    关于旧款 iPhone 如何开启 SOS 求救功能可以查看 GeekBar 相关推送 ↓

    GeekBar 建议大家

    遇到较大的系统更新

    尽量选择在电脑上备份

    或者在 iCloud 上备份

    然后进入 恢复 模式更新

    最后再进行恢复

    虽然直接在 iPhone 上

    OTA 更新比较方便

    但有几率出现各种问题

    及时备份保平安

    如果你有更多 iPhone 上的

    手势和按键操作小技巧

    欢迎在评论区与大家分享

    如果觉得今天的教程有所帮助

    记得在右下角点个赞哦!

    关注GeekBar

    及时获取手机使用技巧返回搜狐,查看更多

    责任编辑:

    展开全文
  • 命令模式·Design Patterns 1、命令模式的定义 命令模式的定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。让两者之间通过命令对象进行沟通,这样方便对命令对象进行存储、传递、调用、...

    命令模式·Design Patterns

    1、命令模式的定义

    命令模式的定义
    将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。让两者之间通过命令对象进行沟通,这样方便对命令对象进行存储、传递、调用、增加与管理。

    命令模式主要包含以下主要角色
    1、抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法Execute。
    2、具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接受者的功能来完成命令要执行的操作。
    3、实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。
    4、调用者/请求这(Invoker)角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,不直接访问接收者。

    其结构如下图所示:
    在这里插入图片描述
    该部分主要参考:命令模式详解,详情请点击该链接。

    二、自定义按键功能

    在《游戏设计模式》中,有提到使用命令模式来实现自定义游戏按键的功能。
    详情请点击该链接,命令模式·Design Patterns
    该功能的需求大致如下:
    (1)玩家可以自定义按键,如:A键原本绑定的是“跳跃”功能,可改为“开火”功能。
    (2)玩家可以撤销自己上一步的命令效果,如重复撤销,则会重做上一步的命令效果。如,玩家执行前进一格操作后,一次撤销会让他后退一格,二次撤销则会让他前进一格。如在撤销后在执行一次操作,则会清理储存好的命令列表。
    这里的话,强烈建议阅读完命令模式·Design Patterns之后,再看下一章。

    三、具体代码实现

    3.1、前置准备部分

    按键操作部分
    用于模拟按键被按下。

    //按键枚举
    enum BUTTON{
    	BUTTON_X,
    	BUTTON_Y,
    	BUTTON_A,
    	BUTTON_B,
    	BUTTON_CTRL_Z
    };
    //监测目标按键是否被按下
    bool IsPressed(BUTTON pressedButton,BUTTON targetButton){
    	if(pressedButton==targetButton)
    	{
    		switch (targetButton)
    		{
    			case BUTTON_X:
    				std::cout<<"Pressed the BUTTON_X"<<std::endl;
    				break;
    			case BUTTON_Y:
    				std::cout<<"Pressed the BUTTON_Y"<<std::endl;
    				break;
    			case BUTTON_A:
    				std::cout<<"Pressed the BUTTON_A"<<std::endl;
    				break;
    			case BUTTON_B:
    				std::cout<<"Pressed the BUTTON_B"<<std::endl;
    				break;
    			case BUTTON_CTRL_Z:
    				std::cout<<"Pressed the BUTTON_CTRL_Z"<<std::endl;
    				break;
    			default:
    				break;
    		}
    		return true;
    	}
    
    	return false;
    	
    }
    

    Actor类
    可以理解为Unreal中的Actor,就是一个作用物对象,后面用来创建多个玩家实例。
    类图如下:
    在这里插入图片描述
    代码如下:

    
    //作用物类
    class Actor{
    	public:
    		Actor(){
    		}
    		Actor(std::string name){
    			this->name=name;
    		}
    		Actor(const Actor& other){//拷贝构造函数(需name不为空时调用)
    			this->name=other.name;
    		}
    		virtual ~Actor(){//虚析构函数,防止派生类不释放基类成员变量
    		}
    		const std::string GetName(){
    			return name;
    		}
    		Actor* Clone(){//原型模型用于深拷贝
    			
    			return new Actor(*this);
    		}
    	private:
    		std::string name;
    };
    

    3.2、命令类部分

    抽象命令类
    用于派生具体命令类。为了让命令类可以作用于更多的actor,因此在Execute部分,选择传入一个Actor*。为了内存管理,重写了拷贝构造函数和赋值函数。因此代码会有些长。
    类图如下:
    在这里插入图片描述
    代码如下:

    
    //抽象命令类
    class Command{
    
    	public:
    	Command(){
    	}
    	Command(Actor* actor){
    		executeObject=actor;
    	}
    	//因为类中有指针,所以需要重写拷贝构造函数和赋值构造函数
    	Command(const Command &other){
    		executeObject=other.executeObject->Clone();
    	}
    	Command & operator =(const Command &other){
    		if(this==&other){
    			return *this;
    		}
    		delete executeObject;
    		executeObject=other.executeObject->Clone();
    		return *this;
    	}
    	virtual ~Command(){
    		delete executeObject;
    	}
    	//执行函数
    	virtual void Execute(Actor* actor){
    		executeObject=new Actor(*actor);
    	};
    	virtual Actor* GetExecuteObject(){
    		return executeObject;
    	}
    	//撤销
    	virtual void Undo()=0;
    	//原型模式,克隆
    	virtual Command* Clone(){return nullptr;}
    
    	protected:
    		Actor* executeObject;
    };
    

    具体命令类:
    抽象命令类的具体实现,现有:跳跃、开枪、切换武器、倾斜等四个命令。为了方便,这里将实现者角色直接使用了一个函数来实现。
    类图和抽象命令类基本一致,因此不画出。

    代码如下:

    
    //跳跃命令 具体命令
    class JumpCommand:public Command{
    	public:
    	JumpCommand()
    	{
    		
    	}
    	~JumpCommand(){
    
    	}
    	JumpCommand(const JumpCommand &other):Command(){
    		executeObject=other.executeObject->Clone();
    		
    	}
    	JumpCommand & operator =(const JumpCommand &other){
    		if(this==&other){
    			return *this;
    		}
    		delete executeObject;
    		executeObject=other.executeObject->Clone();
    		return *this;
    	}
    	public:
    	virtual void Execute(Actor* actor){
    		Command::Execute(actor);
    		Jump(actor);
    	}
    	//实施方
    	void Jump(Actor* actor){
    		std::cout<<actor->GetName()<<" -> Jumping"<<std::endl;
    	}
    	void Undo(){
    		std::cout<<executeObject->GetName()<<"  Undo Jumping"<<std::endl;
    	}
    	Command* Clone() override
    	{
    		return new JumpCommand(*this);
    	}
    
    };
    //开枪命令 具体命令
    class FireCommand:public Command{
    	public:
    	FireCommand(){
    
    	}
    	~FireCommand(){
    	}
    	FireCommand(const FireCommand &other):Command(){
    		executeObject=other.executeObject->Clone();
    	}
    	FireCommand & operator =(const FireCommand &other){
    		if(this==&other){
    			return *this;
    		}
    		delete executeObject;
    		executeObject=other.executeObject->Clone();
    		return *this;
    	}
    	public:
    	virtual void Execute(Actor* actor){
    		Command::Execute(actor);
    		FireGun(actor);
    	}
    	//实施方
    	void FireGun(Actor* actor){
    		std::cout<<actor->GetName()<<" -> FireGuning"<<std::endl;
    	}
    	void Undo(){
    		std::cout<<executeObject->GetName()<<"  Undo FireGuning"<<std::endl;
    	}
    	Command* Clone() override
    	{
    		return new FireCommand(*this);
    	}
    
    };
    //切换武器命令 具体命令
    class SwapWeaponCommand:public Command{
    	public:
    	SwapWeaponCommand(){
    
    	}
    	~SwapWeaponCommand(){
    
    	}
    	SwapWeaponCommand(const SwapWeaponCommand &other):Command(){
    		executeObject=other.executeObject->Clone();
    	}
    	SwapWeaponCommand & operator =(const SwapWeaponCommand &other){
    		if(this==&other){
    			return *this;
    		}
    		delete executeObject;
    		executeObject=other.executeObject->Clone();
    		return *this;
    	}
    	public:
    	virtual void Execute(Actor* actor){
    		Command::Execute(actor);
    		SwapWeapon(actor);
    	}
    	//实施方
    	void SwapWeapon(Actor* actor){
    		std::cout<<actor->GetName()<<" -> SwapWeaponing"<<std::endl;
    	}
    	void Undo(){
    		std::cout<<executeObject->GetName()<<"  Undo SwapWeaponing"<<std::endl;
    	}
    	Command* Clone() override
    	{
    		return new SwapWeaponCommand(*this);
    	}
    };
    //倾斜命令 具体命令
    class LurchCommand:public Command{
    	public:
    	LurchCommand(){
    
    	}
    	~LurchCommand(){
    
    	}
    	LurchCommand(const LurchCommand &other):Command(){
    		executeObject=other.executeObject->Clone();
    	}
    	LurchCommand & operator =(const LurchCommand &other){
    		if(this==&other){
    			return *this;
    		}
    		delete executeObject;
    		executeObject=other.executeObject->Clone();
    		return *this;
    	}
    	public:
    	virtual void Execute(Actor* actor){
    		Command::Execute(actor);
    		LurchIneffectively(actor);
    	}
    	//实施方
    	void LurchIneffectively(Actor* actor){
    		std::cout<<actor->GetName()<<" -> LurchIneffectivelying"<<std::endl;
    	}
    	void Undo(){
    		std::cout<<executeObject->GetName()<<"  Undo LurchIneffectivelying"<<std::endl;
    	}
    	Command* Clone() override
    	{
    		return new LurchCommand(*this);
    	}
    };
    
    

    3.3、输入控制部分

    输入控制类:
    该类主要负责根据按键获取对应的命令,执行该函数。然后将该命令保存至命令列表,可以执行撤销和重做动作。
    类图如下:
    在这里插入图片描述代码如下:

    /输入控制类 调用方
    class InputHandler{
    	public:
    	InputHandler(){
    		//默认按键绑定的方法
    		buttonX_=new JumpCommand();
    		buttonY_=new FireCommand();
    		buttonA_=new SwapWeaponCommand();
    		buttonB_=new LurchCommand();
    		currentCommandIndex=0;
    	}
    	virtual ~InputHandler(){
    		delete buttonX_;
    		delete buttonY_;
    		delete buttonA_;
    		delete buttonB_;
    	};
    	//触发可变指令输入,获取对应指令
    	Command* HandleCommandInput(BUTTON pressedButton){
    		//pressedButton为正在被按下的按钮
    		if(IsPressed(pressedButton,BUTTON_X))  return buttonX_;
    		else if(IsPressed(pressedButton,BUTTON_Y)) return buttonY_;
    		else if(IsPressed(pressedButton,BUTTON_A)) return buttonA_;
    		else if(IsPressed(pressedButton,BUTTON_B)) return buttonB_;
    		//如按下的键不是可处理按键,则返回nullptr
    		return nullptr;
    	}
    	//触发固定输入
    	void HandleFixedInput(BUTTON pressedButton){
    		if(IsPressed(pressedButton,BUTTON_CTRL_Z)) RollBack();
    	}
    	//命令施加于对象
    	void CommandInflictionToActor(Command* command,Actor* actor){
    		if(currentCommandIndex!=(commandsVec.size())){
    			std::cout<<"have been clear Commandvec"<<std::endl;
    			for(auto it:commandsVec){
    				delete it;
    			}
    			commandsVec.clear();
    			currentCommandIndex=0;
    		}
    		command->Execute(actor);
    		commandsVec.push_back(command->Clone());
    		currentCommandIndex+=1;
    		
    	}
    	//撤销与重做操作
    	void RollBack(){
    		if(currentCommandIndex!=0){
    			if(currentCommandIndex==commandsVec.size())//撤销操作
    			{
    				std::cout<<"RollBacking"<<std::endl;
    				commandsVec.back()->Undo();
    				currentCommandIndex-=1;
    			}
    			else//重做操作
    			{
    				std::cout<<"reforming"<<std::endl;
    				commandsVec.back()->Execute(commandsVec.back()->GetExecuteObject());
    			}
    		}
    	}
    	//设置按键对应的命令
    	void SetButtonX(Command* command){
    		if(command){
    			delete buttonX_;
    			buttonX_=command->Clone();
    		}
    	}
    	void SetButtonY(Command* command){
    		if(command){
    			delete buttonY_;
    			buttonY_=command->Clone();
    		}
    	}
    	void SetButtonA(Command* command){
    		if(command){
    			delete buttonA_;
    			buttonA_=command->Clone();
    		}
    	}
    	void SetButtonB(Command* command){
    		if(command){
    			delete buttonB_;
    			buttonB_=command->Clone();
    		}
    	}
    
    	//用于绑定对应指令的指针
    	private:
    	Command* buttonX_;
    	Command* buttonY_;
    	Command* buttonA_;
    	Command* buttonB_;
    	std::vector<Command*> commandsVec;
    	long long unsigned int currentCommandIndex;
    };
    
    

    3.4、主函数部分

    主函数:
    先是测试了四个按键功能的执行,后是测试是否可以撤销和重做,最后测试是否能够清除命令列表。
    代码如下:

    
    int main(void)
    {   
    	InputHandler* inputHandler=new InputHandler();
    	Actor player_1("player_1");
    	Actor player_2("player_2");
    
    	std::cout<<"测试四个按键:"<<std::endl<<"-----------------"<<std::endl;
    	//依次按下四个按键
    	for(int i=0;i<4;i++){
    		//std::cout<<inputHandler->HandleInput((BUTTON)i)<<std::endl;
    		Command* myCommand=inputHandler->HandleCommandInput((BUTTON)i);//int可以转为对应枚举值
    		if(myCommand)
    		{
    			if(i<2){
    				inputHandler->CommandInflictionToActor(myCommand,&player_1);//使用指针,是为了可以扩展Actor
    			}
    			else{
    				inputHandler->CommandInflictionToActor(myCommand,&player_2);
    			}
    			
    		}
    	}
    	std::cout<<std::endl<<"测试撤销与重做操作:"<<std::endl<<"----------------"<<std::endl;
    	inputHandler->HandleFixedInput(BUTTON_CTRL_Z);
    	inputHandler->HandleFixedInput(BUTTON_CTRL_Z);
    	std::cout<<std::endl<<"测试清理命令列表:"<<std::endl<<"--------------------------"<<std::endl;
    	Command* tempCommand=inputHandler->HandleCommandInput((BUTTON)0);//int可以转为对应枚举值
    	inputHandler->CommandInflictionToActor(tempCommand,&player_1);//使用指针,是为了可以扩展Actor
    
    	return 0;
    
    }
    

    四、输出结果

    输出截图如下:

    在这里插入图片描述

    展开全文
  • 一、一般模式切换到编辑模式 1、i:进入插入模式。从目前光标处插入。 2、I(大写i):进入插入模式。从目前所在行的第一个非空格符处开始插入。 3、a:进入插入模式。从目前光标所在处的下一个字符处开始插入。 ...
  • Linux vim编辑命令模式

    2021-05-10 10:59:08
    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。...下面是vi的使用教程:包含vi的基本介绍、使用模式、文件的打开关闭保存、插入...
  • vi 编辑器是一个功能强大的编辑器。学习 vi 要从其基本工作模式开始学起。了解这些工作模式对用户理解 vi 编辑器的行为是不无...任何时候,不管用户处于何种模式,按下Esc即可进入命令模式。 在命令模式下,用户可
  • Android启动模式

    2021-05-28 05:05:12
    LaunchMode在声明Activity的xml中指定 android:launchMode="xxx"1.standard标准模式。这是系统默认的模式,每次启动Activity都会重新创建一个新的Activity实例,也就是onCreate,onStart,onResume流程走一遍,并且...
  • 电脑的节电模式怎么退出

    千次阅读 2021-07-24 03:29:03
    关闭bai电脑屏幕节能模式的步骤:1.首先我du们在zhi电脑的桌面 class检查显示器电源线是否接正确。开机时显示器不会处于节能模式。1、显示器电源线。2、显示器数据线。3、显示器数据线接的位置是否正确。4、检查显卡...
  • 这种启动模式下导致问题:通过登录界面进入A界面,在A界面按home,重新点开app发现返回是登录界面而非A界面。 原因 进入应用:h-a1-a2 回退home界面:h-a1-a2-h 重新点击应用:h-a1 h是home界面,a1是应用登录界面,...
  • 华为手机的虚拟名为【虚拟导航】,目前主流的华为手机默认为全面屏手势模式,设置虚拟导航需要在系统设置中更改操作模式。具体操作方法如下(以华为P40手机为例,系统版本是EMUI10.1): 1、打开华为P40手机的...
  • Python:水果与设计模式-工厂模式

    千次阅读 多人点赞 2021-06-10 15:30:34
    工厂模式(Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们 在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 。 意图: 定义一个...
  • SecureCRT-VI操作常用命令

    千次阅读 2020-12-29 10:17:21
    1、vi的基本概念基本上vi可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)命令行模式commandmode)控制屏幕光标的移动,字符、字或行的删除...
  • 低功耗模式、休眠模式----->唤醒后----->正常模式 大家翻开STM32的中文参考手册(你们看就行了,我翻,然后截图),里面关于STM32的低功耗模式有详细的标注,突然不想截图。 1、睡眠模式(Cortex™-M3内核...
  • 离开安全模式?Android从版本4.1开始导入【安全模式】(Safe Mode)。它的原理与微软Windows 的安全模式相似。如果机器发生问题,例如应用程序当机、重新启动,此时可启动安全模式来检查问题是否为第三方应用程序所造成...
  • 显示器工厂模式的进入方法集锦1.TCL显示器1)M1502显示器面板按键:“-”,“+”,“←”,“→”,电源开关“◎”。工厂模式:首先关闭显示器电源开关,再同时按住“-“与”→”不松手,打开显示器电源开关,当显示器...
  • iPhone X上市也已经有一段时间了,众所周知它去除了我们熟悉的睡眠/唤醒按钮——home 。 很多用户肯定对觉得这个设计很反人类,其实现实是恰恰相反,苹果只是简单地把home的功能分配到了Side按钮,除了消失的...
  • 一、自己动手丰衣足食 – 没有建造者模式 1.1 类图 我根据对电脑的理解,电脑应该有CPU、内存、硬盘,然后设计出来了一张设计图(类图): 1.2 编码实现 首先先把电脑的配置进行封装Computer: package ...
  • 文章目录1 前言2 终端IO的三种模式2.1 canonical 模式2.2 nocanonical 模式2.3 raw 模式3 终端控制结构 1 前言 编写测试工具的时候,需要实时的...在这种模式下,终端设置每次返回一行数据,换句话说就是遇到换行符才
  • 各位可以参考下:小米如何进入Recovery的两种方式①方法一:MIUI桌面下,点击打开“系统与安全”—“系统更新”—点击“菜单”,然后选择“重启Recovery”,确定之后即可进入Recovery模式。②方法二:在手机关机的...
  • 要快捷方式~~在控制面板中打开“电源选项”,切换到“高级”标签,将“在按下计算机电源按钮时”设置为“关机”,将“在按下计算机睡眠按钮时”设置为“待机”,这样按键盘上的“Power”就是“关机”,按“Sleep”...
  • 我们在配置交换机的时候首先要了解的就是交换机命令模式,那么,网络交换机的命令配置模式有哪些呢?接下来小编就来用飞畅科技系列交换机为例带大家了解下交换机的6种配置模式,感兴趣的朋友就一起来看看吧! 飞畅...
  • 很多初用Linux的朋友可能会遇到忘记密码、或图形界面服务无法启动的情况,解决方法之一就是进入Linux的单用户模式。步骤及方法如下:1、用单用户来登录系统在GRUB启动后,移动键盘到Linux的启动项;按e;然后再...
  • unity 常用的设计模式

    千次阅读 2020-12-23 15:59:04
    一、单例模式 在我们的整个游戏生命周期当中,有很多对象从始至终有且只有一个。这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁。 单例模式一般应用于管理器类,或者是一些需要持久化存在的对象。 优点...
  • LG液晶显示器进入工厂模式方法.doc

    千次阅读 2020-12-30 17:01:14
    LG液晶显示器进入工厂模式方法常见CRT显示器的工厂模式进入方法...工厂模式:首先关闭显示器电源开关,再同时按住“-“与”→”不松手,打开显示器电源开关,当显示器屏幕出现图像时松开手,这时即进入工厂模式,屏...
  • 企业微信返回按钮

    千次阅读 2021-07-28 17:02:41
    页面刷新之后返回按钮不生效 使用 'popstate’监听发现刷新之后不触发 判断是刷新之后返回按钮发生了变化 查文档 然后继续看下去发现要引入sdk,获取token 。。。一大堆 我明明就想返回上一个页面 解决 经测试,...
  • 原标题:(ai全屏快捷键是什么(Ai切换屏幕模式有哪些))原位粘贴技巧Ctrl+C 复制Ctrl+F原位贴到前面Ctrl+B原位贴到后面页面切换技巧:在开多个AI文档的情况下,来回切换是有点麻烦的,点来点去有点慢,Ctrl+F6可以有效...
  • 重磅干货!高通9008模式与数据提取

    千次阅读 2021-06-13 08:19:18
    高通9008模式与数据提取上一期的镜像基础知识更完后,本期我们上高级镜像干货!大家还记得Android手工镜像的方法吗?我们有读者读完之后提出了新的问题,刚好和Wendy最近计划的本文吻合~ 谢谢这位热心读者,本期我们...
  • 按键部分的测试包括电源键、音量键、Home键、多任务以及返回键,按下不同的按键屏幕上则显示不同的颜色。 LED测试则是屏幕上出现显示颜色的英文字母,对应的呼吸灯也呈现出相同的颜色。 手写笔触摸屏幕测试/相机...
  • 初学者刚进入vi不要乱点键盘,vi的三种...vimvi共分为三种模式:命令模式,编辑模式,末行模式编辑器(1)命令模式spa命令模式为vi的初始模式。在普通权限下键入“”$ vi 文件名 “”或 临时root用户下键入 “# vi 文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 378,887
精华内容 151,554
关键字:

如何修改返回键模式