今日新帖:1 | 帖子数:2004 | 会员数:1.1万
接触艾兰岛有3个多月了,最近感觉自己需要再学习一下。 看到【艾兰岛编辑器初级题目】这个帖子,利用它来对自己的知识查漏补缺。 以下题目都来出自帖子(【艾兰岛编辑器初级题目】)。 另一个同学-日月空也做了这些题目,他的答案在(https:// bbs.ylands.qq.com/forum.php?mod=viewthread&tid=5639)。 1.在玩家出生时,通过控制台输出1-100的数字 ![]() -- 需要会使用2个脚本:循环、控制台输出。 -- 在使用"for(循环计数),从A,到B,步长C”这个脚本时,需要注意:从A到B,包含A,但不包含B。 所以,要得到1-100,需要“从1,到101”。 2.在玩家出生时(事件下限3行代码),通过一个自定义函数(不限代码行数),控制台输出数字。输出的内容为1-100的数字,100以内的奇数,100以内的偶数。 ![]() -- 用取余来判断奇偶。 -- 3.在玩家出生时,通过自定义函数,用气泡每秒输出1个不断叠加的数字。起始值为0。(不允许使用时间触发器) ![]() -- 首先需要在脚本中设置一个变量,用来保存上一个数字。我这里叫“不断增加的数字”。 之后是这道题的关键点。在不使用时间触发器时,需要使用 递归+延迟,来实现每隔一段时间做一件事。 (这些题目经常会“不允许使用时间触发器”。我觉得,用时间触发器,其实方便很多。) -- 4.在玩家出生时,通过自定义函数,用气泡每秒输出自己的位置。(不允许使用时间触发器) ![]() -- 和上一题类似。 需要会使用 获取位置 脚本。 -- 5.通过气泡输出自己的旋转。(不允许使用时间触发器) ![]() -- 与上一题类似。 -- 6.让一个动物(兔子)绕着Y轴不断旋转(不允许使用时间触发器) ![]() -- 这道题的答案不太复杂。需要使用“设置旋转”和“偏移后旋转”,但不使用“偏移后旋转”也能做到。 -- 在艾兰岛中,除了设置位置旋转外。还可以使用“跟随”和“瞄准”来让实体持续移动。 但是动物没法用这些指令,我想了想办法也没成功。 而且动物还会发出声音,我也不知道如何消除。 7.让一个动物(兔子)绕着Y轴不断旋转(必须使用时间触发器) ![]() 将上一题改用时间触发器 -- 8.通过全局存储输出玩家的名字(使用标签和数组) ![]() ![]() ![]() ![]() -- 用到4个东西,出生点、标签、全局存储、开关。 在出生点的脚本中:玩家创建时,给玩家加上标签。 在全局存储中:定义一个函数-“输出玩家名称”。其中,通过标签获取全部玩家实体,再转化后才能文本。 在开关脚本中:开关打开时调用“输出玩家名称”。 -- 这道题我本来是不会做的。我不会通过标签获取实体。 看了答案才知道。 也因此了解了一些标签的用法。 9.通过全局存储输出玩家的名字(使用全局变量) ![]() ![]() ![]() ![]() -- 与上一题类似。 区别是不使用标签,而是在全局存储中定义一个所有玩家的数组,在玩家出生时,加入数组中。 -- 10.让玩家自己绕着Y轴不断旋转 ![]() -- 与第6题类似。 不同的是,需要取到玩家。取到玩家有很多方法,可以使用第8、第9题的方法。 我这里用了“获取玩家”脚本。 -- 11.让一个动物一直位于(玩家的位置+[0,0,1]) ![]() ![]() -- 我是用时间触发器实现的。 需要注意的是,在玩家出生后,才开启时间触发器。 否则,玩家出生前,时间出发器就会调用,这时取不到玩家,会报错。 (虽然,其实这些报错也不影响之后的运行。但还是不让它报错好些。) -- 12.让一个动物一直位于 偏移(玩家)后的位置([0,0,1]) ![]() -- -- 13.让一个玩家绕着Y轴旋转,动物永远处于玩家的正前方。(必须用代码完成) ![]() -- 这道题我也是用时间触发器做的。 题目要求“(必须用代码完成)”,不知道什么意思,所以我写了2种方式,有一种麻烦一些,代码多一些。 -- 14.让一个动物绕着玩家旋转,玩家静止不动,且动物的脸朝向玩家。(必须用代码完成) ![]() -- 这道题,我的做法用到了一些计算,也达到了题目要求。 -- 不过,我的做法比较麻烦。原帖的答案中,通过“旋转向量”和“获取从一点到另一点对应的旋转”这两个脚本完成,方便很多。 15.玩家攻击时在自己的周围形成一圈火焰圈。 ![]() ![]() ![]() -- 我的解法,用到了 事件侦听、粒子效果、逻辑模板。 用事件侦听,侦听玩家的近战攻击。 之后,通过模板生成一圈火焰。我还加上了火焰延迟熄灭、删除的效果。 -- 我的做法也比原帖的做法麻烦。 原帖使用“旋转向量”能能方便的计算坐标。使用“播放粒子”就替代我的逻辑模板,也方便很多。 通过对比,就学到了。 16.创建一个触发区域,进入时为夜晚12点+暴风雨,离开时为早上10点+晴天 ![]() ![]() -- 需要知道“设置游戏内时间”、“设置各处天气”这2个指令。 我本来也是不知道的。通过搜索脚本可以找到。 而且,点击?,还可以看到脚本的详细说明。(不过有些没有) -- 17.创建一个区域,缓慢向人移动,人进入时死亡。(不允许使用动画相关函数) ![]() ![]() ![]() ![]() ![]() -- 用到触发区域、时间触发器。 在触发区域中,设置进入后击败实体。 在时间触发器中,移动触发区域。 不过,直接这样做会碰到一个问题,会警告说不能移动触发区域。 需要勾选触发区域的“有动画的”。 -- 18.创建一个区域,缓慢向人移动,人进入时死亡。(不允许使用动画相关函数,不允许使用时间触发器) ![]() -- 与上一题类似,只是把时间触发器的功能,改成用延迟来实现。 -- 19.每秒创建1个区域(每个区域的颜色不同,每个区域的移动速度不同),缓慢向人移动,人进入时死亡。(不允许使用动画相关函数,不允许使用时间触发器) ![]() ![]() ![]() -- 这道题需要用到触发区域、逻辑模板、全局存储。 触发区域的脚本非常简单,与前两题一样,只是在玩家进入时击败。 全局存储的脚本较为复杂,需要生成触发区域并移动。 -- 我的答案相比原帖也复杂一些。 原帖有2点值得学习。 一个是定义颜色时,我用的方式比较复杂,其实有一个简单的脚本。 第二个是,原帖把移动触发区域的脚本,放在了逻辑模板里(而非全局存储),这样最后的结果会更简洁一些。 不过,原帖也有2个错误。 一是,颜色的取值是0-1,而非0-255。(不过,这个也可能是版本原因,也许以前是255。但目前的版本一定是0-1了。) 第二个是,题目说“每个区域的移动速度不同”,原帖没有做这个处理。 |
本帖最后由 上好的韭菜 于 2020-12-19 17:27 编辑