cocos 游戏引擎开发过程遇到的问题

本文介绍了在canvas场景下优化UI的一些关键技巧,包括如何避免背景图拉伸、处理图片帧动画的漏空问题、自适应文字布局、图片九宫格模式的运用以及列表循环复用节点的方法。同时,还讲解了进度条的实现、事件穿透处理以及遮罩层的正确配置,旨在提升游戏或应用的用户体验和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. canvas背景图设置,widget:组件下top:0,bottom:0,left:0,right:0的情况下,在某些长度超出的手机,背景图会被拉伸。
    解决:背景图;bottom,top不设置,设置一个layout节点 target设置为相对canvas对齐,然后头部,底部截取,背景图片头部和底部相应底色做填充。cocos(似乎有色差),也可以截取一像素图片底色做填充,高度设为背景的50%,且放到背景图层级之下,保证背景图在底色图之前渲染,避免图片重叠带来的边框重叠。

  2. 图片帧动画,如果图片是漏空,勾选trim,会剪切图片多余的漏空部分,会导致动画在原地蠕动的样子,所以要去掉此选项,如果需要自动开始动画,勾选动画的play on Load(游戏开启默认开启动画),如果是循环播放,编辑动画clip 动画模式开启loop模式。

  3. cocos的文字会自动增加高度,所以文字的位置需要自计算 ,相对父元素,节点距离下方多少像素减去节点距离上方多少像素的差值除以2,所得就是节点的高度位置,为正代表在y的正半轴,为负代表在y的负半轴。

  4. 图片九宫格开启九宫格模式,图片被压缩时,图片的四个角,不会被往里压缩,开启九宫格模式在节点的Sprite中type选择SLICED,可以编辑图片调节你希望不被压缩的四个角。

  5. 需要做列表循环类似的一个节点多次使用,可以将该节点设置为预制体,将做好的一个节点拖动到assets,就会生成预制体,预制体,每次改动需要保存预制体才能生效,如果该预制体初始是隐藏状态,需要取消隐藏状态做保存,再隐藏,保存scene场景生效。

  6. canvas场景下,如果canvas场景下,多个节点公用一个脚本,将需要绑定的脚本,绑定给canvas节点,不要再canvas场景下的多个节点绑定同一个脚本文件,不然会导致生周期重复执行,如果在生命周期下接口等操作,会导致重复请求,所以将共用的脚本文件绑定给canvas,然后如果其他节点需要用到该脚本,就将canvas节点绑定给它clickEvents,直接将canvas拖动到clickEvents的第一个所需参数下,就可以拿到你需要的脚本,避免生命周期重复执行。

  7. canvas 进度条的使用,先给父级开启slider组件,及给父级添加slider组件,slider组件的Handle(直接将子元素的滑块按钮拖动到Handle下)设置给父级的子元素,然后给可以拖动的子元素添加按钮组件,按钮组件的target设置为该子元素,直接将该子元素拖动到按钮组件的target下面。
    :滑动条的基点应该设置到最右边,不然拖动可能导致,滑动条超出父级元素。
    设置回调事件
    栗子:

  //滚动条节点所需
   onLoad() {
         this.processFather = cc.find('Canvas/game_card/progressBar/radius-10')
         this.processBg = cc.find('Canvas/game_card/progressBar/radius-10/radius-6/radius-6-2')
         this.process.on('slide', this.callback, this);
         // 购买复活卡数量,与滚动条相对应
         this.recCardNum = cc.find('Canvas/game_card/card_num/num').getComponent(cc.Label)
}
 callback (slider) {
        // 回调的参数是 slider
        // 设置滚动条背景跟随移动, 且宽度等于进度条进度百分比乘以父级宽度
        this.processBg.width = this.processFather.width * slider.progress
        let CardNum = Math.ceil(slider.progress * 10)
        this.recCardNum.string = CardNum === 0 ? 1 : CardNum
    }
  1. 开启遮罩层时,要开启事件穿透,避免你开启遮罩层,遮罩层下方的事件还能触发
    及给遮罩层添加UI组件的 BlockInputEvents 组件,并勾选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值