Как убрать звуковые эффекты на windows 7

Урок 4. Звуки, музыка, клавиатура и мы в MonoGame

На прошлом уроке Давайте рисовать и писать в MonoGame мы показывали визуализированные спрайты и буквы.

Сегодня мы рассмотрим музыку, звуковые эффекты и реакцию на клавиши.

Загруженный контент

Как и в прошлый раз, сначала необходимо создать спрайты, звуки и музыку. Звуковые эффекты относятся к типу SoundEffect, музыка — к типу Song. Поэтому в неделю с игрой мы введем 2 переменные:

Давайте перейдем к методу LoadContent() и загрузим звуки из контента:

Музыка

Статический класс MediaPlayer отвечает за воспроизведение музыки. В первую очередь нас будет интересовать метод Play(), который принимает в качестве параметра объект типа Song, то есть музыку, которую мы хотим воспроизвести. Мы вызываем Play() в конце метода LoadContent(), потому что именно тогда загружается музыка.

Давайте попробуем

Для дальнейшего программирования мы создадим общедоступный метод SwitchMusic(), который будет принимать Song в качестве параметра. Если эта песня еще не играет, запустите ее. Если он уже играет, позвольте ему играть и ничего не делать. С помощью этой проверки мы избегаем ситуаций, когда, например. Мы отправимся в место, где может воспроизводиться музыка, которая уже играет, и эта музыка снова начнет играть, а она может просто продолжаться. Песни, воспроизводимые в данный момент, можно найти в свойстве Query.ActiveSong. Как видите, в воспроизведении есть своеобразный плейлист, но в сериале мы его не используем. Метод может выглядеть следующим образом:

Давайте изменим воспроизведение музыки по умолчанию на вариант этого метода. Теперь давайте заставим музыку повторяться, установив свойство IsRepeating. Итак, конец метода LoadContent() выглядит так:

Чтобы сохранить здравомыслие, я рекомендую прокомментировать содержимое метода SwitchMusic() для целей разработки, или вы сделаете это через несколько дней.Не вижу запрограммированных и протестированных игр

Звуковые эффекты

Далее звуковые эффекты, они очень простые. Всякий раз, когда нам нужно воспроизвести их, мы просто вызываем для них метод Play(). Попробуем снова запустить звук в конце метода LoadContent() :

Читайте также:  Как поставить курсоры мыши для windows 10

Клавиатура

Конечно, игрок каким-то образом будет контролировать игру. XNA предоставляет нам широкую поддержку контроллеров, то есть клавиатур, мышей, а также других устройств, таких как джойстики или геймпады. Сейчас мы сосредоточимся в основном на клавиатуре.

У нас есть класс Keyboard для работы с клавиатурой. Нас особенно заинтересует статический метод GetState(), который возвращает состояние нажатых в данный момент клавиш. Затем мы можем спросить экземпляр этого состояния, содержит ли он определенный ключ. Экземпляр состояния клавиатуры имеет тип KeyboardState. Мы введем публичную переменную этого типа в класс с игрой:

Мы уже знаем, что место, где мы будем спрашивать о состоянии ключей, — это метод Update(). Перейдем к нему и сохраним текущий экземпляр состояния клавиш после обработки GamePad для XBox:

Теперь у нас есть текущее состояние клавиатуры, хранящееся в клавишах. У нас есть 3 полезных метода для экземпляра состояния:

  • IsKeyDown() — спросит, нажата ли конкретная клавиша.
  • IsKeyUp() — спросит, освобождена ли указанная клавиша.
  • GetPressedKeys() — возвращает массив всех нажатых клавиш.

Отдельные ключи различаются по типу ключей . Элемент Keys (то есть один конкретный ключ) берется в качестве параметра первыми 2-мя методами. Третий метод возвращает массив элементов Keys .

Спросим, ​​нажата ли клавиша Enter, и если да, то воспроизведем наш звук:

Мы видим, что вся процедура имеет одинНедостаток — ключ постоянно оценивается все время, пока мы его держим. Так что звук проигрывается десятки раз один над другим и от этого кружится голова. Иногда нам очень хочется, чтобы игра так реагировала, например, на определенную клавишу. если держим газ, то машина все равно разгоняется, как только отпускаем обороты падают. Но иногда мы хотим, чтобы клавиша оценивалась только один раз, а второй раз только тогда, когда она будет отпущена, а затем снова нажата. Давайте посмотрим, как это сделать. Для наших переменных ключей давайте объявим еще один, представляющий прошлое состояние ключей:

Читайте также:  Как ослабить нагрузку на диск windows 10

Также измените сохранение состояния ключа в Update(), чтобы последнее состояние ключа находилось в последней ключевой переменной:

Теперь нет ничего простого, кроме как спросить, был ли нажат Enter в прошлый раз и нажат ли сейчас:

Поскольку нам часто будет хотеться такого поведения и придется дважды прописывать один и тот же ключ в условии, давайте создадим для этой цели метод НоваКлавеса(). Он возьмет в параметр элемент типа значения Keys и узнает, просверлен ли ключ сейчас и не просверлен ли он в прошлый раз:

Метод общедоступный, потому что время от времени мы будем использовать его даже вне класса с игрой. Давайте изменим наш ответ на Enter в Update() :

Вы наверняка заметите, что теперь список стал намного понятнее.

У нас еще есть немного времени, и хотя мы не будем использовать тетрис в нашей игре, мы покажем вам, как с ним работать. Во-первых, мы будем использовать стандартный курсор Windows. Он стандартный на окне с выключенной игрой, включаем переключением свойства IsMouseVisible прямо на игре в методе Initialize():

Такой курсор довольно некрасивый, поэтому мы его снова отключаем Как я уже изменил, наша игра не будет использовать мышь, поэтому я не подготовил для вас ни одного спрайта с курсором мыши. Если ты хочешь, ты можешьрисуй и добавляй, здесь вместо курсора я нарисую букву «Х».

Подобно тому, как у клавиатуры был класс Keyboard, XNA подготовила для нас класс Mouse. Работает точно так же, снова у нас есть MouseState. На этой неделе мы представим в игре новую переменную накидку этого типа:

В Update() мы сохраняем состояние так же, как мы делали это с состоянием клавиш:

Теперь переходим к методу Draw(), где рисуем «курсор» и далее печатаем текущие координаты и состояние кнопки.

Начнем с курсора, здесь достаточно использовать свойства X и Y экземпляра состояния мыши, который указывает положение курсора. Нарисуем курсор последним, чтобы он был выше всего остального (конечно, но перед spriteBatch.End() ):

Читайте также:  Как отредактировать файл exe на windows 7

Теперь нарисуем положение шайбы и состояние кнопки:

Столкновение курсора и прямоугольника

Наконец, мы покажем вам, как создать столкновение прямоугольника и точки. Мы уже знаем, что XNA имеет структуру Vector2. Он имеет аналогичную структуру, мы используем Rectangle и Point. Разница между точкой и вектором заключается в том, что точка имеет целочисленные координаты и рассматривается как сумма векторов. Однако в XNA принято всегда использовать вектор, так как с ними работают внутренние методы XNA, т.е. методы рендеринга.

Давайте создадим прямоугольник, который мы установим примерно на месте робота на заднем плане. После нажатия на робота будет отображаться текст: «Не нажимайте на меня» Сейчас, конечно, мы только ковыряемся, на практике мы будем работать с объектом робота, покажем это на кубе объект в мгновение ока. А пока давайте добавим следующие переменные:

В Initialize() зададим прямоугольнику координаты робота, используя верхнюю левую точку и длину сторон:

Я добрался до сообщений таким образом, что задумался об этомоткрыл Paint в Windows и отметил область, MSPaint показал мне ее координаты и размеры в нижней части. Теперь давайте перейдем к Draw() и добавим визуализированный голос:

Мы сравниваем состояние кнопки, используя тип объекта ButtonState, содержащий элементы Pressed и Released. В идеале эта проверка должна быть в методе Update(), но для нашего эксперимента это не имеет значения. Если бы мы хотели составить его поведение, как и в случае с ключами, мы бы создали переменную pastMys .

В-четвертых, в уроке Разделение игры MonoGame на компоненты мы рассмотрим, как разделить игру на несколько игровых компонентов. Весь проект с сегодняшним сообщением можно скачать здесь.

Были ли у вас проблемы? Загрузите приведенный ниже образец приложения и сравните его со своим проектом, чтобы легко найти ошибку.

Скачать

Загружено 356x (11,85 МБ)
Приложение включает исходный код C#

Поделиться с друзьями
ОС советы