Godot游戏框架踩坑记录

前言

毕设中使用Godot框架时遇到了一些问题,本文只对部分问题和解决方法做简要说明,而不对解决过程进行详细描述。

音频

因为版权问题,Godot不能导入mp3格式的音频1,可以考虑将音频转换为ogg格式后导入。

播放

AudioStreamPlayer适合用来播放BGM,AudioStreamPlayer2DAudioStreamPlayer3D播放时声源带有位置信息,会出现左右声道不一致的问题。

音量控制

每个AudioStreamPlayer可以将音频绑定到某一个Audio Bus中,然后直接控制Bus的音量。
例如,以下代码可以使名为Master的Bus静音。

AudioServer.set_bus_mute(AudioServer.get_bus_index("Master"), mute)

循环

导入音频文件时,设置导入的loop属性为truefalse来控制循环与否。

注:loopimport的属性而不是AudioStreamPlayer的属性(可以观察到loop出现在import文件中),通过代码设置loop属性的方法为: $ActionPlayer.stream.set("loop", false)

捕捉鼠标事件

通过重载_input函数来对输入事件进行捕捉,如下代码实现了在不提供pressed事件的节点中,检测鼠标点击,

func _input(event):
    if !is_visible_in_tree() :
        return
    if (event is InputEventMouseButton or event is InputEventScreenTouch) and event.pressed:
        if get_rect().has_point(to_local(event.position)):
            emit_signal("pressed")

注:is_visible_in_tree函数用来判断节点是否可见,单纯判断visible的值是不可取的(例如,父节点不可见时子节点的visible属性仍为true

另一种方法是,加入类型为Control的子节点,利用子节点检测鼠标事件。

位置

centered属性会导致节点坐标原点为中心而不是左上角。


  1. http://godotengine.org/qa/181...

你可能感兴趣的:(游戏开发,游戏引擎)