バグが発生しました。大きなシーン イメージは事前にロードする必要があります。すべてのシーン コンポーネントは、処理する前にイメージがロードされるのを待つ必要があります。ただし、シーンの背景イメージは非同期でロードされるため、 forループと同時に実行すると、最後にどのAピクチャが読み込まれたのか確認できないので、試してみようという気持ちでこんな風に書いたのですが、ダメでした。
---记载所有背景图
function LoadBgRawImage(mapID,func)
for i = 1, len do
...
local path = "xxx\xxx\xxx.jpg"
local bgFunc = nil
if i == len then
bgFunc = func
end
---异步加载图片
LoadRawImage(path,func)
end
end
---异步加载图片
function LoadRawImage(path,func)
...(保护代码)
IOSystem.LoadAssetAsync(path,function(Prefab))
...
if func then ---执行回调
func()
end
end)
end
そこで私は happy xx (同僚) に助けを求め、次のような啓発的な指導を受けました。
---记载所有背景图
function LoadBgRawImage(mapID,func)
...
local loadedcount = len
for i = 1, len do
...
---异步加载图片
LoadRawImage(path,function()
loadedcount = loadedcount - 1
if loadedcount<=0 then
if func then
func()
end
end
end)
end
end
---异步加载图片
function LoadRawImage(path,func)
...(保护代码)
IOSystem.LoadAssetAsync(path,function(Prefab))
...
if func then ---执行回调
func()
end
end)
end
このようにすると、すべてのロードが完了した後にコールバックを実行できます。
2 番目の記述方法は、非同期ロードごとにコールバックを登録するのと同等であり、このコールバックはそれぞれの進行状況を監視し、要約処理を実行できるためです。
要約すると、コールバックを非同期に処理する必要がある場合は、コールバックの外側ではなく、内側で非同期にコールバックを処理する必要があります。