GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

190 信息 1082 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

译文:GAMEMAKER STUDIO系列:Shadow

highway★ 2018-11-09

作者:Case Portman@thunderhorse studio

翻译:highway★

嘿,GMS苦逼们,我是Case(独立游戏Flynn: Son of Crimson的程序员),今天分享个东西,说说如何在Gamemaker Studio中给2D平台游戏中给角色增加影子。在看本教程之前,你应该对GML有些基本的了解,如果你刚刚接触GML,可能看起来会有点儿吃力。(译注:如果你还在用D&D,赶紧扔掉它去学GML吧,D&D那玩意儿除了外行没人用的,就算你用的很爽,后面想找相关教程都找不到)

下面我会介绍两种不同的风格,斑点影子和动态影子。注意:这两种方法都不适用于斜坡,我可能会在稍后再解决这个问题。

准备开始:

首先你需要一个精灵/对象来应用影子,这个例子中我会使用我们游戏的主角Flynn。接下来,你将要设置你的实体对象(你的玩家碰撞的墙/地板),如果你才接触GMS2还不会做的话,我强烈推荐Shaun Spalding的教程。不多说了,赶紧去订阅他的Youtube频道吧。

斑点阴影

Image title

阴影精灵图

我们将需要一个额外的精灵用来做影子,所以打开精灵编辑器并绘制出你想要的形状,随便你怎么弄,只要它看起来跟下图差不多就行:

Image title

精灵的原点直接设置在影子的中间,然后将其重命名为“spr_blob_shadow”(随便你叫什么)。


代码

OK,现在我们要先写一些代码来检查玩家离地面的距离,不管它的高度如何,影子总是在它应该出现的位置。

打开你想要添加影子的对象然后创建一个Draw事件。我们现在需要声明两个临时变量max_length和solid_object,它们将检查影子离我们设置的对象有多远。

Image title

max_length:离地面有多远,直到阴影消失。

Solid_object:用于地面碰撞的对象(例如obj_solid)。

接下来我们写一个'for循环',它不断检查玩家是否在地面范围内(例如64像素),否则我们就会退出循环。使用函数collision_point,并使用临时变量'ly'来找到我们下方的lengthdir_y(270 - 垂直向下)。

Image title

(此方法也可用于命中扫描,我将在以后的教程中介绍)

译注:作者已经很久没更新教程了~ 哈哈哈

现在我们已经完成了所有计算,现在是时候把它应用到我们之前创建的斑点影子精灵上了。我们声明一个名为shadow_size的新变量。然后阴影需要通过从前面读取变量' i '来检查是否要绘制,如果不满足条件,则停止绘制阴影。

Image title

然后我们绘制影子精灵,它根据上面的计算相应调整自身大小,最后别忘了绘制player本身哦~ 加上draw_self(),把你的玩家精灵绘制在影子上方。

(译注:如果你对draw事件还不是很了解的话,强烈建议去认真看一下F1~)

Image title

好了,搞定~

动态阴影

Image title

我做动态阴影的方法使用了一些可能跟你的游戏中不同的变量,但为了简单起见,我们假设当你转身时玩家的image_xscale会翻转(左边是-1,右边是1)。实际上,我们正在做的是绘制我们的玩家对象的翻转和“压扁”版本,它模仿每一个动作并粘在地上。

(译注:嗯?你突然有一个想法? 嗯,没错,看完了这部分,你也可以做点水在你的游戏里,然后在水中加上倒影~~当然,还有镜子喽~)

所以,从最后一部分开始,我们只需要做一些小改动,首先我们要从spr_sprite_ext的第一个参数中删除 spr_blob_shadow',并用sprite_index替换它,因为这将跟踪你的sprite在对象中使用。

保持在draw_sprite_ext(译注:这个函数如果你还没怎么用到的话,去看看,超好用,比如你想做武器系统啊,换装系统什么的,配上自定义变量非常好玩儿的~)内部,我们需要将shadow_size乘以image_xscale参数顺序内的image_xscale,让影子与玩家一起翻转,然后在image_yscale参数上我们给它-shadow_size,将阴影翻转过来,再除以4以匹配大小(译注:就是压扁它)

我们写完的代码要看起来像下面这样:

Image title

下面我画圈儿的部分是您可以根据自己的喜好改变阴影的方法,但这些值对我的项目来说效果很好:

Image title

OK,完事儿了,动态阴影搞定!


gl 

hf

(转发自:原日志地址

近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册