Я задался идеей избавиться от глобальных переменных и все данные, необходимые для работы функции, передавать ей через параметры. Для задачи получения набора точек на координатной плоскости я написал
следующий код:
const walls$ = combineLatest(
range(0, constants.wallsCnt),
of(constants.canvasWidthPx),
of(constants.canvasHeightPx),
of(constants.wallSizePx),
)
.pipe(
map(([range, canvasWidthPx, canvasHeightPx, wallSizePx]) => {
return {
x: Math.floor(Math.random() * Math.floor(canvasWidthPx - wallSizePx)),
y: Math.floor(Math.random() * Math.floor(canvasHeightPx - wallSizePx)),
strength: Math.floor(Math.random() * Math.floor(constants.wallStrengthMax)) + 1,
}
}),
toArray(),
tap(v => {
console.log(v)
}),
).subscribe()
Проблема в том, что на выходе я получаю только одну точку, хотя должен получить 3. Потому что
constants.wallsCnt = 3
Примечательно, что проблема решается, если переписать код с использованием глобальных переменных:
const walls$ = range(0, constants.wallsCnt)
.pipe(
map(_ => {
return {
x: Math.floor(Math.random() * Math.floor(constants.canvasWidthPx - constants.wallSizePx)),
y: Math.floor(Math.random() * Math.floor(constants.canvasHeightPx - constants.wallSizePx)),
strength: Math.floor(Math.random() * Math.floor(constants.wallStrengthMax)) + 1,
}
}),
toArray(),
)
Но мне нужна запись именно в первом варианте. Помогите пожалуйста починить код.
Не спрашивайте только зачем мне это нужно. Я пишу небольшую 2D-игру,
полный код здесь, если интересно.