这次真的要··开始游戏了···
回归上次Game.xaml
<UserControl x:Class="SilverlightMusicHit.Game" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="800" KeyDown="UserControl_KeyDown"> <Grid x:Name="LayoutRoot"> <Grid.RowDeFinitions> <RowDeFinition Height="50"/> <RowDeFinition Height="*"/> <RowDeFinition Height="50"/> </Grid.RowDeFinitions> <Grid.ColumnDeFinitions> <ColumnDeFinition Width="*"/> <ColumnDeFinition Width="435"/> <ColumnDeFinition Width="*"/> </Grid.ColumnDeFinitions> <TextBlock Name="txtTitle" Grid.Row="0" Grid.Column="0" Text="歌曲" FontSize="16"></TextBlock> <Button Name="btnBack" Grid.Row="2" Grid.Column="1" Content="返回列表" Opacity="0.5" Click="btnBack_Click" MouseLeave="btn_MouseLeave" MouseMove="btn_MouseMove"></Button> <Grid Name="gcMusicHit" Grid.Row="1" Grid.Column="1" Height="435" Width="435" Opacity="0.9"> <Grid.RowDeFinitions> <RowDeFinition/> <RowDeFinition Height="10"/> <RowDeFinition/> <RowDeFinition Height="10"/> <RowDeFinition/> </Grid.RowDeFinitions> <Grid.ColumnDeFinitions> <ColumnDeFinition/> <ColumnDeFinition Width="10"/> <ColumnDeFinition/> <ColumnDeFinition Width="10"/> <ColumnDeFinition/> </Grid.ColumnDeFinitions> <Canvas Background="White" Grid.Row="0" Grid.Column="1"/> <Canvas Background="White" Grid.Row="0" Grid.Column="3"/> <Canvas Background="White" Grid.Row="1" Grid.Column="0"/> <Canvas Background="White" Grid.Row="1" Grid.Column="1"/> <Canvas Background="White" Grid.Row="1" Grid.Column="2"/> <Canvas Background="White" Grid.Row="1" Grid.Column="3"/> <Canvas Background="White" Grid.Row="1" Grid.Column="4"/> <Canvas Background="White" Grid.Row="2" Grid.Column="1"/> <Canvas Background="White" Grid.Row="2" Grid.Column="3"/> <Canvas Background="White" Grid.Row="3" Grid.Column="0"/> <Canvas Background="White" Grid.Row="3" Grid.Column="1"/> <Canvas Background="White" Grid.Row="3" Grid.Column="2"/> <Canvas Background="White" Grid.Row="3" Grid.Column="3"/> <Canvas Background="White" Grid.Row="3" Grid.Column="4"/> <Canvas Background="White" Grid.Row="4" Grid.Column="1"/> <Canvas Background="White" Grid.Row="4" Grid.Column="3"/> <Canvas Background="Black" Name="imgMusic7" Grid.Row="0" Grid.Column="0"/> <Canvas Background="Black" Name="imgMusic8" Grid.Row="0" Grid.Column="2"/> <Canvas Background="Black" Name="imgMusic9" Grid.Row="0" Grid.Column="4"/> <Canvas Background="Black" Name="imgMusic4" Grid.Row="2" Grid.Column="0"/> <Canvas Background="Black" Name="imgMusic5" Grid.Row="2" Grid.Column="2"/> <Canvas Background="Black" Name="imgMusic6" Grid.Row="2" Grid.Column="4"/> <Canvas Background="Black" Name="imgMusic1" Grid.Row="4" Grid.Column="0"/> <Canvas Background="Black" Name="imgMusic2" Grid.Row="4" Grid.Column="2"/> <Canvas Background="Black" Name="imgMusic3" Grid.Row="4" Grid.Column="4"/> </Grid> <TextBox Grid.Column="1" Name="txtscore" Text="0" FontSize="40" Opacity="0.5" Foreground="#FF97AFC4" FontFamily="Comic Sans MS" Margin="0,0" /> <TextBox Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" Text="Hit" Width="182" Name="txtHit" FontFamily="Comic Sans MS" FontSize="32" FontWeight="Bold" Foreground="#FF2626B7" BorderBrush="#FF1747DE" Margin="0,200,200" Visibility="Collapsed" /> </Grid> </UserControl>
再进入Game.cs
#region 变量 /// <summary> /// 背景显示速度 /ms /// </summary> private int speed = 80; /// <summary> /// 背景显示图片数量 /// </summary> private int imgMax = 30; /// <summary> /// 背景图片索引 /// </summary> private int Index = 0; /// <summary> /// 定时器 /// </summary> private Storyboard _timer; /// <summary> /// 背景画刷 /// </summary> private ImageBrush _imgBrush; /// <summary> /// 播放声音 /// </summary> private MediaElement _mediaSound; /// <summary> /// 播放音乐 /// </summary> private MediaElement _mediaMusic; /// <summary> /// Hit定时器 /// </summary> private Storyboard _tmGame; /// <summary> /// 游戏时间进度 /ms /// </summary> private int gamestep = 100; /// <summary> /// 音乐对象索引 /// </summary> private int musicIndex = 0; /// <summary> /// 节奏对象 /// </summary> private XML.MusicHitValue _musicHitValue; /// <summary> /// MusichHit显示索引 /// </summary> private int gmIndex = 0; /// <summary> /// MusicHit时间进度 /// </summary> private int gmStep = 0; /// <summary> /// 连击数 /// </summary> private int downHits = 0; /// <summary> /// 总分 /// </summary> private int score = 0; /// <summary> /// 音乐键 /// </summary> private static List<MusicHit> _musicHit; /// <summary> /// 音乐加载 /// </summary> private static ChildMusicLoading _MusicLoading; #endregion
2、好了··接着开始想怎样实现了······· 不过有之前的铺垫,应该也不难理解的
public Game(int _musicIndex) { InitializeComponent(); //读取音乐索引 musicIndex = _musicIndex; //创建背景画刷 _imgBrush = new ImageBrush(); //创建定时器 _timer = new Storyboard(); _timer.Duration = new Duration(TimeSpan.FromMilliseconds(speed)); _timer.Completed += new EventHandler(_timer_Completed); _timer.Begin(); //添加播放器 _mediaSound = new MediaElement(); _mediaMusic = new MediaElement(); this.LayoutRoot.Children.Add(_mediaSound); this.LayoutRoot.Children.Add(_mediaMusic); //创建9个音乐键 _musicHit = new List<MusicHit>(); _musicHit.Clear(); for (int i = 0; i < 9; i++) _musicHit.Add(new MusicHit()); //加载音乐 _MusicLoading = new ChildMusicLoading(musicIndex); _MusicLoading.Show(); //新增音乐单击事件 foreach (Canvas cvs in gcMusicHit.Children) cvs.MouseLeftButtonDown += new MouseButtonEventHandler(cvs_MouseLeftButtonDown); }
以下是背景效果
void _timer_Completed(object sender,EventArgs e) { if (_MusicLoading.DialogResult == true) { GameStart(); _MusicLoading.DialogResult = false; } bool isHit = false; string url = string.Format("{0}{1}{2}","Image/picBackGround/background",Index,".jpg"); _imgBrush.ImageSource = Common.GetGif(ref Index,ref imgMax,ref isHit,url,1); this.LayoutRoot.Background = _imgBrush; _timer.Begin(); }
_MusicLoading.DialogResult 这个是不是很面熟? 没错,这个是加载歌曲进度窗体的返回值,终于发现为啥··要无端端返回个True给他吧····呵呵
接着进入GameStrat()了
/// <summary> /// 游戏开始 /// </summary> private void GameStart() { //音乐名 txtTitle.Text = Common._MusicValue[musicIndex].MusicName; //播放声音 Common.soundUrl(ref _mediaSound,"Music/Btn/readyGo.mp3"); _mediaSound.Play(); Common.soundUrl(ref _mediaMusic,Common._MusicValue[musicIndex].MusicPath); _mediaMusic.Play(); //获取音乐节奏 XML.Reader _reader = new XML.Reader(); _musicHitValue = _reader.GetHisValue(Common._MusicValue[musicIndex].MusicHit); //创建定时器 _tmGame = new Storyboard(); _tmGame.Duration = new Duration(TimeSpan.FromMilliseconds(gamestep)); _tmGame.Completed += new EventHandler(_tmGame_Completed); _tmGame.Begin(); }
以下是节奏图效果
void _tmGame_Completed(object sender,EventArgs e) { try { if (gmStep.Equals(_musicHitValue.MusicTimer[gmIndex])) { MusicHit musicHit = new MusicHit(); int Index = _musicHitValue.MusicHits[gmIndex]; Canvas cvs = (Canvas)this.gcMusicHit.Children.First<UIElement>(x => (x as FrameworkElement).Name.StartsWith("imgMusic" + Index.ToString())); cvs.Children.Add(musicHit); _musicHit[Index - 1] = musicHit; gmIndex++; } } catch { } gmStep++; _tmGame.Begin(); }
应该是这句比较麻烦了····
Canvas cvs = (Canvas)this.gcMusicHit.Children.First<UIElement>(x => (x as FrameworkElement).Name.StartsWith("imgMusic" + Index.ToString()));
额··这个如果之前有听我意见,看一下LINQ··,就会知道大概了··· 找出满足条件的头元素(里面就是条件了)额。···查MSDN····去
按钮
/// <summary> /// 鼠标移过按钮高亮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_MouseMove(object sender,MouseEventArgs e) { ((Button)sender).Opacity = 1; } /// <summary> /// 鼠标离开按钮恢复 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_MouseLeave(object sender,MouseEventArgs e) { ((Button)sender).Opacity = 0.5; }
private void btnBack_Click(object sender,RoutedEventArgs e) { ((App)(Application.Current)).RedirectTo(new Music()); }
以下判断点击位置
/// <summary> /// 判断点击位置 /// </summary> /// <param name="num"></param> private void selectMusicHitPos(int num) { Hit hit = new Hit(); hit.HitStyle = 0; try { if (_musicHit[num - 1].isMusicHit) { hit.hitdisIndex = 1; downHits++; txtHit.Visibility = System.Windows.Visibility.Visible; } else { hit.hitdisIndex = 0; downHits = 0; txtHit.Visibility = System.Windows.Visibility.Collapsed; } Canvas cvs = (Canvas)this.gcMusicHit.Children.First<UIElement>(x => (x as FrameworkElement).Name.StartsWith("imgMusic" + num.ToString())); cvs.Children.Add(hit); score += downHits * 10; txtHit.Text = "Hit:" + downHits.ToString(); txtscore.Text = score.ToString(); } catch { } }
键盘来玩
private void UserControl_KeyDown(object sender,KeyEventArgs e) { string stringKey = e.Key.ToString(); if (stringKey.Contains("NumPad")) { selectMusicHitPos(int.Parse(stringKey.Replace("NumPad",""))); } }
鼠标来玩
void cvs_MouseLeftButtonDown(object sender,MouseButtonEventArgs e) { try { int number = int.Parse(((Canvas)sender).Name.Replace("imgMusic","")); selectMusicHitPos(number); } catch { } }
差不多了····现在试试吧,哈。
估计silverlight乐动魔方 就在这里结束了
····
下章?
还有下章, 哈·····演唱会也有加场,。···何况 教程···嘻嘻!
下章将会附加 乐动魔方 编曲器~~
name:5+x
参与文章与书籍:
WPF葵花宝典
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。