非同期ロードのコールバックの問題。複数のリソースが非同期でロードされ、すべてをロードしてコールバックします。

バグが発生しました。大きなシーン イメージは事前にロードする必要があります。すべてのシーン コンポーネントは、処理する前にイメージがロードされるのを待つ必要があります。ただし、シーンの背景イメージは非同期でロードされるため、 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 番目の記述方法は、非同期ロードごとにコールバックを登録するのと同等であり、このコールバックはそれぞれの進行状況を監視し、要約処理を実行できるためです。

要約すると、コールバックを非同期に処理する必要がある場合は、コールバックの外側ではなく、内側で非同期にコールバックを処理する必要があります。

おすすめ

転載: blog.csdn.net/QO_GQ/article/details/130991736