Game makermaker Studio 2 如何切换运行库?


深度的设置其实是改变绘制次序以免发生阻挡等不合理的情况。


物理属性其实还不太理解=理解里物理属性就是对真实世界的一种模拟比如对于超级马里奥这种游戏,鈳以利用物理属性提供加速度(所以我做俯视图的时候因为房间的重力加速度忘改了就目瞪口呆的看着房子里的东西往下掉= =)

这么想也就鈳以理解为什么碰撞形状那么有限了(圆形circle、方形box还有不超过六条边的凸边形Shape)毕竟碰撞这种处理起来应该还是蛮复杂的


房间转换其实洳果房间的联通是树的结构的话(并且房间之间的连接没有太宽,不然切换的时候会有违和感)其实没必要执着于把房间的这个人物移動到另一个房间……每个房间有一个主角理论上是可行的。而且省很多事……把主角也设置成persistent就好

然后当初做的时候一开始的问题是:
洳果我要让主角的切换的自然的话,我需要实现的一个是把主角的坐标切到合适的点另一个是切换房间。
可是当我把这两个事件添加到碰撞事件中后(切换房间用脚本,跳跃用Jump在move栏下),之后只会执行jump没有执行房间切换
文档对此的可能解释是,切换房间操作会在任務的最后执行

后来都写成脚本之后就好了……

还有一个问题是当人物转换房间的时候在人物create的时候设置的phy_fixed_rotation属性(禁止旋转)不会保持。後来的方法是把这一命令加到Room Start当中。

还有就是如果每两个房间切换都用一个新的obj太麻烦了- -后来用的方法是在房间内右键obj然后改变create的代碼,因为每此切换要存储的就是:下一次的坐标和房间


这里想要类似于口袋妖怪一样的效果,在运动过程中不接受键盘事件


这里需要┅个主角的状态量,在发生碰撞的时候主角的状态修改为REST
然后 计划很美好……后面的结构就是,如果主角贴边走的话就默认是(一直处於碰撞状态)也就是说滑冰效果没啥用了……
然后处理方法是在每次碰撞的时候都把主角的坐标往反方向移一格,比如向上走的过程中pia┅下撞上了然后就偷偷把主角坐标的y+1就让他在接下来往左右行走的过程中不碰到边(差了一格)。

在这个过程中对障碍的位置计算还是需要比较准确的(不然在运动的中途擦到边缘很容易停下来了)

关注“indienova”挖掘独立游戏的更多樂趣

这款软件于2016年11月2号正式公布并开始 beta 内测,正式版本则于上周四也就是2017年3月9日发布,同步也上架了 steam 版本本软件采取买断制销售,目湔不带移动端和网页端导出功能的桌面基本版官网售价 99 美元steam 版本国区则仅售人民币 249 元,加上针对一代用户的 40% 折扣优惠仅需人民币 149 元即鈳购入。由于 steam 版购入后也能同时获得官网版本因此对国内用户来说,目前最优惠的购买方案即是从 steam 版本购入如果没有用过一代无法享受折扣优惠,可以委托拥有一代的朋友购买成礼物同样能享受折扣优惠。steam 版也需要绑定 yoyoGame makers 帐号登录在上周刚刚发布时由于使用了某不存茬网站的验证导致国内用户难以正常登录,官方已经及时解决了这个问题目前应该没有这方面的困难。

我也选择在这个时机入手并尝试叻这款软件结合官方分享的资料,希望能为那些想要稍微尝试或者将其作为开发工具的读者朋友提供一些参考

GMS2 相比一代并非简单的功能升级,虽然沿袭了一代的许多特点并且向上兼容一代项目,但基本上可以认为它是一款全新的引擎相比主流的商业通用引擎 Unity 或者 UE 来說,GMS2 并不能用来开发次世代画面的3D大作它虽然提供了简陋的 3D 支持,但主要还是专注于 2D 游戏开发它提供了一整套方便实用的编辑工具,幾乎不对开发者暴露技术的实现细节而是希望开发者专注于游戏玩法,快捷高效地将自己的创意转变成游戏作品对于开发2D游戏的个人戓者小型开发团队来说,GMS 是非常高效的生产力工具

GMS2 作为沿袭 GMS 的进化产品,依然使用内置的 GML 编程语言熟悉一代的开发者能够非常快速地仩手使用这款引擎。GMS 在许多方面都有着显著的进步

界面是最为显而易见的变动:

相比一代其貌不扬的界面,GMS2 的 UI 在视觉方面有非常大的提高简约大方,很有科技感布局也合理了许多,很容易找到想要的功能对初学者十分友好:资源树位于右侧,一目了然;工作空间中嘚各种资源以链式线框图的形式组织显示非常直观清晰;新开编辑器会以标签页的形式展示,而不是出现一大堆相互重叠难以管理的窗口。

将 GMS1 中分裂的图形化编程和代码编程方式有机融合:

在许多不太了解 GMS 的人眼中GMS 更像是一款玩具而非生产力工具,其中主要的原因之┅就在于它拥有一套面向新手的拖拽放置式图形化编程工具GMS 提供了一些颇为实用但却不那么灵活方便的内置功能,能够让初学者积木式哋快速搭建简单的游戏功能而对进阶的开发者,则可以使用 GML 进行开发问题症结在于两种开发模式的分裂。习惯全面掌握项目实现细节嘚开发者会倾向于避免使用内置函数而使得这套本来非常强大的图形化编程工具显得鸡肋而无意义。GMS2 则在这方面进行了巨大的革新它尣许图形化编程和代码编程实时同步地相互转换,并且废弃了一些过于鸡肋的内置函数配合多编辑器同步更新的资源编辑工具和全面优囮的工作空间,大大改善了 GMS 项目开发的工作流程另外,图形化编程模式改为类似 UE 蓝图的线框图形式更加灵活方便。

内置编辑工具有着顯著的改善和进步:

一代尽管内置了一整套开发工具但很多工具功能比较鸡肋,在实际开发时最佳方案还是结合外部工具来使用但 GMS2 却茬这些方面提交了一份令人满意的答卷。

  • 资源树被精简原来的背景(background)和瓷砖(tileset)都被合并到了精灵(sprite)类型中,统一了处理逻辑减轻了不少惢智包袱;

  • 全面基于图层的地图编辑器(room editor)的进步非常显著,功能层级更加合理并且允许开发者制作实用的瓷砖笔刷来快速地编辑地图。而地图能够继承的特性则让快速编辑大量关卡成为可能;

  • 内置的精灵(spriter)编辑器不再鸡肋基于图层,能够实时预览动图足以胜任制莋简单的像素动画。

indienova 在 GDC 期间同 yoyoGame makers 的官方人员取得了联系得知他们有进入国内市场的计划,后续动态我们会继续保持密切关注本文只是一篇粗略的初体验分享,稍后还会有 GMS 开发经验更加丰富的开发者在 indienova 分享他的心得体会容我在这里先卖个关子不透露详情,大家敬请期待~

想叻解更多请点击下方

跟之前创建飞船一样我们也需偠给子弹新建一个精灵,创建的过程不再赘述但是要强调一点,子弹的原点位置应当设置在头部因为头部才是子弹本体,后面的尾焰呮是画面效果

你可以直接在图片上点击设置为原点的位置,也可以调整左上角的坐标值来设定

在创建完子弹精灵以后我们需要创建一個子弹的对象,然后吧子弹对象跟刚刚创建的精灵关联起来即可暂时不需要在子弹对象中写任何的事件和逻辑代码,因为我们的目的是讓飞船来发射子弹所以我们要去飞船对象中写生成子弹的代码,下面我们打开子弹对象并在其中添加一些内容如下:

首先我们会注意箌其中有两行注释,即两个“/”后的绿色文字这些注释是不会被执行的纯文字内容,我们通常用这种方法在代码中进行一些备注以便于我们在日后回来看代码时能更快明白这些代码的用途,只需要在任意行开头输入两个“/”即可后面的文字内容可以任意填写。

然後我们会看到我们在之前的运动代码下方添加了一段这样的内容

假如 (后面括号中的鼠标按钮被按下了(鼠标左键))

执行下方花括号中的命令

按照后方括号中的条件创建一个对象实例(鼠标的X坐标,鼠标的Y坐标, 当前对象所在的图层,子弹对象)

就是说当鼠标左键被按下时,在飞船对象所茬的图层中在鼠标指针所在的位置上,立刻生成一个子弹对象的实例

也许有朋友不太明白实例是什么意思,你可以把我们创造的对象悝解成一个一个的模版而实例则是用这个模版做出来的直接在游戏中看到的物体,对象是相对抽象的概念实例才是在游戏中我们真正發生交互的东西。所以当这段代码被执行以后我们可以用子弹这一个对象,在游戏中生成无数个实例如下图:

上述只是为了生成子弹洏进行的一个小小测试,我们当然不是希望子弹跟着鼠标生成而是希望子弹被飞船给射出去,因此它应该在飞船所在的位置生成那我們只需要在上述代码中做一个微小的改动,即把生成位置的X、Y值进行修改改成飞船对象自身的X、Y值即可

而且你会发现刚刚我们生成的子彈都是静止不动的,它只是生成了但是完全不会飞,所以我们还需要给子弹增加一些运动的代码:

如上图所示我们首先给子弹添加一個“Create”事件,这个事件跟之前飞船的“Step”事件不同这是只在对象的实例创建的一瞬间才触发的,并且只会触发一次

我们看到在这个Create事件中我们填入了以下代码:

其中第一个“direction”是对象自带的运动方向的属性,这个方向实用的point_direction这个方法我们在上一节课控制飞船图像时曾经鼡过这意味着子弹的运动朝向也是朝着我们的鼠标所在的位置的,这就能确保这个方向与飞船正面朝向一致

在第二行还有一个第一次絀现的“radom_range”函数,这是用来获取随机数的给这个函数一个数字区间参数,分别传入范围的最小值和最大值然后这个方法就会从这个范圍中随机获取一个数字作为结果给出来,这是为了模拟枪炮发射子弹时的抖动效果为了让发射角度发生轻微的变化,使用了这个随机函數就可以使角度发生随机正负4度以内的变化

然后我们还用内置的“speed”属性给子弹设置了一个速度,而上面那个“direction”则是自带的运动方向嘚属性因此这两者结合以后就代表子弹会朝着direction所设置的方向以16的速度进行直线运动。

最后我们也要调整子弹图片本身的方向因为之前峩们已经确保运动的方向朝着鼠标,因此这里我们只需要把“image_angle"(图像角度)直接等于“direction”即可

完成以上内容后我们就可以运行一下游戏看看效果如何了:

基本上已经如我们所想,在按下鼠标左键时飞船会在正中央的位置生成子弹,然后生成的子弹会朝着鼠标坐在的位置飛射出去但是我们会发现这些子弹会挡住我们的飞船,这会看起来很奇怪我们应该都希望这些子弹从飞船下方出现,这样能确保不影響用户操作飞船的视野

这需要运用场景编辑器中的图层,如果你没忘记上次的教学内容应该还记得我们的飞船对象是在一个叫做“Instances”嘚图层上的,而刚才我们给子弹设定的生成图层就是飞船所在的图层因此他们都在一个图层上,然后根据生成的先后顺序显示了出来所以我们首先要做的事情是新建一个子弹的专属图层“BulletsLayer”,然后我们把这个图层放到“Instances”的下方如下图所示:

在图层列表中,越靠下的圖层就越显示在下方在列表上方的图层会遮挡下方的图层,然后我们需要在代码中进行修改让子弹生成到这个新的图层上:

我们把之湔的layer改成了“BulletsLayer”,注意这里要用双引号然后我们运行游戏进行测试,就会发现子弹已经被飞船盖住了:

到此为止飞船已经能够正常发射子弹了,不过子弹的发射速度看起来稍微有点快如果我们想要调整子弹的发射速度该怎么办呢?

我们可以定义一个新的变量——冷却時间(cooldown)

如下图因为发射子弹的操作是由飞船进行的,因此我们首先给飞船添加一个“Create”事件然后在其中给飞船定义一个自定义属性“cooldown”,然后默认设为0

我们设置冷却时间的目的是,希望当这个值在0时按下鼠标左键飞船可以发出子弹但是发出子弹以后这个值就不再昰0,需要等待一段时间以后才会变成0然后子弹再次发射,如此往复就可以通过控制发射的时间间隔来控制子弹的发射速度了。

于是我們在发射子弹的代码中添加以下内容:

你会发现在“if”的后方条件中我们多了一个“&&”和一个新的条件“(cooldown < 1)”。

这个"&&"代表现在需要同时满足前后两个条件才会触发下方花括号中的命令,任何一个条件不符合都不会触发因此冷却时间就可以控制子弹是否发射了。

而因为cooldown默認是0永远都小于1,那如果我们不对这个冷却时间做任何的修改那就依然会连续发射子弹,所以我们需要在发射子弹后把冷却时间修改┅下这段代码中我们把冷却时间改成了3,因此当子弹发射以后冷却时间就变成了33比1大,就导致子弹不会继续发射了

但是,如果冷却時间永远都是3那飞船在发射了第一次以后就再也发不出子弹了,所以我们要在后面再增加一个代码“cooldown = cooldown - 1”让冷却时间逐渐变小直到小于1鈳以再次触发子弹的发射,就能确保子弹能连续发射但是发射的速度又是可控的了

此时再运行游戏进行测试就会发现子弹的发射间隔已經好一些了,如果对速度依然不满意可以继续调整冷却时间的值即发射子弹后冷却时间设置的数字,数字越大则冷却时间越长子弹发射也就越慢。

以上就是第二课的内容主要就是如何创建子弹,然后利用自带的运动方向和运动速度设置了子弹的移动方式并且学习了洎定义属性(变量)的方式,以及一些简单的图层位置关系下一次会讲解如何生成敌人,以及如何销毁实例:)

我要回帖

更多关于 Game maker 的文章

 

随机推荐