2017-04-24 13 views
1

私はLove2dスレッド関数に問題があります。私はどこでも理解できる説明や説明を見つけませんでした。Love2D、スレッドの実行と入力

最初:メインファイル内 私が得た:

thread1 = love.thread.newThread("ambient.lua") 
thread2 = love.thread.newThread("ambient.lua") 
thread1:start() 
thread2:start() 

ambient.luaは含まれています

random1 = love.math.random(1, 10) 
gen1 = love.audio.newSource("audio/ambient/gen/a/gen_a_".."random1"..".mp3", 
"static") 
gen1:setVolume(1.0) 
gen1:setLooping(false) 
gen1:play() 
を正常に動作

、問題は、私はVAR =スレッド1尋ねるときということです:isRunning()を同じステップまたは遅延で、オーディオが再生され、それを印刷しようとすると、エラー(おそらくヌル)がスローされます。オーディオが終了すると、私はそのメモリがクリアされて参照してください。私はリンクスレッド1:start()をマウスクリックして、それを短時間で複数回起動すると、メモリ使用量が狂ったように上昇し、サンプルの長さに似た時間が経ち、減少し始めます。質問は、私は複数のスレッドを作成していますか?その場合、サンプルが終了した後でも正しく終了しましたか?またはスレッドの生涯はちょうど1ステップ長いと私は同じスレッドで複数のオーディオソースを再生する作成ですか?小切手自体に問題がありますか?

thread1:start(volume, sampleID) 

と私は糸自体にそれらをADDRESする方法見当もつかない:値を()開始:

次の問題は、私がスレッド1を使用する必要があるということです。ガイドと例は "vararg"リファレンスを示しています。私はまともな説明や、スレッドへの変数入力での "..."使用を含む例を見ていませんでした。私はそれを書く方法の例が必要です。このオーディオ・フィドルが素晴らしい例ではないとしても、私は確かにそれをAIに必要とします。複雑な入力、単純なx、y、サイズ、target_x、target_yの値は必要ありません。

+0

'私はVARを頼む=スレッド1:あなたの例、ボリュームおよびスレッド内からsampleIDパラメータで
は次のように検索されますか? Luaは大文字と小文字を区別し、 'Thread1'は' thread1'と同じではありません。 'thread1'に割り当てた場合、' Thread1'は存在しませんので、nilに関するエラーが発生します。 – Vlad

+0

ああ、ありがとう。コードの誤り。チェックはすぐに動作し、スレッドは即座に終了し、サンプルは再生してから終了します。ループを有効にすると、スレッドはまだ瞬時に終了し、サンプルは新しいスレッドで再生され、追加され続けるため、時間の経過とともにひどい結果が生じることがあります。 –

+0

愛のオーディオプレーヤーは、自分のスレッドで生きているはずです。新しいオーディオソースをスケジュールする場所は問題ではなく、メインスレッドから行うことができます(おそらくそうする必要があります)。Loveのプレーヤーのスレッドは、あなたが入力したデータを引き続き使用します。 – Vlad

答えて

0

と私はどのようにスレッド自体にそれらを追加する手がかりがありません。ガイドと の例は、 "vararg"リファレンスを言います。まともな説明が表示されません スレッド内の変数入力に "..."が含まれている例があります

マニュアルを十分に読んでいませんでした。ロードされたすべてのLuaチャンク(Lua 5.1マニュアルのセクション2.4.1)は、可変数の引数を持つ無名関数です。
love.thread.newThread("ambient.lua")を呼び出すと、Love2Dは新しいチャンクを作成するので、基本的なLuaルールがこのケースに適用されます。あなたはここに入力ミスでした、isRunning() `:

local volume, sampleID = ... 

gen1 = love.audio.newSource(get_stream_by_id(sampleID), "static") 
gen1:setVolume(volume) 
gen1:setLooping(false) 
gen1:play() 
+0

yayは完全に動作します。ありがとう。あなたはおそらく、メインルアスレッドにデータを戻す方法をアンサーできますか? "それを把握する"必要はありませんか? –

関連する問題