Опубликован: 14.08.2012 | Доступ: свободный | Студентов: 880 / 20 | Оценка: 5.00 / 5.00 | Длительность: 09:59:00
Специальности: Программист
Самостоятельная работа 26:

Озвучивание игр, видео

33.2. Видео и звуки средствами Silverlight

Возможность воспроизведения видео полезна при создании игровых заставок, возможно, какие-то моменты вашей игры так же будут более выразительными, если в них использовать видеофрагменты. Рассмотрим воспроизведение видео в Silverlight-проектах с использованием элемента управления MediaElement. Простейший вариант использования данного объекта заключается в добавлении его на страницу, в настройке свойства Source, которое должно содержать путь к видеофайлу, и в установке свойства AutoPlay – благодаря ему видео начнёт воспроизводиться после отображения страницы с ним на экране.

Для реализации данного примера мы создали новый проект, P26_2, на рис. 33.3 вы можете видеть его Обозреватель ресурсов

Обозреватель проекта P26_2, свойства видеофайла

Рис. 33.3. Обозреватель проекта P26_2, свойства видеофайла

Обратите внимание на то, что у видеофайла (Video.mp4) свойство Действие при построении установлено в значение Resource. Это нужно для правильной работы MediaElement.

В листинге 33.3 вы можете видеть код страницы Video.xaml

<phone:PhoneApplicationPage 
    x:Class="P26_2.Video"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Landscape" Orientation="Landscape"
    mc:Ignorable="d" d:DesignHeight="480" d:DesignWidth="728"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <!--ContentPanel — поместите здесь дополнительное содержимое-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <MediaElement Height="360" HorizontalAlignment="Left" Name="mediaElement1" VerticalAlignment="Top" 
            Width="480" Source="Media/Video.mp4" AutoPlay="True" Margin="117,0,0,0" />
            <Button Content="Стоп" Height="72" HorizontalAlignment="Left" Margin="117,385,0,0" 
            Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
            <Button Content="Пауза/Старт" Height="72" HorizontalAlignment="Left" Margin="296,385,0,0" 
            Name="button2" VerticalAlignment="Top" Width="301" Click="button2_Click" />
        </Grid>
    </Grid>
 </phone:PhoneApplicationPage>
Листинг 33.3. Код Video.xaml

Здесь описан MediaElement, принимающий к проигрыванию файл, расположенный по адресу Media/Video.mp4, свойство AutoPlay установлено в True, размеры элемента управления равны размеры видео, при необходимости можно настраивать как размеры, так и особенности размещения контента в элементе.

Кроме того, здесь описаны пара кнопок. Одной из них мы будем останавливать воспроизведение, другой – ставить на паузу и включать воспроизведение. Для этого кнопки имеют обработчики событий Click. Собственно говоря, если бы нам нужно было воспроизвести видеофайл и больше ничего не предпринимать, вышеприведенного описания объекта MediaElement для этого хватило бы. Так как мы собираемся управлять воспроизведением, для этого нам понадобится код в файле Video.xaml.cs, приведенный в листинге 33.4.

using System.Windows;
using System.Windows.Media;
using Microsoft.Phone.Controls;

namespace P26_2
{
    public partial class Video : PhoneApplicationPage
    {
        public Video()
        {
            InitializeComponent();
        }
        //Остановить воспроизведение
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            mediaElement1.Stop();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //Если проигрывается
            if (mediaElement1.CurrentState == MediaElementState.Playing)
            {
                //Приостановить
                mediaElement1.Pause();
            }
                //Есл в других состояниях
            else
            {
                //Включить воспроизведение
                mediaElement1.Play();
            }
        }
    }
}
Листинг 33.4. Код Video.xaml.cs

В обработчике для button1 мы используем метод MediaElement Stop() для остановки воспроизведения. В обработчике для button2 мы проверяем состояние объекта. Если видео воспроизводится, мы приостанавливаем воспроизведение. В других случаях – начинаем воспроизведение.

На рис. 33.4 вы можете видеть визуальное представление страницы Video.xaml

Страница Video.xaml

Рис. 33.4. Страница Video.xaml

В нашем проекте есть еще одна страница, BackMusic.xaml, на которой мы хотим организовать циклическое воспроизведение фоновой музыки. Мы воспользуемся для этого тем же элементом управления MediaElement, однако, зададим в качестве источника MP3-файл (Music.mp3), зададим автоматическое начало проигрывания и обработчик события MediaEnded. Это событие происходит, когда завершается воспроизведение медиафайла. По данному событию будем начинать воспроизведение сначала.

В листинге 33.5 вы можете видеть код описания элемента из XAML-файла

       <MediaElement Height="120" HorizontalAlignment="Left" Margin="143,42,0,0" 
       Name="mediaElement1" VerticalAlignment="Top" Width="160" Source="/Media/Music.mp3" 
       AutoPlay="True" MediaEnded="mediaElement1_MediaEnded" />
Листинг 33.5. XAML-код описания элемента

Наш элемент ничего не отображает на экране, поэтому важность имеют лишь те его настройки, которые отвечают за воспроизведение звукового файла.

В листинге 33.6 вы можете видеть обработчик события MediaEnded

        void mediaElement1_MediaEnded(object sender, RoutedEventArgs e)
        {
            mediaElement1.Play();
        }
Листинг 33.6. Обработчик события MediaEnded

33.3. Выводы

В этой лабораторной работе мы научились использовать библиотеки XNA для озвучивания игр, кроме того, рассмотрели элемент управления MediaElement, который позволяет проигрывать видеофрагменты и музыкальные файлы на страницах Silverlight-приложений

33.4. Задание

Выясните, видеофайлы в каких форматах можно проигрывать с помощью MediaElement. Реализуйте приложение, проигрывающее файлы в различных форматах.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто