ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:1.42MB ,
资源ID:3975592      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3975592.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Windows8开发7之SpaceCadet2游戏逻辑和处理触控事件.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Windows8开发7之SpaceCadet2游戏逻辑和处理触控事件.docx

1、Windows8开发7之SpaceCadet2游戏逻辑和处理触控事件2、游戏逻辑和处理触控事件添加按钮事件 跳转开始界面,在游戏开始的时候,会点击开始按钮进入游戏界面,在这里我们可以看看如何对按钮进行响应。 打开开始界面(StartPage.xaml),选择界面中的开始按钮,属性界面里,选择“事件”标签,然后双击其中Click事件: 会看到自动在所属的.cs文件中添加了事件处理: 现在可以前往Vs2012中编辑了:处理页面逻辑 首先,现在应用进入到的第一个页面是MainPage,需要做一下修改,打开App.cs文件的对应位置:在这就是跳转到MainPage的代码了,可以修改一下成为StartP

2、age,现在可以运行一下看看效果,不错吧,但是开始按钮点击还没有任何的用处,需要添加一行代码。打开StartPage.cs,找到刚才生成的事件处理位置:输入代码:(Window.Current.Content as Frame).Navigate(typeof(GamePage);这段代码的意思是,让当前应用的显示页面跳转到GamePage。现在可以试一下看看跳转效果。处理游戏逻辑在处理游戏逻辑之前,先用Blend对元素做一下修改,因为我们将会在代码中访问它们:分数:tb_score等级:tb_level玩家:tb_player飞船空间:shipPlace,所有的飞船将会被该画布包含,下属的元

3、素为测试用的,可以删除掉。飞船控件的代码 打开Ship.cs文件,做如下修改:public sealed partial class Ship : UserControl public Ship() this.InitializeComponent(); /飞行完成事件增加 Storyboard_Fly.Completed += Storyboard_Fly_Completed; /爆炸完成事件增加 Storyboard_explosion.Completed += Storyboard_explosion_Completed; /点击事件Pressed事件增加 this.PointerPre

4、ssed += Ship_PointerPressed; void Ship_PointerPressed(object sender, PointerRoutedEventArgs e) /如果被点击 /判断是否在爆炸过程中 if (Storyboard_explosion.GetCurrentState() != ClockState.Stopped) return; /飞行直接停止 Storyboard_Fly.Pause(); /播放爆炸动画 /使用代码替换掉了飞船图片 image.Source = new BitmapImage(new Uri(ms-appx:/Resouce/ex

5、plosion.png); Storyboard_explosion.Begin(); void Storyboard_Fly_Completed(object sender, object e) /飞到底移除飞船 RemoveShip(); void Storyboard_explosion_Completed(object sender, object e) /爆炸完移除飞船 RemoveShip(); public void Fly() /开始飞 Storyboard_Fly.Begin(); public void RemoveShip() /从父层元素移除自己 (Parent as

6、Panel).Children.Remove(this); 在本代码中,创建了一些方法来控制和使用故事板系统,让其在正确的逻辑下进展。需要特别说明的是Storyboard.Completed事件,该事件是当Storyboard完成的时候触发,游戏中的飞船在飞行完成和爆炸后都应在游戏中移除,所以,我们使用这个事件来完成这个操作。 PointerPressed事件是针对于元素本身而言的,当飞船被点击到的时候会触发,按照游戏逻辑,应暂停飞行立即爆炸,但要先判断是不是已经爆炸。GamePage 飞船的处理完成后,就是如何在游戏中执行逻辑了,现在打开GamePage.cs,做如下的修改:public s

7、ealed partial class GamePage : Page /随机数 Random random = new Random(int)DateTime.Now.Ticks); public GamePage() this.InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(400); timer.Tick += timer_Tick; timer.Start(); void timer_Tick(object s

8、ender, object e) Ship ship = new Ship(); shipPlace.Children.Add(ship); Canvas.SetLeft(ship, shipPlace.ActualWidth); Canvas.SetTop(ship, random.Next() % shipPlace.ActualHeight); ship.Fly(); protected override void OnNavigatedTo(NavigationEventArgs e) 这段代码中,使用了DispatcherTimer,DispatcherTimer是一个定时器,用它来

9、完成飞船的生成操作。 timer.Interval = TimeSpan.FromMilliseconds(400); 这是指定每400毫秒触发一次,而触发的事件就是timer_Tick,在该事件中,我们生成了一架飞船,添加到了shipPlace这个Canvas最右边中,并随机设置了Y轴位置。 看起来很简单,一共没有写多少代码,运行一下看看: 好了,如果你觉得生成的速度不佳,可以修改timer的间隔数值,如果你觉得飞机飞得过快或者过慢,可以在Blend里直接调整Storyboard_Fly的时间周长度,更多的细节还需自己的发掘。不同的飞船 现在飞出的飞船都是一样的,如何让飞出来的飞船不一样呢?

10、还有分数也应该不一样才对,所以,先定义一个飞船类型类:public class ShipType public ShipType(ImageSource body, int score) Body = body; Score = score; public ImageSource Body get; private set; public int Score get; private set; 这里描述了一个飞船类型的主体图像是什么,所得分数是多少。 在Ship类里建立一个List:static List shipTypeList = new List() new ShipType(new B

11、itmapImage(new Uri(ms-appx:/Resouce/ship.png),10), new ShipType(new BitmapImage(new Uri(ms-appx:/Resouce/ship1.png),20), new ShipType(new BitmapImage(new Uri(ms-appx:/Resouce/ship2.png),30), new ShipType(new BitmapImage(new Uri(ms-appx:/Resouce/ship3.png),40),;Random random = new Random(int)DateTime

12、.Now.Ticks);ShipType shipType; 其实我们在作的就是使用代码控制Image图像,具体的做法前面有提到过,这里先看代码,在上面的代码中提前定义了一个随机数产生器和被随机的飞船类型,在构造函数中Ship()添加这样一段:/随机一个飞船类型shipType = shipTypeListrandom.Next() % shipTypeList.Count;/将图片更换image.Source = shipType.Body; 运行一下,飞船是不是出的都不太一样了呢?显示分数 在上面一段中,已经加入了分数的数值,但是没有用上,加上分数处理是非常容易: 首先打开GamePage

13、.cs,在GamePage类定义一个静态变量:public static int GameScore; 这是标识游戏分数的数值,然后就是在恰当的时机刷新它,我们可以使用前面的timer_Tick中做处理,timer_Tick是一段时间处理一次,那么正好符合要求,找到timer_Tick在下面添加:tb_score.Text = Score : + GameScore;tb_score是在Blend里设计制作的一个TextBlock,通过其Text属性来改变文字内容,定期刷新它就可以完成分数显示。GameScore在什么时候改变呢?现在打开Ship.cs,在被打爆的地方添加代码如下:/爆炸加分G

14、amePage.GameScore += shipType.Score;现在点击就可以显示不同的分数了。触摸和手势 我们知道在平板上开发游戏很容易面临一个处理,就是手势操作,在Win8应用里可以处理非常多的手势,例如:Hold、敲击、双敲击、多点触控等等, 在前面,我们使用了控件的Pointer的相关事件来完成了Pressed处理,Pointer还有其他的事件可以帮助完成对于点击的处理,甚至是多点的触控,虽然使用Pointer可以写出来上面的手势,但是不觉得非常的麻烦吗?在Win8开发中我们可以使用Manipulation相关的事件直接进行手势编程。 在这里我们将尝试一个轻滑(Panning)

15、手势来说明Manipulation是多么的方便,为了展示这个效果,当Panning手势出现的时候,将控制游戏的停止和继续,也就是说,轻滑一下暂停游戏,再轻滑一下继续游戏。 为了达到暂停和继续的效果,所有飞船都必须拥有暂停的功能,在Ship.cs中加入如下代码:/是否处于暂停状态,这个标记用作飞船的即可,因此不必每个飞船都增加一个boolpublic static bool IsPause;public void Pause() Storyboard_Fly.Pause();public void Resume() Storyboard_Fly.Resume(); 记得在Laser方法中加入是否

16、处于暂停的状态判断: 这是因为,当暂停的时候是不需要处理暂停事件的。 现在打开GamePage.cs在其中加入有关触摸的处理,第一步先在构造函数中加入如下代码:/开启手势可以取得的行为this.ManipulationMode = ManipulationModes.TranslateY;/注册事件this.ManipulationCompleted += GamePage_ManipulationCompleted; 或者在GamePage.xaml里加入如下代码是一样的效果: 在这里,我们只需要处理Y轴的滑动即可,所以手势的处理属性设置成为了TranslateY,如果想处理更多的手势,可以

17、这样:this.ManipulationMode = ManipulationModes.TranslateY | ManipulationModes.TranslateX; 第二步实现GamePage_ManipulationCompleted事件:void GamePage_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) if (e.Cumulative.Translation.Y = 50) Ship.IsPause = !Ship.IsPause; foreach (Ship ship in shipPlace.Children) if (Ship.IsPause) ship.Pause(); else ship.Resume(); Manipulation可以很轻松地取得Cumulative之后的数据,这样我们只要判断Y轴是否滑动超过50的距离就算为轻滑,这里可以依据自己的需要进行调整。 Manipulation有很多的事件,我用下图来表示这个手势的处理: 通过上图可以了解手势的初步事件位置,而我们不需要处理开始、开始中、过程中的事件,只需要处理完成就可以了。 最后,还需要在Timer循环里加入一个对是否暂停的判断:好了,运行一下看看吧。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1