LayaBox开发过程中遇到的一些小问题以及解决思路

引擎版本:Laya2.0
示例脚本:TypeScript

常用的功能和常见问题,一般官方文档或网上可以直接搜到,但仍有一些问题,官方文档里是没提到的,然后网上搜到同样问题的帖子,却没人回答。作为一个开源免费的引擎,不是每个问题,官方都能准时解答的,甚至你发个帖子,很长一段时间都没有一个答案,这时只能自己慢慢摸索一下了。这里我就把自己遇到的一些小问题及解决思路记录下来,希望对那些遇到同样问题的人有帮助。这些问题并不大,却有点烦人,你明知道实现某个功能可能就是一行代码的事,却没有关于如何使用的说明,这让人很苦恼。

Laya的TextInput组件显示密码与隐藏密码

密码输入框一般都是用TextInput这个组件吧,然后在编辑器的右侧将该组件的type设置为password就可以将输入的密码变成号了,但有时可能还需要这样一个功能:有个勾选框,选中的时候就显示密码,取消选中时密码就变成号,很自然就想到通过代码来改变组件的type就行了textinput.type = "text"textinput.type = "password",很可惜,改完后测试发现那个文本框中的密码并没有立即显示和隐藏。然后我发现改完type后需要点击选中文本框才能刷新显示,网上根本搜不到解决方案,官方文档也没有说明,不过我还是摸索到了解决办法:改变type后手动触发一下TextInput的输入状态和取消输入状态,也就是textinput.focus = truetextinput.focus = false就行了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Laya的TextInput限制文本的输入类型

一般的,TextInput的type设为text时可以输入任意类型的文本,设为number时只能输入数字。官方文档的介绍中也提到了一下字符限制。但是,如果我要只能输入字母、数字和特定符号,不能输入中文,这怎么办?文档里的只演示了限制一种类型,限制多类型的格式就不知道了,网上也搜不到介绍…这又让我好找,其实也很简单,选中TextInput,在右侧的属性列表中找到这个设置一下就行了:
在这里插入图片描述
这里限制了只能输入数字、小写字母、和三个符号。要限制中文,也一样的,看下官方文档中限制中文的格式,加上去就行了。这里的格式和Javascript的正则表达式相似,但又有不同…有点坑 ?

Laya的TextInput隐藏右侧的bar(滑动条)

如果将TextInput的type设置为number,右侧就会出现一个这样的bar:
在这里插入图片描述
然后我看了官方文档和API介绍,好像并没有接口用来隐藏这个东西的。这就很尴尬了 ?
解决办法也很简单,把type设置为text(这个类型并不会出现这个奇葩东西),然后用上面的方法限制一下文本的输入类型就行了。目前我只发现了这个方法,其他的我不清楚。

Laya中的碰撞检测

用过CocosCreator的应该都知道,物体加上Collider后,给物体绑定一个脚本,在脚本中写个特定回调,碰撞后需要执行什么逻辑直接写在这个回调中就可以了,根本不用你在写什么碰撞判断什么blabla的,很方便。如果你不知道,到cocos的官方文档中查一下就可以看到详细例子了。然而…当我想在Laya中这样使用的时候,我找来找去,发现并没有例子介绍。尴尬…着实让我好找,其实用起来也很简单:
第一种方法和CocosCreator中的用法差不多,给对象添加碰撞组件
在这里插入图片描述
可以在右侧的属性面板中找到Collider的label属性,给它起个标签名,用于区分哪个碰撞体发生了碰撞。最关键的地方就是写个脚本绑定到对象中,也就是那个ColliderTest脚本组件了,脚本内容如下:
在这里插入图片描述
那个other参数就是另一个碰撞体对象了,在调试面板可以看到它的详细信息:
在这里插入图片描述
关于这几个碰撞回调,官方的LayaAir脚本参数说明中的碰撞事件那里有提到,但是没有使用示例。

还有第二种方法,这个方法不用绑定脚本,但是也需要给对象添加碰撞组件,然后在场景的脚本文件中,给碰撞对象监听一个碰撞事件,像这样:
在这里插入图片描述
这两种方法使用起来都很简单,但官方并没有给出示例,网上也比较难搜到。

Laya场景UI文件复用

Laya新建场景文件时那四种模式我就不说了,不清楚的网上搜下。这里我遇到一种情况就是,游戏中可能有几个页面,它们界面的UI类型和布局都一样,就是UI上面的内容不一样。本来这只需要建一个UI文件就行了的,然后用两个脚本去控制该场景去显示不同内容。但是,一般我们新建场景时都是用分离模式,然后新建一个脚本继承该场景的UI类,再把这个脚本绑定到场景的runtime属性中,像这样:
在这里插入图片描述
然后就可以在这个脚本中控制界面UI内容的显示了,再通过Laya.Scene.open("test.scene")来打开该场景。但是,我查找了下,好像并没有接口可以在打开场景后设置这个runtime属性的,所以一个场景只能用一个脚本 ?。
不过还是让我找到了方法,新建场景时用内嵌模式,该模式和分离模式不同的地方在于:内嵌模式同样会有一个UI类,但场景中的对象是直接在UI类中的一个变量来描述的:
在这里插入图片描述
但是在分离模式中,场景中的对象是在那个.scene文件中描述的,所以需要加载那个场景文件才能打开场景,而内嵌模式打开场景时并不需要加载什么场景文件。
分离模式需要新建一个脚本继承UI类,然后绑定到场景的runtime中,内嵌模式同样需要继承UI类,但是不需要绑定到场景的runtime中,打开场景时只需要实例化该脚本,然后sceneInstance.open()就可以了。代码大致是这样:
在这里插入图片描述
在这里插入图片描述
这样就可以达到场景UI复用的效果。我们可以新建任意脚本继承该UI类,然后,在脚本中更新界面的显示内容,最后实例化打开场景就行了。

Laya从对象的脚本文件中获取它的兄弟节点

有时可能可能会遇到这样一种情况,某个对象绑定了一个脚本,然后在该脚本中写该对象的逻辑,但是该对象需要与场景中的其他节点互动,如果是该对象的子节点,那直接获取到脚本所在的节点,然后通过getChildByName()就可以了,如果不是它的子节点,而是它的兄弟节点呢?这下就无法用getChildByName()。解决办法很简单,只需获取到节点所在的场景,通过场景的getChildByName()就行了,像这样:
在这里插入图片描述

Laya场景对象鼠标事件监听问题

可能会遇到这样一种情况:场景中有个对象需要监听鼠标的MOUSE_DOWN、MOUSE_UP等事件,如果你点击了该对象,肯定可以监听到MOUSE_DOWN事件,然后按住不放,从对象身上移开,此时松开鼠标,是监听不到MOUSE_UP事件的(即使你用该对象监听了该鼠标事件)。如果我只要点击了该对象,在任何地方松开鼠标都执行MOUSE_UP的事件,该怎么办呢?很简单,只需要用舞台Laya.stage监听一下同一个事件即可。因为舞台可以监听到所有鼠标事件,不管你点击哪个对象。你可能会怀疑,这样做会不会随便点击舞台都执行那个事件逻辑了?不会的,只要加个判断,如果在该对象上按下鼠标,再从任意位置松开鼠标,就执行对应事件逻辑就行了。这个问题的解决办法可以看引擎的ScrollBar源码的滑动事件监听部分,差不多就是这样用的。点击滑块,然后按住不放,从滑块上移开,任然可以滑动滑块,因为此时任然可以执行MOUSE_MOVE事件(此时的这个事件是有舞台监听的,并不是滑块这个对象)。自己动手试一下就清楚了

好了,以上提到的一些小问题都是我在使用过程中亲身经历,然后官方文档中没有介绍或网上也比较难搜到的。如果还有不清楚的地方,欢迎讨论 ?

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Layabox玛丽医生小游戏是一个非常有趣的游戏,它的源代码由Layabox引擎提供。玩家需要扮演医生玛丽,通过完成一系列的任务治疗患者。 游戏的源代码主要分为不同的部分。首先是游戏的基础设置部分,包括游戏界面的布局、背景音乐的设置,以及一些游戏参数的初始化。其次是角色控制部分,包括医生玛丽的移动和操作,以及患者的生成和移动。这部分代码涉及到游戏的碰撞检测和角色移动的逻辑。然后是游戏的任务和关卡部分,包括不同关卡的设置和任务的指引。最后是游戏的结束和得分计算部分,包括判断游戏是否胜利或失败,以及根据玩家的表现计算得分和显示排行榜。 游戏的源代码通过Layabox引擎的API实现了各种游戏功能,如角色的移动、碰撞检测、音乐播放等。它使用了Layabox引擎提供的精灵(Sprite)和场景(Scene)等组件进行游戏的构建。此外,源代码也包括一些用于控制游戏逻辑和界面显示的脚本文件。 通过分析Layabox玛丽医生小游戏的源代码,可以学到很多关于游戏开发的知识和技巧。你可以了解到游戏的基本架构和各个模块之间的交互关系。同时,你也可以学习到Layabox引擎的使用方法和一些游戏开发常用的技术,如碰撞检测、角色移动、音乐播放等。 ### 回答2: Layabox玛丽医生小游戏源代码是一个使用Layabox引擎开发的医生小游戏的源代码。这个游戏的主要任务是帮助玛丽医生治疗患病的小动物。 在游戏,玩家可以扮演玛丽医生,通过点击、拖拽等操作来完成治疗任务。游戏界面简洁清晰,采用了可爱的卡通风格,给人一种轻松愉快的感觉。 游戏源代码主要包括游戏的逻辑部分和界面部分。逻辑部分包括游戏的流程控制、任务操作等内容。界面部分则包括游戏的场景、角色、动画等元素。 玩家在游戏需要根据小动物的病情选择合适的治疗工具,并进行操作。例如,当小狗受伤时,玩家可以使用拖拽工具将药膏涂在伤口上,然后用绷带缠绕。在完成治疗后,玩家可以获得一定的奖励。 这个游戏源代码使用Layabox引擎进行开发Layabox引擎是一个基于HTML5的游戏引擎,可以用于开发跨平台的游戏。它具有高性能、易用性和丰富的功能特点。 总之,Layabox玛丽医生小游戏源代码是一个用Layabox引擎开发的医生小游戏,它通过简洁清晰的界面和有趣的玩法,带给玩家一种愉快轻松的游戏体验。 ### 回答3: LayaBox玛丽医生小游戏源代码是一种使用LayaBox引擎开发的小游戏源代码。玛丽医生是一款拥有医疗主题的益智游戏,旨在培养玩家的医疗常识和操作技能。 在游戏,玩家扮演玛丽医生,需要处理来自不同患者的医疗问题。玩家需要根据患者的症状和需求,选择正确的治疗工具和药物进行操作。游戏的患者多种多样,有感冒、发烧、骨折等不同的病情,玩家需要根据不同的情况给予正确的治疗措施。 在代码开发者会使用LayaBox引擎提供的各种功能和特性来实现游戏的各种功能。例如,使用引擎提供的场景管理器来创建游戏场景,使用精灵对象来表示游戏的元素,如玛丽医生和患者角色,使用碰撞检测功能来判断治疗工具是否与患者接触,使用动画和音效来增强游戏体验等等。 此外,源代码还包括游戏的逻辑和处理部分。通过编写适当的游戏逻辑代码,开发者可以实现患者的生成和随机病情设置,以及玩家操作的响应和游戏结果的判断等功能。 总之,LayaBox玛丽医生小游戏源代码提供了一个可以直接使用和修改的游戏基础框架,开发者可以根据自己的需求进行二次开发和定制,使其更加符合个人或商业目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值