jstree禁用父节点点击_开始制作第一个游戏(3)(放置点击类游戏)

这篇博客介绍了如何在Godot游戏中制作自定义样式的点击按钮,并实现点击扣除饼干的功能。通过设置全局脚本进行交互,并创建自动点击动画,同时引入节点组以简化脚本之间的调用。最后,添加背景和分隔栏完善游戏界面。
摘要由CSDN通过智能技术生成

010c9faec0cfc37360deba862804873f.png

现在开始拓展一点新的东西,我准备做个鼠标手购买后可以自动点击饼干。

2049ae0b00f9efeed02afbdc6b6096fd.png

在频幕上显示图片用这个,中文称为精灵。

12303353da605524cf6c099a69821e3b.png

但是这个按钮太丑了,我想给她重新换个样式。这里有两种办法,第一用图片代替他,

第二重新设置它的样式,我准备第二种方案。

868207ac58546a2f96528656a729a349.png

悬着custom styles 里面hover 是鼠标移上去,pressed鼠标点击,focus是获得焦点,disable是禁用鼠标的样式,normal是默认样子,新建boxflat

26a14b0dd7eeaf4f58ad5b0cfb5e52c0.png

随便修改了一下。

然后在mouse节点上新建一个脚本。

3ff0fce179f929b079b7777b6eeb4d43.png

然后加一段脚本

9d1c9fd5c051786ebfa45f6b8044f6b9.png

这个时候突然想到,如果我要点击按钮然后扣除饼干的话我要去饼干节点去拿他饼干,显然有点麻烦,肯定要用一个全局脚本之类的大家掉用起来方便。

f2fb24b7c6b724613797417988c45442.png

project setting 里面的autoload 里面可以设置全局脚本。

在更目录下新建一个文件夹,global,然后新建脚本。

3a87f4ae5a73f0c6ee6c14d475bbcf33.png

a6c9c75d17d62db6f7e522dacc2313c1.png

像这样

3fe4b6d372694e70b5c6051b3e6d7f65.png

把他加进去记住他的name,这个可以自己自定义。

20a41a4f7c24fca8ecedcc7f6f2a2b0d.png

里面加上这个。这个时候仍和地方的脚本要调用这个全局脚本里面的变量或者函数只要,http://Overall.xxx

然后回到饼干节点的脚本上修改

553dede09626f8aaf1bf4f7663342e59.png

鼠标脚本修改

91b4597b31309549b7df4bbbc1941f2a.png

7f68a0d67f61b80fb7b25fa4abf93ca7.gif

看下结果是正确的。

然后准备做个自动点击的动画和效果。

b17eea104e34e5289b7aff1891152257.png

新建一个sprite节点并且给鼠标图片。

dadb717f5e2e86e737ec9c71646e3a7e.png

然后使用上图中第三个和第6个把他调制到可以围绕着饼干转圈的位置,然后保存

然后打开鼠标的场景,创建动画并且增加关键帧,

57dc49337fcbca3d2f10a61e95bde50d.gif

效果如下。设置自动播放和循环播放,ok。

然后为其增加脚本,动画没播完一次,就调用自己的某个方法,方法是增加一个饼干

74a1456284c7bb04f13a8f0ae9c8a720.png

6f827241941abe1c15d4c1133163a937.png

1ba06a4901465d1b72386de11123b021.png

现在脚本之间的联系有点频繁,所以我准备给每个节点都增加一个组(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)

然后运行看下效果。

3436b83a3446fab0753e528efad64870.gif

最后加一个背景页面然后加个分隔栏。然后脚本修改下

19c5dd416ea2c259ee4a11d200370f36.png

加一个neednum = int(neednum)这样就可以防止小数了

01cd46291b854d83f0ce28e4202a6f18.png
本次资源​kylacpp.cn

如果你对这个引擎或是我的教程感兴趣的话可以加入我的qq群:691534145

虽然里面有很多水货,但这应该是国内最活跃的godot engine 并且讨论游戏的讨论群了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值