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

本文介绍了Godot游戏引擎中的多种实用技巧,包括动态添加场景元素、实现UDP网络通信、自定义控件样式及属性、处理鼠标点击事件等,并提供了解决移动端开发问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态添加场景

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")

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

 

 

### Godot 游戏引擎入门知识 Godot 是一款开源的跨平台游戏引擎,以其易学易用的特点受到广泛欢迎。无论是初学者还是有一定经验的游戏开发者,都可以通过学习 Godot 来提升自己的开发能力。 #### 一、Godot 的优势 Godot 引擎具备许显著的优点,使其成为新手的理想选择。它不仅提供了直观的界面和强大的功能集,还拥有活跃的社区支持[^3]。以下是其主要特点: - **开放源码**:Godot 完全免费且开源,允许用户自由修改和分发。 - **跨平台支持**:能够轻松导出到 Windows、Linux、macOS、Android 和 iOS 平台。 - **可视编辑器**:内置场景编辑器让开发者可以通过拖拽操作快速构建复杂的游戏结构。 - **脚本语言灵活性**:除了默认的 GDScript 外,还可以使用 C# 或其他第三方插件进行开发。 #### 二、Godot 新手入门指南 针对刚接触 Godot 的开发者,可以从以下几个方面入手: 1. **安装与配置** 首先下载最新稳定版的 Godot 编辑器,并熟悉基本的操作流程。官方文档中有详尽的安装说明可供查阅[^1]。 2. **理解核心概念** 学习节点(Node)的概念及其在场景树(Scene Tree)中的作用至关重要。每一个游戏对象都由个节点组成,它们共同协作完成特定功能[^3]。 3. **编写简单程序** 尝试创建一个小项目练习基础技能,比如移动角色或者检测碰撞事件。这里有一段简单的 GDScript 示例用于控制物体沿 X 轴平移: ```gdscript extends Node2D var speed = 200 func _process(delta): position.x += speed * delta ``` 4. **深入研究资源管理** 探索如何导入图片、音频文件等外部资产,并学会调整属性以适应不同设备上的表现效果[^5]。 5. **实践案例分析** 参考现成的例子可以帮助更快地上手实际应用。例如,《老程序员的数字游戏开发笔记》系列文章展示了完整的 3D 游戏制作过程,其中涉及物理模拟、动画处理等个高级话题[^4]。 6. **利用在线资料** 不要忽视来自世界各地的学习材料价值。像《学习Godot引擎——阿拉伯语教程》这样的本地化内容能为母语非英语用户提供极大便利;同时也可以关注英文论坛和技术博客获取前沿资讯[^2]。 7. **参与交流活动** 加入相关 QQ 群组或是 Discord 频道,在与其他爱好者的互动过程中解决问题并分享心得体验。 --- ### 总结 综上所述,进入 Godot 生态圈并不困难,只需循序渐进地掌握必要的理论知识并通过不断尝试积累实战经验即可逐步成长为一名合格甚至优秀的独立游戏制作者!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值