Я воссоздаю старую 16-битную игру.Я создаю чат, который обычно отображается внизу.Каждое предложение переходит в посимвольное.
Каждый раз, когда добавляется символ, я хотел, чтобы он издавал этот небольшой гудок.У меня есть WAV-файл, который содержит короткий «всплывающее» сообщение, которое звучит просто правильно, проблема в том, что когда я делаю это каждый раз, он обычно портится.
Либо это:
- Пропускает посимвольный процесс и просто показывает полное слово и всплывает один раз
- Отстает и делает пару байт правильно, а затем делает то, что указано выше
Здесь все становится сложнее.Я использую Lua и VB.net для этого.Движок, который я написал на VB.net, в то время как игровая механика и сюжетная линия контролируются Lua.
Вот основной фрагмент Lua:
RegisterEvent("ready", function()
_G.Chat={}
_G.Chat["busy"]=false
_G.Chat.Say=(function(from,msg,done)
if _G.Chat["busy"] then return end
_G.Chat["busy"]=true
local x,y=getRelativePositionOpposite(1024,192)
--Draw
local chatPanel=engine:AddSprite("chat.png",0,0,1024,192,x,y,1024,192,5)
local fromText=engine:AddString(from..":",x+25,y+25,"#FFFFFF",16,0,0)
local msgText=nil
local mx=string.len(msg)
--Chat Cleanup
setupCleanup=(function()
local g=true
RegisterEvent("keyup", function(key)
if not g then return end
if key=="Space" then
engine:RemoveSprite(chatPanel)
engine:RemoveString(fromText)
engine:RemoveString(msgText)
_G.Chat["busy"]=false
done()
g=false
end
end)
end)
doText=(function(i)
if msgText then
engine:RemoveString(msgText)
end
msgText=engine:AddString(string.sub(msg,1,i),x,y+75,"#FFFFFF",14,1,0)
engine:PlaySound("chatblip.wav")
if i>=mx then setupCleanup() return end
pause(.75,(function() doText(i+1) end))
end)
doText(1)
end)
end)
ВотФункция паузы, просто для справки (в Lua):
_G.pause=(function(t,f)
if t and f then
local tt=engine.timer.ElapsedMilliseconds/1000+t
local lcc=true
engine.event_tick:add(function(nt)
if nt>=tt and lcc then
f()
lcc=false
end
end)
end
end)
Вот фрагмент, который фактически воспроизводит шум в VB.net:
Public Sub PlaySound(ByVal fileFullPath As String)
My.Computer.Audio.Play(My.Computer.FileSystem.CurrentDirectory & "\bin\sounds\" & fileFullPath, AudioPlayMode.Background)
End Sub
Спасибо, если вы можете помочь!Если вам нужны какие-либо разъяснения, я более чем готов помочь!