Quand on utilise la fonction SoundRange3D(), on doit aussi utiliser la fonction SoundListenerLocate(x, y, z).
x = CameraX(#camera)
y = CameraY(#camera)
z = CameraZ(#camera)
Un code (Testé sous Windows 7 et Windows 8.1) qui vous montre comment tout cela fonctionne. Dirigez vous avec les flèches en direction de la sphère rouge ou bleu.
Code : Tout sélectionner
Enumeration Window
#Mainform
EndEnumeration
Enumeration D3
#camera
#player
#material
#ground
#nodeRed
#nodeBlue
#soundRed
#soundBlue
#LandMarkRed
#LandMarkBlue
#Panel
EndEnumeration
Global PlayerSpeed.f = 0.2
InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()
ExamineDesktops()
OpenWindow(#Mainform,0, 0, 800, 600, "", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Mainform), 0, 0, 800, 600, 0, 0, 0)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
KeyboardMode(#PB_Keyboard_International)
;Light & Shadow
CreateLight(#PB_Any,RGB(255, 255, 255), -4, 100, -50)
WorldShadows(#PB_Shadow_Additive, 30, RGB(250, 235, 215)) ;Comment if Windows 8
;Camera
CreateCamera(#camera ,0, 0, 100, 100)
CameraBackColor(#camera, RGB(145, 182, 201))
MoveCamera(#camera, 2, 5, 15, #PB_Absolute)
CameraLookAt(#camera, 0,0,0)
;Ground
GetScriptMaterial(#material, "Color/Yellow")
CreateEntity(#ground, MeshID(CreatePlane(#PB_Any, 100, 100, 1, 1, 1, 1)), MaterialID(#material))
;Red sound (Node, Sound, Red LandMark)
CreateNode(#nodeRed, 20, 1, 30)
LoadSound3D(#soundRed, "Roar.ogg")
GetScriptMaterial(#material,"Color/Red")
CreateEntity(#LandMarkRed, MeshID(CreateSphere(#PB_Any, 1)), MaterialID(#material))
AttachNodeObject(#nodeRed, SoundID3D(#soundRed))
AttachNodeObject(#nodeRed, EntityID(#LandMarkRed))
SoundRange3D(#soundRed, 0, 30)
PlaySound3D(#soundRed, #PB_Sound3D_Loop)
;Blue sound (Node, Sound, Red LandMark)
CreateNode(#nodeBlue, -20, 1, 30)
LoadSound3D(#soundBlue, "Siren.ogg")
GetScriptMaterial(#material,"Color/Blue")
CreateEntity(#LandMarkBlue, MeshID(CreateSphere(#PB_Any, 1)), MaterialID(#material))
AttachNodeObject(#nodeBlue, SoundID3D(#soundBlue))
AttachNodeObject(#nodeBlue, EntityID(#LandMarkBlue))
SoundRange3D(#soundBlue, 0, 30)
PlaySound3D(#soundBlue, #PB_Sound3D_Loop)
;Player
CreateEntity(#player, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, 0, 1, -10)
HideEntity(#player, #True)
Repeat ;Event 3D Loop
Repeat ;Event Window Loop
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
If ExamineKeyboard()
If KeyboardPushed (#PB_Key_Escape)
End
EndIf
;Move Up or Down
If KeyboardPushed (#PB_Key_Up)
MoveEntity(#player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
ElseIf KeyboardPushed (#PB_Key_Down)
MoveEntity(#player, 0, 0, -PlayerSpeed, #PB_Absolute|#PB_Local)
EndIf
;Rotate Left or Right
If KeyboardPushed (#PB_Key_Left)
RotateEntity(#player, 0, 1.5, 0, #PB_Relative)
ElseIf KeyboardPushed (#PB_Key_Right)
RotateEntity(#player, 0, -1.5, 0, #PB_Relative)
EndIf
EndIf
CameraFollow(#camera, EntityID(#player), 180, 1, 1, 0.2, 0.2)
;IMPORTANT The ear follows the camera (Les oreilles suivent la caméra)
SoundListenerLocate(CameraX(#camera), CameraY(#camera), CameraZ(#camera))
RenderWorld(30)
;-Control Panel
CreateSprite(#Panel, 800, 40)
StartDrawing(SpriteOutput(#Panel))
Box(0,0, 800, 40, RGBA(178, 34, 34, 20))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(5,2,"FPS: "+ Str(Engine3DStatus(#PB_Engine3D_CurrentFPS)) +
" Min: " + Str(Engine3DStatus(#PB_Engine3D_MinimumFPS)) +
" Max: " + Str(Engine3DStatus(#PB_Engine3D_MaximumFPS)))
DrawText(200, 2, "(" + Str(EntityX(#player)) + ", " + Str(EntityY(#Player)) + ", " + Str(EntityZ(#Player)) + ")")
StopDrawing()
DisplaySprite(#Panel, 0, 0)
FlipBuffers()
ForEver
- Commenter la ligne 46
Code : Tout sélectionner
WorldShadows(#PB_Shadow_Additive, 30, RGB(250, 235, 215))