鉴于上一篇文章代码过多,被版主从首页删除了,本文只提取部分代码展示。

同上一篇文章一样,游戏还是小鸡快跑,不同的是,这次的小鸡不在是跳大坑,而是躲子弹了。

关于做游戏,还是那两样要点,对象和屏幕。不过,由于WPF不同Winform,它没有paint方法,所以使用WPF做游戏,只能考虑用别的方法来进行移动小鸡。本文中使用INotifyPropertyChanged来实现。闲话少说进入正题。

首先定义一个元素类Element,这里包含X坐标,Y坐标,小鸡显示图像,是否移动,是否加速,是否跳跃等等属性。如下为部分代码:

View Code

class Element : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;//public EventHandler PropertyChangedX;//移动X坐标改变触发事件//public EventHandler PropertyChangedY;private Double _x;public Double X{get { return _x; }set { _x = value;if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs("X"));}}}

看了代码大家应该理解了,当修改小鸡的X坐标时,对象的属性也一起变更。

有了小鸡类后,就可以定义对象了,然后将小鸡添加进屏幕。同WINFORM一样,进行按键事件编写,上为跳跃,左右移动,空格加速。

在WINFORM里,有TIMER可以进行模拟帧,可是在wpf里没有timer这个类,于是我们使用System.Windows.Threading.DispatcherTimer。如下:

View Code

 dispatcherTimer = new System.Windows.Threading.DispatcherTimer();dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 30);dispatcherTimer.Start();

在DispatcherTimer的事件里进行判断和移动操作。

关于移动,由于WPF 每个可以显示的控件,可以对其进行动画操作,因此,本文采用TranslateTransform。如下:

View Code

    <Rectangle Height="26" Name="Road" Stroke="White" Width="1200" VerticalAlignment="Bottom" Margin="0,0,0,0"><Rectangle.RenderTransform><TranslateTransform x:Name="TranslateTransformRoad" X="0" Y="0"></TranslateTransform></Rectangle.RenderTransform><Rectangle.Fill><ImageBrush ImageSource="D:\TestMyProduct\WPF_Chicken\WPF_Chicken\Resources\Road.jpg" Stretch="Fill"></ImageBrush></Rectangle.Fill></Rectangle>

看了上面的代码,可以理解,我先定义了一个矩形,然后对矩形给予变换,(我习惯把render翻译成给予~~)初始值,都是X=0,Y=0,当我想移动他时,就改变他的X的值,加1,或加2就可以了。

在然后就是定义子弹,子弹有四个属性,X,Y,LIFE,BulletImg,定义好子弹类后,将子弹添加进屏幕。文中使用Image来添加子弹。如下:

View Code

  Bullet Bullet = new Bullet();Bullet.BulletImg = new BitmapImage(new Uri(@"D:\TestMyProduct\WPF_Chicken\WPF_Chicken\Resources\BirdBack.GIF"));System.Windows.Controls.Image Img = new System.Windows.Controls.Image();Img.Source = Bullet.BulletImg;Img.Width = 10;Img.Height = 10;Img.Stretch = Stretch.Fill;Img.Margin = new Thickness(0, 0, 0 , 0);Img.VerticalAlignment = VerticalAlignment.Bottom;Img.HorizontalAlignment = HorizontalAlignment.Right;Img.RenderTransform = new TranslateTransform(0, -30);//添加进集合ImgList.Add(Img);BulletList.Add(Bullet);//添加进屏幕Root.Children.Add(Img);

子弹添加进去后,就是让他自己移动,这里采用改变子弹的MARGIN属性来控制。上面的代码有个小问题,我也没解决,就是图片添加进去后的位置我固定不了,所以我就对子弹进给予了变换 Img.RenderTransform = new TranslateTransform(0, -30)

最后就是死亡定义了,这个死亡定义还是比较讨厌的, 可能是我的基础不太好,没有找到更好的办法,于是我采用了本方法,即如果子弹的X 在小鸡的图片之间 并且 小鸡跳起的高度 小于10,那就死亡了。

由于写的比较匆忙,有一些没用到的对象忘记删除了就上传了,还有就是图片全部使用的是绝对路径,由于实在是WPF还不熟。。所以。。还请见谅。

开发环境:vs2008

源码下载地址:http://download.csdn.net/detail/kiba518/4372786

补充:我没有对子弹进行释放,想扩展的朋友在扩展时需要在子弹打到屏幕外时,将子弹移除。

另外,程序似乎有个BUG,但我不太确定,就是是否移动到快到终点的时候,就不在出现子弹了?有解决的一定告诉我方法啊~

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

WPF游戏开发——小鸡快跑相关推荐

  1. Html5 Egret游戏开发 成语大挑战(三)开始界面

    Html5 Egret游戏开发 成语大挑战(三)开始界面 本篇需要在前面的素材准备完毕,才可以开始,使用egret的eui结合代码编辑,快速完成基本的界面搭建,这里写的可能比较细,目的是减少大家对于其 ...

  2. 1.15 从0开始学习Unity游戏开发--游戏UI

    上一章中,我们剩下最后一个任务,需要支持鼠标控制准心来进行设计,那么准心本质上就是一个始终呈现在屏幕上的一个图片,你当然可以用一个3D物体来制作,之前讲解渲染概念的时候也提到过,我们的屏幕就是相机的近 ...

  3. Silverlight游戏设计(Game Design):(二)场景编辑器让游戏开发更美好

    如果哪天光荣告诉我:<三国志>系列将终结,我会义无返顾的用余下那点青春继续诠释这部中国历史经典题材游戏,已无法细数它占据了我多少童年的回忆,就好比曾有那么一群满腔热血的<梦幻模拟战& ...

  4. 一款好的游戏开发IDE是什么样子?Rider使用体验和建议

    这是[游戏开发那些事]第59篇原创 作为一名入行多年的游戏开发者,尤其是虚幻引擎的重度用户,我在IDE工具的选择上真的很难有VisualStudio以外的其他选项.不过自从 2017年JetBrain ...

  5. Silverlight MMORPG网页游戏开发课程[一期] 序言

    本课程Demo在线演示地址:http://silverfuture.cn/ (随课程进度不断更新,所有资源暂时放在xap) 2010年7月20日是一个不平凡的日子,应朋友的邀请在自己的家乡广西师范大学 ...

  6. 世嘉新人培训教材_游戏开发

    世嘉新人培训教材_游戏开发 第一章 第一个游戏 开发环境搭建 Windows 二级目录 三级目录 第一章 第一个游戏 开发环境搭建 1.在微信公众号下载vs2017 2.快速安装程序包含有Window ...

  7. Unity 创建2D平台游戏开发学习教程

    了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...

  8. Unity2D游戏开发和C#编程大师班

    本课程采用现代游戏开发的最新内容和最新技术(Unity 2D 2022) 学习任何东西的最好方法是以一种真正有趣的方式去做,这就是这门课程的来源.如果你想了解你看到的这些不可思议的游戏是如何制作的,没 ...

  9. UE4蓝图无代码编程游戏开发技能学习教程

    在虚幻引擎4中创建.设计和开发自己的游戏,无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Ga ...

最新文章

  1. Servlet 监听器
  2. influxdb数据过期_Influxdb Cluster下的数据写入
  3. 1251: 字母图形 [水题]
  4. js实现可拖拽的div
  5. 地理大数据下载网址推荐
  6. 索尼相机手机控制对焦,操控指南丨 使用索尼微单的十个小技巧
  7. HTML居中对齐样例
  8. 【等保常见问题解答】等保测评机构能帮忙做等保整改吗?
  9. 配置Windows系统的IP地址为静态IP
  10. 帆软报表决策系统忘记密码重置
  11. AcitveMQ--HelloWorld
  12. 三态内容寻址存储器(TCAM)工作原理
  13. Android开发读取通讯录信息
  14. 海格里斯大型双层冷库建设 蔬菜水果农产品multi-storey cold store
  15. RSA公私钥生成、加解密、签名及验签的原理及工具类
  16. 《入门练习》1、长方形周长和面积
  17. 保险IT业从核心系统开发向服务转型
  18. 9.1黑马Vue电商后台管理系统商品管理模块完善:编辑商品的功能
  19. Java基础案例2-4为新员工分配部门
  20. 如何在windows电脑端添加本地环回网卡loopback网络适配器

热门文章

  1. 1.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
  2. 安迪的第一个字典(c++)
  3. GEF教程及demo源码
  4. Java工作小组名称_小组名称和口号
  5. c语言中ANSI标准的关键字,C语言中32个关键字详解
  6. php简单论坛登录注册,php登录注册求救
  7. 局部钩子能防全局钩子吗_这个英雄还值得我们去练吗?百里玄策打法难点解析...
  8. 分布式丛林探险系列之 Redis 主从复制模式
  9. 计算机硬件系统维护经验与体会,计算机操作系统维护与优化的实训报告心得体会.docx...
  10. VS2022编写C语言及背景美化