GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

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

[ 分享 ] 9.ADDING ENEMIES, DEPTH, AND INHERITANCE(增加敌人,理解深度和继承)

Linpean 2017-11-01

本系列是油管上的HeartBeast[Beginner] Make an RPG课程的中文笔记,主要形式是截图的方式进行步骤上的说明。面向对象:GameMaker新手,以学习一门脚本编程语言,制作一个RPG游戏为目标的爱好者。

本节主要内容:

        实现效果为,让地图出现一些怪物,并且这些怪物是会追着角色跑的(即向着角色的坐标进行移动)

  • 创建史莱姆的精灵
  • 创建史莱姆对象
  • 将怪物设置在房间中
  • 创建史莱姆的移动代码
  • 史莱姆碰撞事件
  • 父物体和继承
  • 深度控制

首先要在游戏里放物体,自然是要遵循通用的规则:先创建精灵,创建对象,拖到对象到房间里。


创建史莱姆的精灵

命名为spr_enemey_slime,并导入精灵图片

创建史莱姆对象

创建对象obj_enemy_slime,然后选择精灵,并且设置对象的碰撞盒形状


选择形状的类型为Convex Shape自由设置顶点形状,然后将形状拉成三角形


注意在这个过程中,碰撞盒的形状不可以是内凹的,这是GMs进行顶点计算所要求


将怪物设置在房间中


并设置obj_enemy_slime的create事件:控制动画播放速度


创建史莱姆的移动代码



史莱姆碰撞事件

依次创建obj_enemy_slime与人物,墙体,史莱姆本身的碰撞事件,在碰撞事件内不用添加代码,只需要添加一行描述即可,表示需要调用碰撞事件


同样的我们需要修正旋转的问题


父物体和继承

创建一个对象,命名为obj_lifeform_parent,设置它与墙体的碰撞(同样的碰撞事件内不需要书写代码, 只需要添加注释说明即可)


然后回到obj_player中来,设置它的父物体为obj_lifeform_parent,这样就可以删除掉它本身的与obj_wall的碰撞了,因为它继承了父物体obj_lifeform_parent的属性(包含了与obj_wall的碰撞)


//继承是指子物体继承父物体的变量属性和事件


将修正旋转的代码也移动至父物体的create事件中,因为会将obj_player和obj_enemy_slime的父物体都设置为lifeform,所以可以移除两个对象的互相碰撞事件了,只需要添加与obj_lifeform_parent的碰撞事件即可。


对应在lifeform对象的create事件中,添加修正旋转代码,移除obj_player和obj_enemy_slime的旋转代码,设置它们的父物体为obj_lifeform_parent


注意这里有个问题,如果父物体和子物体都存在相同的事件时(如create事件),如果想要在子物体中含有父物体的属性,就需要在子物体中使用函数event_inherited(),不然就只会执行子物体事件中的内容


深度控制

在lifeform事件中,添加深度控制的代码


同样的,要在子物体(obj_enemy_slime)的对应的step事件中添加事件继承代码



近期喜欢的会员

 

加入 indienova

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