@zlodiak

Как заполнить state?

Я написал небольшую игру. В ней по полю можно перемещать танк игрока при помощи клавиш курсора.

LIVE DEMO

В state хранятся координаты игрока. Также в state есть ключ walls, по которому хранится массив координат стен. Отдельно этот массив я сгенерировал в потоке walls$, но у меня не получается добавить его в state. Помогите пожалуйста.

В программе основные действия происходят здесь:

const game$ = combineLatest(keys$, walls$).pipe()

game$.subscribe((action) => {
  switch (action[0]) {
    case 'ArrowUp':
      if(state.y > 0) { state.y--; }
      break;
    case 'ArrowRight':
      if(state.x < gameWidth - 1) { state.x++; }
      break;
    case 'ArrowDown':
      if(state.y < gameHeight - 1) { state.y++; }
      break;
    case 'ArrowLeft':
      if(state.x > 0) { state.x--; }
      break;    
  }  
  renderGame(state);
  // console.log(state)
});


Как видите, я при помощи combineLatest пытаюсь объединить поток, отслеживающий нажатия клавиш и поток сгенерированных стен.

Итак, повторю ещё раз проблему. Я хотел бы чтобы
// console.log(state)
выводил массив сгенерированных стен. Если это будет, то отрисовать его я уже сам смогу.
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
search
@search
мама говорит что я особенный
Не совсем понял проблему, но стены находятся в первом элементе массива action. Если вы хотите передать их в state, то это можно сделать как-то так

game$.subscribe((action) => {
  switch (action[0]) {
    case 'ArrowUp':
      if(state.y > 0) { state.y--; }
      break;
    case 'ArrowRight':
      if(state.x < gameWidth - 1) { state.x++; }
      break;
    case 'ArrowDown':
      if(state.y < gameHeight - 1) { state.y++; }
      break;
    case 'ArrowLeft':
      if(state.x > 0) { state.x--; }
      break;    
  }
  
  state.walls = action[1];  
  renderGame(state);
  console.log(state)
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы