Godot背包系统(三)

本文介绍了如何在Godot中创建背包系统,包括移动背包的代码实现,通过在Panel上添加脚本来控制Inventory1节点的移动,并确保在抓起时背包不会从窗口移除。接着,详细讲述了如何为Inventory1添加代码,以及放置格子的步骤,通过实例化格子到GridContainer,并定义数组以方便后续遍历和查找物品的操作。
摘要由CSDN通过智能技术生成

移动背包

首先添加一些代码移动背包。在Panel添加脚本。
在这里插入图片描述

extends Panel
#获取当Inventory1节点,这里你也可以写get_node("../.."),下面这样写的话,无论Panel在什么位置,都可以获取到Inventory
onready var parent:=owner if owner.name == "Inventory1" else owner.get_node("Inventory1")

var drag=false
var offset:Vector2=Vector2.ZERO

func _input(event):
	if drag:
		parent.rect_global_position=event.global_position-offset
		
func _gui_input(event):
	if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
		drag=event.is_pressed()
		offset=event.global_position - parent.rect_global_position
		

这代码不难理解,获取当前场景根节点,因为我要移动不是Panel,我要移动的时Inventory1节点。
设置偏移值,这样当鼠标点击背包时,背包的原点不会跳到鼠标位置,而是保持着一定距离。

为Inventory1添加代码

为了实现背包抓起时不移除窗口,在Inventory1添加一下代码:

extends Panel

var screen_size:Vector2
var title

func _ready():
	screen_size=get_viewport().get_visible_rect().size
	title=$VBoxContainer/Panel
	
func _input(event:InputEvent):
	#限制背包的移动范围,只能在视口里移动
	if title.drag:
		rect_global_position.x=clamp(rect_global_position.x,0,screen_size.x -rect_size.x)		
		rect_global_position.y=clamp(rect_global_position.y,0,screen_size.y -rect_size.y)

放置格子

现在要把格子实例化到GridContainer,添加一下代码到刚才的Inventory1.gd:

extends Panel

export var slot_scene:PackedScene

#最大格子数
const MAX_SLOTS = 45

onready var slot_container:GridContainer=$VBoxContainer/ScrollContainer/GridContainer
#存放格子的数组
var slot_array:Array

func _ready():
	#...接着写
	for i in range(MAX_SLOTS):
		var slot:ItemSlot=slot_scene.instance()
		slot.connect("mouse_entered",self,"_on_slot_mouse_entered",[slot])
		slot.connect("mouse_exited",self,"_on_slot_mouse_exited",[slot])
		slot.connect("gui_input",self,"_on_slot_gui_input",[slot])
		slot_array.append(slot)
		slot_container.add_child(slot)

我定义了一个数组,用来存放格子,这样以后就可以很方便的遍历数组,找东西了!
当你完成以上代码,因该会有这样的效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想打工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值