Основная механика: использование условий для определения времени игрока и вознаграждения за него.

Предстоящие игры и/или игровые механики из этой серии

Настройтесь на утро четверга для новой записи в этой серии. Буду рад прочитать ваши предложения в комментариях.

  1. Выбор персонажа в штаб-квартире рейда [четверг, 23 июня]
  2. Бесконечный бегун [четверг, 30 июня]
  3. Guitar Hero [четверг, 7 июля]
  4. Карточный матч [четверг, 14 июля]
  5. Змея [четверг, 21 июля]
  6. Ловец падающего мяча [четверг, 28 июля]
  7. Аркадный джойстик [четверг, 4 августа]
  8. Раздвижные блоки [четверг, 11 августа]
  9. Вертикальный платформер [четверг, 18 августа]
  10. Понг [четверг, 25 августа]
  11. Буря [четверг, 1 сентября]

Ссылка на проект Framer

Основная механика игрового процесса в большинстве игр-симуляторов ритма заключается в нажатии кнопки именно в тот момент, когда движущаяся фигура полностью помещается в неподвижную целевую область на игровом поле. Давайте начнем!

Настройка игрового окружения

Этот прототип содержит следующие элементы (также известные как слои):

  • Правила: привязка к верхней части экрана
  • Оценка: слой масштабирования зафиксирован справа на экране. Масштабируется по вертикали от 0 до 1 с повторяющейся переменной.
  • Кнопка: закреплена внизу экрана, поэтому ее легко нажимать.
  • Целевая область: заблокирована в верхней части кнопки рядом с нижней частью экрана, чтобы дать достаточно времени для того, чтобы заметки встали на свои места.
  • Примечания: группа из 3 примечаний, выровненных по горизонтали, одновременно отображается только 1 примечание.
  • Экран завершения игры: скрыт до тех пор, пока игрок не выиграет игру.

Удаление заметок

Создается родительский слой, примечания, который соответствует ширине и высоте экрана.

Каждую секунду:

  • переменная «правильно» установлена ​​на некоторое число от 0 до 2
  • Цикл выполняется трижды, в конечном итоге создавая три равноудаленные ноты, выровненные по горизонтали; один из трех видим и получил имя «нео», остальные невидимы; к каждой заметке прикреплена анимация, которая перемещает их сверху вниз экрана; каждая нота уничтожается, когда анимация заканчивается
notes = new Layer
 width: Screen.width
 height: Screen.height
 backgroundColor: “transparent”
Utils.interval 1, ->
 correct = Utils.round Utils.randomNumber(0,2)
 for i in [0…3]
   note = new Layer
     parent: notes
     x: Align.center(200 * -(i — 1))
     y: Align.top(100)
     width: 150
     height: 50
     backgroundColor: “transparent”
   if i == correct
     note.backgroundColor = “white”
     note.name = “neo”
   drop = new Animation
     layer: note
     properties: 
       y: Align.bottom(50)
     curve: “linear”
     time: 1
   drop.start()
   note.onAnimationEnd ->
     this.destroy()

Нажал ли игрок кнопку в нужное время?

Когда игрок нажимает кнопку:

  • Если первый дочерний элемент в «примечаниях» (поскольку все три дочерних элемента остаются на одной высоте при опускании, не имеет значения, какой из них мы используем для сравнения) находится точно в середине целевой области: увеличьте оценку, увеличьте масштаб метр и указать успешное касание, переключив состояние целевой области
  • В противном случае (это означает, что заметки не идеально выровнены в целевой области): укажите неудачное касание, переключив состояние целевой области.
button.on Events.Tap, ->
 if notes.children[0].midY > bar.minY && notes.children[0].midY < bar.maxY
   points += 1
   meter.scaleY = points / 10
   bar.states.switchInstant “success”
   bar.states.switch “default” 
 else
   bar.states.switchInstant “wrong”
   bar.states.switch “default”

Победа в игре

Экран завершения игры запускается только тогда, когда счетчик, показывающий счет, возвращается к шкале Y, равной 1, из исходного состояния 0 (каждая точка увеличивает его на 1/10).

meter.on “change:scaleY”, ->
 if @.scaleY == 1
 gameOver.visible = yes

Механика Framer/CoffeeScript выделена здесь

  • Слушатели событий
  • Состояния слоя
  • Глобальные переменные
  • Вспомогательные методы
  • Поток управления
  • Петли