首先我们做一个点一下数字+1
首先需要有个文本ui在画面上,于是我们加个两个label 加入场景,
外面呢个里面的文字是”当前饼干:“这个常量文字,里面的是数字
但是发现label里面text当输入中文的时候是不显示的,因为默认的字体是不支持中文的。
于是要改一下这个label的字体,支持ttf格式
找一个支持中文的字体,没有的可以在最下面连接里面下载,然后
在custom font里面新建一个dynamicfont 然后font data里面选择这个ttf
为了防止以后每次新建需要文本的节点都要区设置一下font 于是右键dynamifont 然后save
保存进一个你记得住的目录里面下次可以用。
然后修改下脚本,移动下位置。
这个时候在运行,你就会发现当你点击一下饼干,饼干上面的数字也会跟着增加。
但是这样看上去太单调了,至少加个点击反馈会感觉好一点。
创建一个动画节点。
就是我选择的这个,他非常方便,一切皆可动画。
然后选择动画节点,点击下面的animation new 新建一个动画随便取个名字,
然后你会发现当你选择动画节点后,中间下面出来的这个动画框你不把她关掉的话,所有属性都会在最后有一个钥匙的图案。
当你点击钥匙时,就会在这个动画框里面新建一个帧。
我这里选择了饼干的的rect_scale 属性然后ctrl +d 可以复制 或者可以吧呢个线拉到后面 再添加一贞,然后你可以选择后面的呢个再熟悉栏里面修改大一点比如4然后点击动画兰里面的运行,或者手动拖拉这个线就可以看到效果。
但是这个时候放大会发现,它不是中间放大的,会偏移。可以调整中心点
吧中心点设置中间,就可以中心放大了。
然后就是再脚本里面播放动画。
现在运行下看看
发现效果不好只有变大效果,再加个变小的效果,然后时间紧凑一点
这个时候会发现他的速度时恒定的,可以通过改变右边的easing 来改变动画先快后慢还是先慢后快,1时动画前后速度一样块这个自己玩一下就知道了。
最后我调出来的效果。
虽然感觉不是很完美,但是大家知道意思就行了,因为这是个艺术问题,而不是一个技术问题。
然后再脚本中修改一下前面的播放动画。
这样在运行就完美了。
但是这样还是差点感觉,反馈似乎还是有点欠缺。
我准备再加一个”+1“的效果。当饼干被点击时出现一个+1 往上漂浮然后消失。
我的思路是这样,先创建一个场景它里面有一个文本+1 一个动画,然后动画时让+1 往上漂浮 然后过一秒中释放他,然后点一下饼干就创建这个场景到主场景。
首先创建一个节点label和ani结构如图,
然后制作动画,
效果差不多这样。一个是移动了位置还有一个是改变了颜色的透明。
然后把它勾上自动播放动画。
就是这个。
然后保存他为场景
保存完毕后它就变成了这样,不能编辑了。但是可以在
保存的路径里打开它再去编辑他。
现在给这个+1的节点加个脚本,呢就是0.5s 后让他自己销毁。
可以加一个时间的节点
wait time设置0.5s 因为动画是0.5s 播放玩动画自己销毁。
加入脚本。
然后再回到前面的main主场景
修改饼干的脚本。
运行并看下效果
发现有几个问题,第一+1被放大了,因为+1被加到饼干里面所以是他的子节点,所以父节点变大,子节点也会变大,第二位置不是想要的位置。
这个时候位置可以通过手动tscn.rect_position.x=xxx,tscn.rect_position.y=xxx来手动调整位置。
和tscn.rect_scale.x .... 来手动调制大小。
但是有个更方便的方法。
创建一个control节点并把他移动到想要的位置上,然后+1就放到它的里面。
然后脚本里面修改下修改到加到pos节点里,然后运行看下效果。
突然感觉还是大一点比较好。
如果想要修改字体大小的话可以在这里,
但是有一点要注意,你修改了后,所有用到此字体的都会修改。为此你要事先make unique一下如下图。
这样这个资源就是独一的了你修改后不会影响到其他节点。
最后代码
#+1的场景
extends Label
func _ready():
#时间节点超时0.5s 调用_on_timeout
$time.connect("timeout",self,"_on_timeout")
pass
func _on_timeout():
#自己销毁
queue_free()
pass
#饼干
extends Button
#默认饼干数量0
var cookies_num = 0
#+1的场景
var _1=load("res://scene/+1.tscn")
func _ready():
#创建按钮按下信号到_on_pressed方法上
connect("pressed",self,"_on_pressed")
pass
func _on_pressed():
#按下时饼干数量+1
cookies_num+=1
#获取我的上一级里面的文字节点里面的数量节点改变它的text
#cookies_num 是数字类型 要转换成文字类型才能赋值给.text
$"../文字/数量".text=str(cookies_num)
#先暂停之气那播放的动画
$"../ani".stop()
#播放ani节点的click动画
$"../ani".play("click")
#添加+1的效果
add_1()
pass
func add_1():
#实例化_1的场景
var tscn = _1.instance()
#添加到当前场景
$"../pos".add_child(tscn)
最后我稍微调制了一下上图为最后的效果,录制gif的软件有可能效果不大好。。
最后可以想想如何让这个现在虽然看上去很单调的游戏变得好玩起来,发挥你对游戏独到的见解。比如饼干可以购买道具,然后道具可以自动购买饼干等等。
点击这里下载本次资源kylacpp.cn如果你对这个引擎或是我的教程感兴趣的话可以加入我的qq群:691534145
虽然里面有很多水货,但这应该是国内最活跃的godot engine 并且讨论游戏的讨论群了。