撰写了文章 更新于 2019-02-25 10:29:23
godot第三弹:创造一个真正的地牢冒险者
昨日制作动画时,遗留两个问题:
1.GD Script只会写在游戏的最外层脚本,未实现其子结点分别运行脚本。
2.Animation Player 制作关键帧动画的用法,如何导入帧图片,播放动画等。
希望今天demo完成后能解决这两个问题。
游戏背景:
地牢类型的RPG游戏这些接触挺多,比较经典的是早年的《魔塔》系列。它是玩家控制角色在俯视角的地图上进行打怪、开宝箱、走迷宫等行为。一直以来,不清楚它角色的控制、镜头追踪、地图碰撞等的制作原理是怎样的。看完这个教程,发现它并不复杂。掌握了这些原理就可以制作一款属于自己的地牢冒险游戏了!
核心玩法:探索、解谜、冒险、养成
今日任务:
1.使用Animated Sprite创建主角的上下左右移动动画,并通过代码移动它。
2.创造摄像机对角色进行追踪(镜头跟着角色走)。
3.增加角色和场景的碰撞,使角色无法穿墙。
4.关于动态语言的学习
学习心得:
1.动态语言的特点
a变量的类型不固定,它随着赋值类型的变化而变化
b函数参数没有固定类型,它随着传参的类型而变化
c指针或引用是 自动收集的垃圾,不再使用时被自动删除。
d数组可以包含许多不同的混合数据类型,并且始终是动态的(可以随时调整大小)。
e字典可以将任何值映射到任何其他值,完全不考虑用作键或值的数据类型。常用来实现二维数组。
f迭代很简化 for s in strings:print(s)即可。
2.今日重新制作了角色的上下左右移动的动画及代码。动画选用的是第一种实现方法。导入序列帧即可。上下左右的动画可控制,但上下的边界判断有BUG。走到下的边缘后,会从屏幕中间的某个位置显示出。
这是对坐标系和脚本里的方法不够熟悉。
3.游戏制作时,如何解决玩家角色可在地图区域内任意行走,以至于超出屏幕边框?
这里作者在教程里总结的很好。解决思路有3种:
a 限定角色的移动范围,当移动出屏幕时,只能原地播放行走动作。
b 制作碰撞墙体和角色碰撞体,限制角色的行走。
c 让屏幕跟随角色行走,遇到地图边缘则停止。
关于摄像设置方法
a新建Camera 2D与主角层级平行。
b在摄像机的监视器勾选 Camera 2D 的 Current 属性,激活摄像机。
c Zoom可设置摄像机的比例大小
d 在Project Settings中设置 stretch,Mode 为 2d ,缩放Aspect 设置为 keep即可。
设置完成后,在主场景脚本中所有涉及到人物移动控制的地方增加脚本:
Camera.position = Role.position //这样摄像机就会严格随着角色的移动而移动了
4.承接上个问题,摄像机可以跟着角色走了。但人物还是能走出场景,解决方法时:添加碰撞体。这次要完成的是,代码实现 Rigid body 2D 刚体结点的运动。
a 给墙壁添加的是静态碰撞体,而给人不能添加静态碰撞体。因为人会移动。
b 制作动态碰撞体时,sprite应该作为碰撞体的子结点。(前文有该内容,不能再犯错了)。所以主角用RigidBody 2D制作,而墙壁用StaticBody2D
c 遇到一个问题当新建一个刚体,将原来的Player放置于刚体的子节点中时,报错找不到Player。后来在群里求问得知,是路径的问题。
Role = self.get_node("新建刚体/Player") //初始化时,变量需要找对应的实例。如果修改NODE的层级关系,而并没有修改代码中对应的路径。就会报错找不到对象。
遗留问题:
a 有关刚体的未完成。刚体的移动是个难点。
b player改变层级后,运行摄像机和主角的比例出现问题。主角变得很小很小。明天查找原因。
b找到原因:外层的刚体设置过缩放比例,内层的player也设置了缩放比例。二者同时缩小,会变得很小。心得是要管理好结点。