@沉没2332
我也不太清楚是不是你具体想要的效果,总之先随便做了一个我理解中的效果:
主要是这三大步逻辑:
展开来分别是:
(第二点这里其实也不算主要的,就是高亮【放置区域】用的,不影响核心逻辑)
范例就放在这里了,主要是分享思路,实际得看具体项目:拖拽建造.evk
konoDIOda 发布的最佳帖子
-
分享自己关于2D俯视角游戏的图像深度管理思路
做2D俯视角游戏的时候,不管是RPG、射击、ARPG,视觉上为了看起来自然,画面中的物体一般需要遵循下近上远的图像深度规则(越靠近画面下方,表示离镜头越近,层级越靠上,会盖住离镜头远的物体),但这个规则不像3D游戏,3D游戏是天然具有这个效果的,而2D游戏是需要靠自己用事件逻辑去造出这个效果的(这里指在唤境里)。
以上分别是RPG、射击、ARPG游戏的一些截图,可以看到都遵循了这一图像深度规则,而唤境也是提供了一个一键自动深度管理的基础功能的,不过效果比较有限,对于比较复杂的层级管理效果上比较有限。
自动深度管理功能的官方教程:https://www.evkworld.com/learn/350 官方的效果示意图:
从效果上看,大多数情况下其实已经足够用了,那是什么情况下会没法使用呢? 回到一开始说到的下近上远的图像深度规则,所谓的越靠近画面下方,转换为具体的依据就是图像的y坐标越大的意思,而自动深度管理功能的默认排序依据,也正是以此为准的(y坐标越大,层级越靠上,会挡住y坐标更小的图像),那么就有这么一个问题:假如我的人物整体构成是人物+武器这类由多部分图像共同组合的情况,这个自动深度管理功能还能发挥效果吗? 分两种情况讨论:- 绑定在人物身上的武器没有转动角度的需求时: 如果没有这种需求,通过修改武器图像的锚点到几乎跟人物锚点一致时(依据自动深度管理的依据,需要锚点的x坐标或y坐标略大于人物的锚点位置时才可行),才能勉强让这种复合型的图像构成,正常的参与到默认的自动深度管理功能中去,设置起来还是比较麻烦的。
- 绑定在人物身上的武器有转动角度的需求时: 如果存在这种需求,显然上面的做法就没法使用了,因为图像的旋转是以锚点为圆心来进行旋转的,如果不把锚点设置在武器的握把处,旋转角度时就会变成像绕着人物的锚点转了(因为上述做法中人物和武器两者此时的锚点位置很靠近),而不是以武器握把处为圆心进行旋转。
可以看到效果很怪异的,正常情况应该是类似下面这样,武器是在人物的“手中”旋转才对。
但是如果照下面这样做,就会有一个新的问题,是关于深度管理中,图像锚点设置的合理性的。
深度管理中,图像锚点设置在哪个地方更具合理性? 关于这个,我们可以观察一下一开始那几个游戏截图。从透视的角度上看,仔细观察可以看到,物体底面的中心点作为锚点位置是比较合理的,对于人物来说也就是差不多在脚的位置上(或者说人物重心在地面上的垂直投影)。
为什么在这个位置是相对来说更具合理性的呢,你可以观察一下现实中,人站着时和物体的哪个面是处于同一个地面(平面)上的,是不是人的脚底和物体的底面,然后想象一下把视角移到头顶,判定人物和物体在这个地面(平面)的位置依据,是不是刚好就在人物和物体的重心处(例如下面这个纯俯视角的游戏)。
当然以上是基于现实情况来说的,而在引擎逻辑上,也有把锚点设置到该位置的合理性依据所在,那就是各种图像在尺寸上的差异,假如你的游戏设计中有一个巨大身形的boss,如果他的锚点也是默认的情况,那我方人物需要在boss的半个身体以上的位置,默认的自动深度管理效果下boss才能把我方人物挡住,过程中会出现下面这种人物好像飞起来一样的视觉效果,从视觉上显然是不合理的。
当然,你可以专门调整boss的锚点位置来解决这种情况,不过到目前为止,应该多少可以感受到为了使用默认的自动深度管理功能,做了多少标准上不统一的操作了,而这些徒增工作量的操作,其实反而让默认的自动深度管理功能变得束手束脚了。
自己动手做一个自动深度管理的功能如何? 上面我们已经分析了很多关于深度管理的特点,那么能不能利用这些特点来自己做一个自动深度管理的功能应对这种“人物与武器绑定”的复合图像的情况呢? 答案是可以的,但是具体好不好用,看各位自己的感觉,我这边只分享自己在这一块的思路: 把复合图像分为“主体”和“附着物”两个部分,主体部分参与主要的深度管理,附着物只跟它所绑定的实例执行层级排序,具体操作如下:
1、如上面所说,把这种复合式的图像分成“主体”和“附着物”两个部分,这里武器就是附着物(绑定物),人物本身就是主体(排序组)
2、然后把“主体”和“附着物”进行关联,这里用了绑定能力来制造这种关联:
3、最后写深度排序的事件逻辑:
父事件部分:对每个“主体”以y坐标大小为执行次序分别执行一次事件,这里是按升序执行,也就是y坐标越小(越靠近画面上方,也就是离镜头越远的感觉)的越先执行,执行的内容是移到图层组顶部,这样的话当执行到后面的“主体”实例时,后面执行的会反过来盖在优先执行的实例的上面(就像把扑克牌一张张叠在一起一样,先放的肯定是在牌组下面),这样就完成了“主体”的排序逻辑。
子事件部分:在以上“主体”排序过程中,插入“附着物”对“主体”的排序,首先是选中当前正在遍历的“主体”所对应的“附着物”,然后这里因为武器是要显示在人物上面的,所以动作部分是将“附着物”移动到“主体”上方。
如此一来功能就完成了,效果如下,可以看到即使敌我双方都是有两个部分组成的复合型图像,也能作为一个整体参与到自动深度管理中:
范例工程:图像深度管理思路.evk 希望这篇思路分享能对正在制作俯视角游戏的朋友有帮助。
游戏制作过程中总是免不了遇到许多难题的,我们的前辈当年可能要克服的问题可以说只多不少(那时运行游戏的硬件性能不像我们如今这么好),这里安利一个2002年的国产游戏——《刀剑封魔录》,这款游戏在图像深度管理这块做到几乎可以说是极致的程度,详细可以看看这个视频中,关于这款游戏图像深度管理难度的相关解说: https://www.bilibili.com/video/BV1kK41177dW -
RE: 优化建议 希望能完善关于对象实例选中方面的说明
@creater 官网倒是有教程讲到这个,https://www.evkworld.com/wiki/321,不过【系统组件】里除了“选中实例”组之外的,就没有其他会筛选实例的条件了。然后每种对象的条件都具备筛选自身实例的效果,就这两个点
-
RE: 如何制作卡牌游戏电脑出牌的AI
炉石来举例也太硬核了 ,我说一下自己的简单见解吧,卡牌游戏敌人AI的强弱取决于你对各个情况的出牌的优先级设计,这个情况的多寡又取决于你的卡牌规则,机制越复杂的卡牌游戏,AI需要应对的情况就越多。所以我从简单角度来看我个人倾向于仅设计AI的打牌“性格”,把行为模式分成几个类,再分别按AI的“性格”设计这些行为的优先级,例如把行为模式分成“进攻”和“自保”,“狂战性格”的AI就是无视自身生命值剩余多少,所有资源以减少对方生命值为主要目的来出牌,“稳健性格”的AI就是生命值高于一半时以进攻为主,反之以自保为主,“胆小性格”的则是始终以自保为主,自保达到一定程度才开始进攻这样。当然这个说法还是比较宽泛的,也只是一些大致方向上的个人见解,因为实际根据规则和牌库,设计的细节上也会很复杂,感觉专门找一下一些专业的游戏设计的教程或视频看看会比较好。
-
设计思路分享——设计游戏新手教程的建议
这篇建议来自于一位西班牙的游戏设计师——Carlos Valenzuela, 他分享了6点关于“怎样为游戏设计新手教程”的建议: 1、玩家讨厌被教导,而游戏作为一天工作/学习后的一种放松方式,如果玩一个游戏还要被一板一眼看教学的话,劝退的概率是很大的,所以不应该过于直接地教玩家如何玩游戏,你需要尽可能为玩家设计出一种能边玩边学的游戏体验。
2、提供流畅的游戏体验,尝试引导玩家进入“心流”的状态,为玩家提供一个循序渐进的难度阶梯,并且在过程中为玩家提供明确的目标、即时的反馈和满足感。 (“心流”的概念是心理学家米哈里·契克森米哈赖提出的,指当一个人进入心流状态时,会完全专注于自己正在做的事情,不会被周围环境分散注意力。 )
3、不同玩家有着不同的学习风格和习惯,所有人获取信息的方法总有差异。基于VARK学习模型,可以将学习者划分成视觉、听觉、动手尝试、社交等四个不同的类型,开发者设计新手教程时可以多多思考这几类学习者的需求,利用图像、音频反馈以及允许试错等方式来鼓励玩家学习游戏规则。
4、平衡游戏体验,益智手游《Threes》的开发者阿瑟·沃默尔曾解释说,每款游戏的新手教程都需要实现四个目标:
-
为玩家营造舒适感。避免用不必要的元素打扰玩家学习,应允许玩家自由尝试和练习。不要在屏幕上堆满玩家不了解,或者暂时还不需要了解的东西。
-
让玩家感到兴奋,向他们展示玩法的各种可能性。也许玩家正在挥舞木棍练习,但可以暗示他们,今后还有可能会与巨龙搏斗。
-
尊重玩家,不要像对待机器人那样对待玩家,向他们发送指令或要求。
-
让玩家明确游戏的规则、玩法、游玩目标等内容。
这几个目标存在一定的彼此矛盾,所以开发者需要平衡它们的比重,既不适合让玩家在新手教程阶段漫无目的地自由游玩,又不能以命令的方式要求玩家做事情。
5、利用游戏机制来解释另一个游戏机制,例如,我们想让玩家知道墙的背后有隐藏的宝藏,但玩家首先得将墙摧毁。该怎么做呢?我们不宜采用含有大段文本的弹出窗口来向玩家解释,也无需采用某个发光的符号或箭,它们都不属于玩法机制……如果玩家可以攻击,那就让他攻击。我们可以在墙的正前方放置一个敌人——当敌人被击倒后,墙也会被撞毁,这样一来玩家就可以看到墙背后的隐藏宝藏了。
6、一些其他的提示
-
玩家不喜欢在游戏里阅读文字,所以开发者应当尽量控制文本量。
-
避免使用俗气图像,或发光的手指、移动的箭头等“引导”元素,因为那会导致玩家对游戏的印象分大减。
-
在游戏菜单中加入“信息”按钮,确保玩家随时可以查看新手教程。
-
随着挑战难度的上升,游戏应当让玩家觉得越来越有趣,维持对游戏的兴奋感。
(内容有缩略,关于本文的译文搜索“怎样为游戏设计新手教程?海外开发者分享了6点建议”应该就能找到了)
-
-
RE: 如何实现选择框只能选择一个,且必须选择一个?
你说的那个方法有疏漏,如果操作的人执行了长按移开后再松开的操作,就会触发不了,如下:
结果如下,会出现没有必选一个的情况
简单来说,就是选中框的默认状态切换方式,是按下时按在选中框,然后无论在哪里抬起时,都会触发这次状态切换,如果你写的事件没有覆盖这个操作的话,就会被这个默认的方式干扰导致以上情况
如果不用选中框组件,而是自己用精灵自制选中框效果的话,你说的方法就很好用 -
RE: 设计思路分享——设计游戏新手教程的建议
之所以想分享这篇文章,其实也是想给论坛里正在制作游戏的各位一个思路指引,目前已经能看到不少唤境使用者的优秀作品了,包括在官方群里,也常常能看到各位发自己的游戏测试链接,但是也常常听到试玩者发出这么一个疑问:“这个游戏怎么玩?”。因为作为制作者,其实是对游戏机制(或者说游戏玩法)了若指掌的,所以会比较容易忽略新手教程的重要性,甚至可能偷懒直接弄一大串文本让玩家看,不排除有愿意逐字逐句读这些说明文本的玩家,但不可否认的是确实容易让人第一印象变差。 关于上面分享的这篇文章,我个人的看法是:作为游戏制作的兴趣爱好者或者游戏制作的入门从业者,上面提到的建议不一定硬要全部做到,还是根据自己的情况取自己觉得可行的有帮助的几点来做就好,毕竟不同的游戏类型适用的点也不一样,强行做到以上内容可能会适得其反,所以主要还是纯粹分享这个设计新手教程的思路,希望各位早日完成自己的游戏作品。
-
RE: 求一个华容道小游戏的制作思路
对于1:方法算是挺多的,但是复杂程度有高有低,我想到的主要有两种方法 ①(因为需要掌握数组组件,相对较难)通过数组+随机数来生成一组次序被打乱的序号组,根据这个打乱后的序号组,在格子上依次生成对应编号的拼图块。 ②(相对简单,但是比较繁琐)把拼图块和格子在舞台上摆好,拼图块先摆在屏幕外,格子用实例笔刷刷好, 然后对每一个格子实例,在“不在屏幕内的拼图块”中随机一个实例,把随机到的拼图块位置设置到当前的格子实例上去。 效果预览(可以看到两次的随机结果是不一样的):
对于2:这个会涉及两个图块的选中,方法也是挺多的,比较直观的是比较位置,选中第一个图块后,用变量记录下第一个图块的位置,然后选中第二个图块时,也是如此,之后判断它和之前的图块的位置差异([两者x相同,两者y的差值为一个纵向的格子间隔距离],[两者y相同,两者x的差值为一个横向的格子间隔距离],这些情况只要满足其一即表示为相邻),然后彼此设置位置为对方的位置,即完成交换。不过这个免不了要理解“实例选择”的机制,这里只提供思路。
对于3:判断拼图是否已完成,其实就是完成“判断所有的图块是否都已在对应格子”这件事,给拼图块和格子一个相对应的编号(例如20个格子,它们的编号分别是1,2,3……,正确的拼图块排序也是这样,编号分别为1,2,3……),先把计数用的变量设置为0,对于每一拼图块,当它的编号与重叠中的格子的编号相同时,计数用变量的值+1,最后计数用变量的值跟格子数量相同时,表示都摆放正确,则拼图已完成。官方的模板里好像也有一个拼图模板,你也可以看看里面是怎么判断拼图已完成的。
-
分享一下自己制作的卡牌战斗系统的模板
花了一段时间整了个卡牌战斗系统的模板,已经发给官方了,在引擎那边应该能看到下载,大致的一些截图内容如下:
不过因为模板可自定义的部分较多,模板说明写在项目里不太方面,所以就写成文档放在论坛这边了:卡牌战斗模板使用教程.zip
祝各位使用愉快,有什么问题也可以回复在这个帖子中。 -
RE: 关于锁链物理能力的设置!!
简单来说就是用物理能力的"创建距离链接"的动作 做了个简单的范例工程,可以研究看看 简易链条效果.evk
这个还可以用来做锁链怪一类的效果: 头部需要用绑定能力的软连接跟根部绑定从而限制头部的活动范围,防止单纯的物理能力被拉扯过头。 简易链条效果2.0.evk
-
一个2019年总结的免费可商用字体大全
转自微博博主“优秀网页设计”,原博地址:https://m.weibo.cn/status/4343545931956801?sudaref=login.sina.com.cn 这里为了方便把下载链接贴过来了:百度盘,提取码:ugkw 比较在意字体版权问题的话可以看看这些字体。
-
RE: 想把骰子的值赋予给变量,弹出的不接受string类型
应该是这个表达式的返回值是字符(string)类型的缘故,加一个类型转换的表达式吧,改成 int(概率.GetCurrentDiceAt(0))
-
RE: 请问如何在场景内的一个随机位置生成随机的怪物?
@甜咖啡 在 请问如何在场景内的一个随机位置生成随机的怪物? 中说:
首先你可以创建一个透明精灵,起名比如叫“生成区域” 把它放在你要生成怪物的地方,可以调整大小 事件这样写,就会在这个区域的随机一个点上生成怪物了
随机怪物的话,在这位朋友的基础上,把“创建实例”动作换成“按名称创建实例”,然后名称部分填choose()表达式,把你想要随机的怪物对象的名称都写上就行了,例如choose("怪物A","怪物B","怪物C"),名称要用字符串(英文双引号包裹的文本会变成字符串),名称之间要用英文逗号隔开。(choose表达式的意思是从他的这些参数中随机选择一个参数作为该表达式的值)