В игре мне нужно следить за тем, какие из моих объединенных спрайтов используются. Когда «активируются» сразу несколько спрайтов, я хочу перенести их из моего passivePool
в activePool
, оба из которых являются неизменяемыми HashSets (хорошо, я буду создавать новые наборы каждый раз, чтобы быть точным). Поэтому моя основная идея заключается в следующем:
activePool ++= passivePool.take(5)
passivePool = passivePool.drop(5)
но, читая документацию по scala, я предполагаю, что 5, которые я беру, может отличаться от 5, которое я тогда отбрасываю. Что, безусловно, не то, что я хочу. Я также мог бы сказать что-то вроде:
val moved = passivePool.take(5)
activePool ++= moved
passivePool --= moved
но так как это то, что мне нужно делать практически каждый кадр в реальном времени на ограниченном устройстве (телефон Android), я думаю, это будет намного медленнее, так как мне придется искать один за другим каждый из moved
спрайтов из passivePool
.
Какие-нибудь умные решения? Или я что-то упустил? Помните, что эффективность является главной задачей здесь. И я не могу использовать списки вместо наборов, потому что мне также нужно удалить спрайты с произвольным доступом из activePools, когда спрайты уничтожены в игре.