Godot入门遇到的一些问题汇总

动态添加场景

1.func _ready():  
2.    for i in range(50):  
3.        addIconsButton()  
4.  
5.  
6.func addIconsButton():  
7.    #添加自定义图标按钮  
8.    var icon = preload("res://IconsButton.tscn").instance()  
9.    self.add_child(icon)  

UDP接受消息

1.var peer  
2.  
3.  
4.func _ready():  
5.    peer = PacketPeerUDP.new()  
6.    peer.listen(9999)  
7.  
8.  
9.  
10.func _process(delta):  
11.    if peer.get_available_packet_count() > 0:  
12.        var data = peer.get_packet().get_string_from_ascii()  
13.        print(data)#从对象获取数据  
14.        print(peer.get_packet_ip())#获取IP地址  
15.          
16.        var lab = Label.new()  
17.        lab.set_text(data)  
18.        self.get_child(0).add_child(lab)  

使GridContainer里的子控件自适应位置

需要在子控件的SizeFlags里面勾选Expand,同时GridContainer控件本身也要勾选这一项

电脑端是竖着的但是手机上横着使手机画面与电脑一致

 联网发送数据包会多出几个字节

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
sock.bind(("", 9999))
sock.sendto("你好".encode(), ("255.255.255.255", 9999))
while True:
    recv_data = sock.recvfrom(1024)
    text = recv_data[0].decode(encoding='UTF-8')
    text = text[8:-1]
    print(text)
    if text == "getData":
        print("准备发送数据:")
        sock.sendto("你好".encode(), ("255.255.255.255", 9999))

可以看到text[8:-1]

这是因为在godot里使用了put_var函数发送,如果使用put_var()函数就会在前面添加4个字节,因为put_var()是godot程序互相联机专用的,会在前面添加变量类型判断数据

可以使用put_packet()

 安卓手机无法联网

var err = peer.set_dest_address("192.168.31.70",19999)#设置发送地址 端口

看报错是

● ERR_CANT_CREATE = 20

无法创建错误。

查看官方github,是权限问题。解决办法就是打包的时候把权限都勾上

方法一:

方法二:

如果不想都勾上,可以只勾选Internet网络权限

 手机无法安装打包好的APK

提示没有证书,可以通过360签名工具对apk进行重新证书签名

 控件检测鼠标点击事件

参考:InputEventMouseButton — Godot Engine (stable) 简体中文文档

运行时动态修改Panel面板颜色

  1. Panel控件的ThemeOverrides栏添加一个StyleBoxFlat这样就可以手动设置颜色了

 

  1. 核心步骤是第23行,获取到当前控件的属性
  2. 这个属性名可以通过鼠标悬浮属性栏得到,比如

 

  1. 当然除了get函数,也可以使用set函数,一些属性都可以这样得到
  2. 如何在代码里动态设置 Custom Styles【godot吧】_百度贴吧 (baidu.com)

添加自定义属性栏

有没有办法在Godot中创建真正的自定义类型? - 我爱学习网 (5axxw.com)

(65条消息) 【Godot】动态的属性列表 示例_张学徒的博客-CSDN博客

第一种方法:

export var a = 1

也可以指定类型export var a:String

可以看文档查看export用法

第二种方法:

  1. 首先需要在最上面加上tool关键词

 然后需要重写这个内置函数_get_property_list

  1. 最终效果

 控件与脚本文件的关系太乱目录不好整理

新建脚本的时候可以选择内置脚本

这样就是控件场景跟脚本是同一个文件了,方便整理目录

绑定发送信号

  1. 新建信号signal drag
  2. 发送信号self.emit_signal("drag")
  3. self.可以不加,如果在其他脚本发送信号需要通过引用来发射如a.emit_signal("drag")
  4. 绑定信号gridlayout.connect("drag",self,"_on_IconsGridLayout_draw")
  5. 注意connect前的gridlayout表示信号所在实例,self表示回调函数所在实例
  6. 如果需要带参数则如下
  7. signal drag(relative)#新建带参数的信号
  8. self.emit_signal("drag",event.relative)#发射带参数的信号
  9. 相应的带参数的回调函数:func _on_IconsGridLayout_draw(relative):
  10. 另外在其他类中定义信号如下
  11. node_ins.add_user_signal("custom_user_signal")

父控件的输入回调函数,会受到子控件的影响
点击子控件的话,父控件收不到信号?有办法直接让子控件不受点击事件吗?

 

猜你喜欢

转载自blog.csdn.net/u012863565/article/details/125018469