撰写了文章 更新于 2017-05-03 10:30:45
gms2制作demo的熟悉笔记5.2
idea源自于毛子游戏《瘟疫》评测中的一句话,将《瘟疫》这个游戏形容为“决断的练习”
啊对了,图片没有任何意义,只是试了一下刚入手的GMS2,魔法飞弹(物理)
btw,想尝试仅以GMS2的D&D方式做出来,祝我好运(滑稽
- 已完成部分
- 倒计时系统
- 人物移动
- 子弹向鼠标指针飞行
- 隐形参数单位整合数据
- 掉落物改变属性
- std武器和子弹
- 子弹的产生和飞出屏幕自动消灭
- 图形的深度(exec depth=-y,D&D没有深度功能( ̄▽ ̄") )
- 受伤无敌机制
- 武器切换系统
- 武器捡取的更换
- emotion
快节奏
抉择——升级.异变
限时关卡
2D射击
枪械
魔杖
近战
- 游戏流程
Enter the dungeon的伪2.5D射击游戏
选择人物
选择已解锁要素N选x
进入room
生成地图和刷怪
倒计时
初始武器随机(武器库解锁T1)
杀敌获取XP
升级时获得升级回报——随机N选1,按键选择
特殊道具解锁武器掉落
掉落:
补给
武器配件
武器熔炼器
主动道具
倒计时补充
!决断(敌我皆获得强化)高风险高收益以抢得时间:
所有子弹速度提升
移动速度大加快、血量大降低
受伤无敌时间大延长、伤害大提升、血量极大降低
……
- 进度
demo开坑
数据归入隐藏单位obj_init,create事件中对数值进行初始化,所有全局数值仅从该单位调用或对该单位进行修改
- obj_init
- √create,创建时初始化游戏参数
游戏启动开关GameStart
子弹速度BulletSpeed
玩家移动速度X
玩家移动速度Y
玩家射击间隔ShootInterval
……
——
Variation_Move
Variation_Damage
Variation_HP
Variation_Bulletspeed
Variation_ShootInterval
……
——
变异值,例obj_init.Player_MovespeedX*obj_init.Variation_Move
其他obj使用参数时以obj_init.参数进行调用
- 倒计时系统
obj_init的create事件中初始化关卡倒计时LevelAlarm=40,step事件写入var levelalarm-=-1/30(每秒30帧,该值每帧减少1/30),并通过draw事件draw variable绘制
- 人物移动
obj_player的step事件中设置按键触发jump to point相对xy的值, 调用obj_init.Player_Movespeed值
- 子弹向鼠标指针飞行
创建所有子弹单位的父obj_bullet_all,create事件添加set direction,目标mouse.x、mouse.y,并添加速度set speed,调用obj_init.Player_BulletSpeed
- 隐形参数单位整合数据
obj_init、obj_bullet_all、obj_player_all等隐性单位作数据存储
- 掉落物改变属性
掉落物collision-obj_player_all事件,var variable obj_init.参数
- std武器和子弹
sprites随手绘制了几个武器和子弹,obj添加
- 子弹的产生和飞出屏幕自动消灭
产生:if canshoot = 1,通过武器obj_weapon_all(而不是角色的开关)在鼠标左键按下时创建子弹,step事件,将伤害值分别放在weapon.obj的create事件中
射速功能:创建子弹后设置 obj_init 的canshoot=0,并触发alarm,时间为obj_init中的射击间隔Player_ShootInterval,该alarm内容为var canshoot=1
消灭:outside room事件,destroy instance self
- 图形的深度(exec depth=-y,D&D没有深度功能( ̄▽ ̄") )
step事件随时刷新图像深度,执行代码exe code行为,depth=-y
- 受伤无敌机制
obj_init的create事件添加“var Player_canhit=1//可被击中”和“var Player_restat=15帧//无敌时间”
敌人create事件设damage=1
collision事件对象为player,内容为“碰撞时 if obj_init.Player_canhit=1,obj_init.player_HP值 +=【-(damage*obj_init.Variation_Damage)】,并将obj_init.Player_canhit=1值设为0,并触发alarm 0,倒计时为obj_init.Player_restat”
创建alarm 0事件,事件内容“var obj_init.Player_canhit=1”
即如果敌人与玩家发生碰撞,如果可以被击中,则玩家HP减少敌人伤害值乘异变值,同时关闭玩家可以被击中开关(取消碰撞),倒计时“无敌时间”之后重开启开关
- 武器数据库
obj_init中create事件初始化数值,分别设定weaponID
- 武器切换系统
gms2坑的离谱的D&D下if.else命令吃掉了三四个小时用来试错,试了好几种方式试图规避问题,最后发现D&D下的if.else是同级而不是gms1的归属关系,即
if
{
}
else
if
{
}
else
的区别。
通过
- 武器捡取的更换
- 武器系统
- 武器跟随人物的实现
obj_weapon_all,step事件随时刷新,目标self,jump to point实时刷新位置到obj_player_all.x、obj_player_all.y
……未完