diff --git a/default_bus_layout.tres b/default_bus_layout.tres
new file mode 100644
index 0000000..60797cc
--- /dev/null
+++ b/default_bus_layout.tres
@@ -0,0 +1,15 @@
+[gd_resource type="AudioBusLayout" format=2]
+
+[resource]
+bus/1/name = "BGM"
+bus/1/solo = false
+bus/1/mute = false
+bus/1/bypass_fx = false
+bus/1/volume_db = 0.0
+bus/1/send = "Master"
+bus/2/name = "SFX"
+bus/2/solo = false
+bus/2/mute = false
+bus/2/bypass_fx = false
+bus/2/volume_db = 0.0
+bus/2/send = "Master"
diff --git a/prefab/role/Player.tscn b/prefab/role/Player.tscn
index abab257..41d150d 100644
--- a/prefab/role/Player.tscn
+++ b/prefab/role/Player.tscn
@@ -8,3 +8,6 @@
collision_layer = 8
script = ExtResource( 2 )
GunPrefab = ExtResource( 4 )
+
+[node name="AnimatedSprite" parent="." index="0"]
+frame = 3
diff --git a/resource/sound/bgm/Intro.ogg b/resource/sound/bgm/Intro.ogg
new file mode 100644
index 0000000..bffdec1
--- /dev/null
+++ b/resource/sound/bgm/Intro.ogg
Binary files differ
diff --git a/resource/sound/bgm/Intro.ogg.import b/resource/sound/bgm/Intro.ogg.import
new file mode 100644
index 0000000..40e9321
--- /dev/null
+++ b/resource/sound/bgm/Intro.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/Intro.ogg-058563f71fb5fd982135a064e68ee173.oggstr"
+
+[deps]
+
+source_file="res://resource/sound/bgm/Intro.ogg"
+dest_files=[ "res://.import/Intro.ogg-058563f71fb5fd982135a064e68ee173.oggstr" ]
+
+[params]
+
+loop=true
+loop_offset=0
diff --git a/resource/sound/sfx/ordinaryBullet.ogg b/resource/sound/sfx/ordinaryBullet.ogg
new file mode 100644
index 0000000..f5a886a
--- /dev/null
+++ b/resource/sound/sfx/ordinaryBullet.ogg
Binary files differ
diff --git a/resource/sound/sfx/ordinaryBullet.ogg.import b/resource/sound/sfx/ordinaryBullet.ogg.import
new file mode 100644
index 0000000..365ebbc
--- /dev/null
+++ b/resource/sound/sfx/ordinaryBullet.ogg.import
@@ -0,0 +1,15 @@
+[remap]
+
+importer="ogg_vorbis"
+type="AudioStreamOGGVorbis"
+path="res://.import/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/ordinaryBullet.ogg"
+dest_files=[ "res://.import/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggstr" ]
+
+[params]
+
+loop=false
+loop_offset=0
diff --git a/src/manager/SoundManager.cs b/src/manager/SoundManager.cs
index f8641d5..2cf4f34 100644
--- a/src/manager/SoundManager.cs
+++ b/src/manager/SoundManager.cs
@@ -1,7 +1,17 @@
+using System;
using Godot;
///
-/// 声音管理 背景音乐管理 音效在特定位置 处理
+/// 音频总线 区分不同的声音 添加声音效果 目前只有背景音乐 和音效 两个bus
+///
+public enum BUS
+{
+ BGM = 0,
+ SFX = 1
+}
+
+///
+/// 声音管理 背景音乐管理 音效
///
public class SoundManager
{
@@ -12,5 +22,63 @@
internal static SoundManager singleTon = new SoundManager();
}
- private AudioStreamPlayer audioStreamPlayer = new AudioStreamPlayer();
+ private static AudioStreamPlayer audioStreamPlayer = new AudioStreamPlayer();
+
+
+ ///
+ /// 背景音乐路径
+ ///
+ public static string BGMPath = "res://resource/sound/bgm/";
+ ///
+ /// 音效路径
+ ///
+ public static string SFXPath = "res://resource/sound/sfx/";
+
+ ///
+ /// 播放声音 用于bgm
+ ///
+ /// bgm名字 在resource/sound/bgm/目录下
+ /// 需要播放声音得节点 将成为音频播放节点的父节点
+ /// 音量
+ public static void PlayeMusic(string soundName, Node node, float volume)
+ {
+ AudioStream sound = ResourceManager.Load(BGMPath + soundName);
+ if (sound != null)
+ {
+ AudioStreamPlayer soundNode = new AudioStreamPlayer();
+ node.AddChild(soundNode);
+ soundNode.Stream = sound;
+ soundNode.Bus = Enum.GetName(typeof(BUS), 0);
+ soundNode.VolumeDb = volume;
+ soundNode.Play();
+ }
+ else
+ {
+ GD.Print("没有这个资源!!!");
+ }
+ }
+ ///
+ /// 添加并播放音效 用于音效
+ ///
+ /// 音效文件名字 在resource/sound/sfx/目录下
+ /// 需要播放声音得节点 将成为音频播放节点的父节点
+ /// 音量
+ public static void PlaySoundEffect(string soundName, Node node, float volume = 0f)
+ {
+ AudioStream sound = ResourceManager.Load(SFXPath + soundName);
+ if (sound != null)
+ {
+ AudioStreamPlayer soundNode = new AudioStreamPlayer();
+ node.AddChild(soundNode);
+ soundNode.Stream = sound;
+ soundNode.Bus = Enum.GetName(typeof(BUS), 1);
+ soundNode.VolumeDb = volume;
+ soundNode.Play();
+ GD.Print("bus:", soundNode.Bus);
+ }
+ else
+ {
+ GD.Print("没有这个资源!!!");
+ }
+ }
}
\ No newline at end of file
diff --git a/src/room/RoomManager.cs b/src/room/RoomManager.cs
index 0f28e4a..ff65623 100644
--- a/src/room/RoomManager.cs
+++ b/src/room/RoomManager.cs
@@ -1,3 +1,4 @@
+using System;
using Godot;
///
@@ -33,10 +34,15 @@
//初始化地图
var node = GetNode("MapRoot").GetChild(0).GetNode("Config");
- Color color = (Color) node.GetMeta("ClearColor");
+ Color color = (Color)node.GetMeta("ClearColor");
VisualServer.SetDefaultClearColor(color);
}
+ public override void _Ready()
+ {
+ SoundManager.PlayeMusic("intro.ogg", this, -17f);
+ }
+
public override void _Process(float delta)
{
if (Input.IsActionJustPressed("fire"))
diff --git a/src/weapon/bullet/OrdinaryBullets.cs b/src/weapon/bullet/OrdinaryBullets.cs
index 7d1e121..7e65b85 100644
--- a/src/weapon/bullet/OrdinaryBullets.cs
+++ b/src/weapon/bullet/OrdinaryBullets.cs
@@ -1,3 +1,4 @@
+using System;
using Godot;
///
@@ -55,6 +56,12 @@
AddChild(ShadowSprite);
}
+ public override void _Ready()
+ {
+ //生成时播放音效
+ SoundManager.PlaySoundEffect("ordinaryBullet.ogg", this, 6f);
+ }
+
public override void _PhysicsProcess(float delta)
{
if (frame++ == 0)