现在做一个游戏,横屏和竖屏的界面表现完全不一样,需要监听横竖屏切换来表现不同UI效果,不只是节点位置,缩放,这样是否要做两套预制体,监听横竖屏来加载对应预制体,然后再通过数据去刷一遍界面,还是做一个预制体,通过监听来改变节点坐标,完全不同的地方,控制对应横竖屏节点的显式。
还有一种情况比如是横竖屏对应的spine动画可能不一样,切了横竖屏后怎么继续刚才对应的状态去播放新的spine呢。比如横屏播放spineA,监听spineA播完会做事件A,但是切了竖屏要播放spineB,从头播的话流程状态就不对了
用fairygui做ui, 里面控制器完美处理横竖屏动态切换
控制器本质也是2套ui,,,,
这种是切换UI还是同时加载两个,控制隐藏显示哪个
这种复杂需求我的建议是:加钱
为了方便开发和自己理解,就以传统的MVC结构举例说明吧
你首先要把数据层和视图层分离,
数据层:
保存的是游戏的各种数据,不管当前是横屏还是竖屏,数据层不受影响
换句话说,用户切换横竖屏,你的游戏里有哪些数据是不变的,都放到这一层
视图层:
准确的说是视图代理层,真正的视图层已经由Cocos帮我们实现了
我们要做的是用各种自定义的组件来组织我们的视图素材
横屏视图和竖屏视图分开制作,方便后续单独微调,通用素材方通用文件夹,
其他各管各的素材、位置、大小、播放等状态
(横竖屏应该尽量使用通用素材,只调整位置大小等,因为不可能等到切换横竖屏时再临时加载素材,那么多一套素材就多占一些内存)
视图层的组件,如果横竖屏有变化的,都要实现一个IOrientationChangeable接口
这个接口实现changeOrientation方法,用于通知组件切换横竖屏显示
例如SpineView,它持有一个spienPortrait和一个spineLandscape,当外部调用changeOrientation方法时,它切换到对应的显示。Spine动画可以知道当前播放的进度,横竖屏切换时,把横屏的进度取出来,赋给竖屏
控制层:
中间加一个控制层,控制层知道所有的数据和所有的视图,当横竖屏变化时,控制层去切换视图
你可以用事件去驱动组件,但这样不容易调试
你也可以添加一个管理器,在IOrientationChangeable相关节点初始化时注册到管理器,onDestroy的时候取消注册。切换横竖屏时,从管理器获取当前可见的IOrientationChangeable节点,调用其changeOrientation方法。
这个结构可以帮助你解决横竖屏问题,还可以用来实现换皮等功能
我觉得如果所有界面都是这个需求的话 那么从设计层面就有问题
游戏不都是要么横屏要么竖屏(我孤陋寡闻) 如果就一两个界面比如战斗场景需要横竖切换单独处理起来应该也还好
谢谢您的回复,准备按照你思路去做
小游戏,主要是为了用户体验想横屏和竖屏都能玩,主要是UI布局的调整
应该先让美术出几个大界面的效果图 看看哪些ui的适配可以写通用点(往四个角落做适配) 游戏ui肯定没办法一套策略全照顾到的 还是要针对一些界面做单独处理
还是建议和策划打一架再说吧,特别是只是为了同时可以买横屏的量和竖屏的量,这种情况最大的可能是玩着玩着切横竖屏了毫无游戏体验,感觉如果是让用户自己选择切换你也没必要来问了吧。
但如果是横屏表世界竖屏里世界的玩法,那就是一整个肃然起敬给他磕头的场面
这个看项目整体 UI 复杂度,基本没有这么搞的,测试都会测麻了,每个界面都要测试两个状态下的屏幕状态,以及屏幕旋转事件发生时界面是否正确旋转了,只能说这个需求要么傻,要么做成了后卷死开发。
这个项目等死吧 成本巨高
哎,就是很麻烦,考虑的东西太多了
兄弟,做的应该是试玩demo得吧? 这个设计得需求就是这样吧
没有,就是一个完整的游戏,需求就是这样哈哈,难搞
之前在前司做过横竖屏适配,用的是fgui控制器,基本上就是要做两套
把策划 干掉 就完事了。。
这种需求喷策划就完事,我经常喷,大多数都被我喷舍弃了,一些没吊用的功能和需求,显着他们了
可是她叫我哥哥哎 