Silverlight C# 游戏开发:Flyer06小小的改进让游戏更有趣
今天这套主题,仅仅是通过改进让游戏更加有趣,游戏中的细节永远是耐人寻味,有的游戏团队为此付诸努力甚至成为整个项目的成功关键。
我们将在本次完成加血、背景、更加完美的碰撞,让游戏变得更加有趣。
首先改进碰撞范围,对于主角来说,并不需要完全的碰撞,而只有身体的部分,所以将Rect设置的小一点,例如Width = 32, Height = 36
我们再加上一个食物类,让游戏中有加血的方法,具体效果如下:
食物类的代码如下:
{
private Rectangle _rectangle = new Rectangle()
Image Food;
ImageSource[] FoodFrames = new ImageSource[4];
public ClassFood()
{
Food = new Image();
BitmapImage bitmap = new BitmapImage(new Uri(@"Src/food.png", UriKind.Relative));
bitmap.ImageOpened += new EventHandler<RoutedEventArgs>(bitmap_ImageOpened);
Food.Source = bitmap;
this.Children.Add(Food);
this.Children.Add(_rectangle);
}
private static int _framecont = 0;
void bitmap_ImageOpened(object sender, RoutedEventArgs e)
{
Food.Source = sender as BitmapImage;
for (int i = 0; i < 4; i++)
{
WriteableBitmap wb = new WriteableBitmap(32, 32);
wb.Render(Food, new TranslateTransform() { X = -32 * i, Y = 0 });
wb.Invalidate();
FoodFrames[i] = (ImageSource)wb;
}
Food.Source = FoodFrames[_framecont];
_framecont++;
if (_framecont >= 4)
_framecont = 0;
}
/// <summary>
/// 移动速度
/// </summary>
public double Speed = 1;
public double X
{
get { return Canvas.GetLeft(this); }
set { Canvas.SetLeft(this, value); }
}
public double Y
{
get { return Canvas.GetTop(this); }
set { Canvas.SetTop(this, value); }
}
public Rect MyRect
{
get
{
return new Rect(X, Y, _rectangle.Width, _rectangle.Height);
}
}
}
可以看出,这个部分的代码和固体类有很接近的地方,所以我们也同样的写一个组,来管理和创建整个食物动画
{
Random _random = new Random((int)DateTime.Now.Ticks);
public ClassFoodGroup(int max)
{
int segment = (int)(MainPage.ScreenWidth - 64) / max * 2;
for (int i = 0; i < max; i++)
{
ClassFood food = new ClassFood();
this.Children.Add(food);
food.X = _random.Next(segment * i, segment * (i + 1));
food.Y = _random.Next((int)MainPage.ScreenHeight - 64) + MainPage.ScreenHeight;
}
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(TickGameFrameLoop);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(10); //重复间隔
dispatcherTimer.Start();
}
private void TickGameFrameLoop(object sender, EventArgs e)
{
foreach (UIElement s in this.Children)
{
if (s is ClassFood)
{
ClassFood cloud = (s as ClassFood);
if (cloud.Y >= -32)
cloud.Y -= cloud.Speed;
else
cloud.Y = _random.Next(400 - 64) + 400;
}
}
}
}
然后加入到游戏的主循环当中,进行检测判定:
{
Rect rt = food.MyRect;
rt.Intersect(herorect);
if (!double.IsInfinity(rt.Height) && !double.IsInfinity(rt.Width))
{
flyerlife.Add(10);
food.Y = -32;
break;
}
}
好了,F5运行一下,看看效果,相信你会觉得有点意思了,当然了,其他部分的代码需要工程支持,还是先下载代码直接看吧:)
还有一些小细节需要增加,比如背景,背景天空的加入可以让游戏更加丰满,但是背景是有一定的要求的,它肯定不可能一直在上升,于是我们搞了一个背景类来处理内部逻辑。
{
//天空的高度,在这里顺便了解一下在Silverlight里取得图片的宽高
private int skyHeight = 1000;
public ClassBackGroup()
{
Image _Image = new Image();
BitmapImage bitmap = new BitmapImage(new Uri(@"Src/sky.jpg", UriKind.Relative)) ;
bitmap.ImageOpened += new EventHandler<RoutedEventArgs>(bitmap_ImageOpened);
_Image.Source = bitmap;
this.Children.Add(_Image);
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(TickBackGroupLogic);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(40); //重复间隔
dispatcherTimer.Start();
}
//在这个完成事件中可以取得bitmap的高度,同样宽度也可以用类似的方式
void bitmap_ImageOpened(object sender, RoutedEventArgs e)
{
skyHeight = (sender as BitmapSource).PixelHeight;
}
public void TickBackGroupLogic(object sender, EventArgs e)
{
//如果移动大于屏幕减去天空的高度,那么就不能再动了
if (Y< 400 - skyHeight)
Y -= Speed;
}
public double Speed = 0.5;
public double Y
{
get { return Canvas.GetTop(this); }
set { Canvas.SetTop(this, value); }
}
}
最后做一点点的修改,将辅助的线条全部隐蔽,运行效果就是如下了:
基本上已经出来一个游戏的大概形状,在这个基础上,可以做一些修改就变成了更加丰富的游戏,预计在Flyer07就结束这套纯用代码实现的Silverlight小游戏。
本Flyer06的源代码在这里下载。
转载于:https://www.cnblogs.com/nowpaper/archive/2010/03/03/1676754.html
Silverlight C# 游戏开发:Flyer06小小的改进让游戏更有趣相关推荐
- 游戏开发心得——书籍篇——《游戏引擎框架》-专业工具
游戏开发心得--书籍篇--<游戏引擎框架>-专业工具 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 学习<游戏引擎框架&g ...
- u3d游戏开发视频潭州_游戏美术行业的发展与应用人工智能学院专业介绍及未来前景系列报告会二...
为了让2020级新同学对动漫专业加深认识,更好的规划学习,学院于11月12日6点晚邀请了校企合作单位"369云遮月游戏公司"在长安校区图书馆阶梯教室进行了游戏美术行业的发展与应用的 ...
- 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...
- 游戏开发心得——书籍篇——《游戏引擎框架》-导论
游戏开发心得--书籍篇--<游戏引擎框架>-导论 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 学习<游戏引擎框架> ...
- 游戏开发入门(二)游戏中的设计模式
视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深 ...
- 游戏开发入门(二)游戏开发概述
这篇文章主要以问题的形式给大家解答下面几个问题: 1.游戏是如何开发出来的,开发流程大概是什么样子的? 2.游戏相关的职位都有哪些? 3.开发游戏需要哪些技术或能力? 4.程序员一般负责的内容有哪些? ...
- 视频教程-Layabox3D游戏开发入门-微信3D小游戏案例 -微信开发
Layabox3D游戏开发入门-微信3D小游戏案例 有多年Unity程序开发经验,有策划和美术设计的经验.愿意在csdn这个平台和大家一起分享! 金龙 ¥29.00 立即订阅 扫码下载「CSDN程序员 ...
- html5游戏开发 网页版-捕鱼达人游戏源码下载
html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html
- 游戏开发入门(五)游戏动画系统
视频链接:游戏开发入门(五)游戏动画系统(8节课 时常:约2小时30分钟) PPT比视频要块一些 第二节与PPT对不上 视频中杂音太大,如果带耳机还听不清的话,建议直接看内容即可 笔记与总结(请先学习 ...
最新文章
- 2022-2028年中国医学模拟教育产品市场供需现状及投资战略研究报告
- java 跨年 周计算公式_如何跨年计算 两日期之间相隔的周数 with java8 time API
- Pytorch完成基础的模型-线性回归
- 教程 | OpenCV深度神经网络实现人体姿态评估
- 基于深度学习方法的3D数据合成
- phplivechat安卓app下载_PHP在线网页客服系统PHP Live Chat中文版下载
- [置顶] 电信系统方案 电信Boss系统
- HDU2016数据交换
- Faiss优化:针对OMP_NUM_THREADS环境变量设置的测试验证
- cnetos6,centos7添加新网卡,系统不识别的解决办法
- linux 命令 cd -p,Linux_实例讲解Linux中cd命令切换目录的使用技巧,cd命令大家再熟悉不过了,bash sh - phpStudy...
- 大动作!这所“国字头”大学获批成立12个新学院
- B样条曲线介绍和实现(等值线平滑)
- 多点Dmall发布系统Mini OS 宣称要五年覆盖百万门店
- Alex 的 Hadoop 菜鸟教程: 第12课 Sqoop1 安装/导入/导出教程
- UDP打洞原理与N2N内网穿透
- 使用Python画小猪佩奇(turtle库)
- 工业制造厂房vr虚拟实景展示,真实立体呈现到客户面前
- 无法给变量添加属性导致出问题
- 厦门大学c语言第七八章作业答案,数据结构第七章考试题库(含答案).doc
热门文章
- android微信条码支付接口,Android中调用微信支付接口
- sapi cli php mac,make: *** [sapi/cli/php] Error 1 解决办法
- Android用按钮确定单选框,Android RadioButton单选框的使用方法
- Django案例:显示图书信息
- Django讲课笔记11:视图函数的请求和响应
- Spring Boot基础学习笔记19:自定义RedisTemplate与RedisCacheManager
- VB讲课笔记05:数据输入输出
- 粤嵌gec6818项目设计_西安市幸福林带景观及亮化设计国际竞赛终期评审会顺利举行...
- android+proguard目录,Android proguard问题:路径可能不是null或空字符串.路径=“空”...
- html5酷炫表白代码_七夕表白代码,樱花特效+爱心特效+花瓣+评论留言功能等