现在开始拓展一点新的东西,我准备做个鼠标手购买后可以自动点击饼干。
在频幕上显示图片用这个,中文称为精灵。
但是这个按钮太丑了,我想给她重新换个样式。这里有两种办法,第一用图片代替他,
第二重新设置它的样式,我准备第二种方案。
悬着custom styles 里面hover 是鼠标移上去,pressed鼠标点击,focus是获得焦点,disable是禁用鼠标的样式,normal是默认样子,新建boxflat
随便修改了一下。
然后在mouse节点上新建一个脚本。
然后加一段脚本
这个时候突然想到,如果我要点击按钮然后扣除饼干的话我要去饼干节点去拿他饼干,显然有点麻烦,肯定要用一个全局脚本之类的大家掉用起来方便。
project setting 里面的autoload 里面可以设置全局脚本。
在更目录下新建一个文件夹,global,然后新建脚本。
像这样
把他加进去记住他的name,这个可以自己自定义。
里面加上这个。这个时候仍和地方的脚本要调用这个全局脚本里面的变量或者函数只要,http://Overall.xxx
然后回到饼干节点的脚本上修改
鼠标脚本修改
看下结果是正确的。
然后准备做个自动点击的动画和效果。
新建一个sprite节点并且给鼠标图片。
然后使用上图中第三个和第6个把他调制到可以围绕着饼干转圈的位置,然后保存
然后打开鼠标的场景,创建动画并且增加关键帧,
效果如下。设置自动播放和循环播放,ok。
然后为其增加脚本,动画没播完一次,就调用自己的某个方法,方法是增加一个饼干
现在脚本之间的联系有点频繁,所以我准备给每个节点都增加一个组(group)
这样调用的时候只需要调用组,就可以调用组里面所有的节点,而无需记录他们的位置。
add_to_group("组名")#添加到组
get_tree().call_group(组名,函数,参数1,参数2,arg3,arg4...)#调用组
最终代码如下
#小鼠标的脚本
extends Sprite
func _ready():
pass
func _add_cookies():
get_tree().call_group("cookies","_on_pressed")
pass
#鼠标的脚本
extends Node2D
var need_num=10
var need_num_proportion=1.5
var mouse_num=0
var mouse_tscn = load("res://scene/mouse.tscn")
func _ready():
update()
$button.connect("pressed",self,"_on_pressed")
func _on_pressed():
if Overall.cookies_num<need_num:return
#减少饼干数量,增加鼠标数量
Overall.cookies_num-=need_num
mouse_num+=1
need_num*=need_num_proportion
var tscn = mouse_tscn.instance()
$"../pos".add_child(tscn)
update()
#更新文本
func update():
$need_num.text=str(need_num)
$mouse_num.text=str(mouse_num)
get_tree().call_group("cookies","update")
#饼干的脚本
extends Button
#默认饼干数量0
#+1的场景
var _1=load("res://scene/+1.tscn")
func _ready():
add_to_group("cookies")
#创建按钮按下信号到_on_pressed方法上
connect("pressed",self,"_on_pressed")
pass
func _on_pressed():
#按下时饼干数量+1
Overall.cookies_num+=1
#获取我的上一级里面的文字节点里面的数量节点改变它的text
#cookies_num 是数字类型 要转换成文字类型才能赋值给.text
update()
#先暂停之气那播放的动画
$"../ani".stop()
#播放ani节点的click动画
$"../ani".play("click")
#添加+1的效果
add_1()
pass
func update():
$"../文字/数量".text=str(Overall.cookies_num)
func add_1():
#实例化_1的场景
var tscn = _1.instance()
#添加到当前场景
$"../pos".add_child(tscn)
然后运行看下效果。
最后加一个背景页面然后加个分隔栏。然后脚本修改下
加一个neednum = int(neednum)这样就可以防止小数了
如果你对这个引擎或是我的教程感兴趣的话可以加入我的qq群:691534145
虽然里面有很多水货,但这应该是国内最活跃的godot engine 并且讨论游戏的讨论群了。