zoukankan      html  css  js  c++  java
  • Silverlight C# 游戏开发:Flyer04让我们一起来摇摆吧

    接上回所述,咱们的飞行员已经开始往下飘落了,但是似乎少点什么,所谓没有危险那里来的乐趣,所以要增加一个敌人来搞定为主角造成点难度,本篇作为无聊,只是说了一些废话,重复了前几篇的代码,只是不过稍微做了一些修改,废话少说,直接上图:

     我们看到和上次相比,增加了两个部分,一个是零件堆,一个是血条,首先我们先完成血条的部分,这部分代码如下:

    public class ClassFlyerLife : StackPanel
    {
    //用一个StackPanel容器来作为生命条
    StackPanel Life = new StackPanel() { VerticalAlignment = VerticalAlignment.Center };
    public ClassFlyerLife()
    {
    Width
    = 120;
    Height
    = 18;
    this.Background = new SolidColorBrush(Colors.Orange);
    Image Face
    = new Image();
    Face.Width
    = Face.Height = 16;
    this.Orientation = Orientation.Horizontal;
    Face.VerticalAlignment
    = VerticalAlignment.Center;
    Face.Source
    = new BitmapImage(new Uri(@"Src/face.jpg", UriKind.Relative));
    this.Children.Add(Face);
    Life.Width
    = 100;
    Life.Height
    = 16;
    Life.Background
    = new SolidColorBrush(Colors.Red);
    this.Children.Add(Life);
    Canvas.SetLeft(
    this, 10);
    Canvas.SetTop(
    this, 10);
    }
    }

    创建一个ClassFlyerLife类继承StackPanel,用来做头像以及血条的容器,然后分别创建出来血条和头像添加到容器中,可以控制Life的Width来控制血的多少。

    OK,下一步,创建飘动的螺丝和螺母,这个部分的动画基本上和主角的没什么太多区别,只是从6行变成了1行,仍然是8帧一行,只需要拆分放到Frames组当中即可,当中的动画也是和主角的一样,通过一个NextFrame以及一个定时器来刷新。

    代码部分不做提交,基本上大同小异,可是和飞行员有一个非常不同的地方,那就是螺丝和螺母共享大量的数据以及处理方法,只是图片不同罢了,那么按照伟大的面向对象方法只需要简单继承一下就好啦……不过看起来于此做法非常不值得,还是简单的做吧,在构造函数中增加一个参数,用枚举的方法来区分到底是螺丝钉还是螺丝母,为这问题也是转悠的半天,还是看看代码吧。

    /// <summary>
    /// 螺丝或者螺母的枚举
    /// 在ClassSolid构造的时候据此选择螺丝或者螺母的图片
    /// </summary>
    public enum emSolidSort
    {
    nut, screw
    }
    /// <summary>
    /// 固体类,也就是飞行员的敌人。。。
    /// </summary>
    public class ClassSolid : Canvas
    {
    int _iFrame = 0;
    Image _image;
    ImageSource[] SolidFrames
    = new ImageSource[8];
    public ClassSolid(emSolidSort sort)
    {

    _image
    = new Image();
    BitmapImage bitmap;
    if(sort == emSolidSort.nut)
    bitmap
    = new BitmapImage(new Uri(@"Src/solidLM.png", UriKind.Relative));
    else
    bitmap
    = new BitmapImage(new Uri(@"Src/solidLS.png", UriKind.Relative));
    bitmap.ImageOpened
    += new EventHandler<RoutedEventArgs>(bitmap_ImageOpened);
    _image.Source
    = bitmap;

    this.Children.Add(_image);
    //设定一个循环来控制Solid的动画
    DispatcherTimer dispatcherTimer = new DispatcherTimer();
    dispatcherTimer.Tick
    += new EventHandler(TickGameFrameLoop);
    dispatcherTimer.Interval
    = TimeSpan.FromMilliseconds(30); //重复间隔
    dispatcherTimer.Start();
    }
    }

    所有的Solid应该有一个飞行的控制,那么这个部分和Cloud很接近,但是我们要让游戏“摇摆”起来,所以和云彩也有一点点的不用,即Solid会随风发生变动,做风力的方法也比较简单,只是将X坐标做了偏移,用来表示风向发生的变化:

    所以,你需要加一个变量,然后按照一段时间变化一次,时间控制仍然用一个定时器来搞定,毕竟么,就是那么容易。

    好了,具体代码,不在这里展示,请参看代码,点击这里下载

    今天就到这里,本想把碰撞做了,可是时间太晚,下次再见,晚安

  • 相关阅读:
    <<一线架构师实践指南>>读书笔记之二PA阶段
    【读书笔记】简约至上交互设计四策略第4章 删除
    大数据量简单数据查询设计思考
    识别项目干系人
    【读书笔记】简约至上交互设计四策略第3章 简约四策略
    【读书笔记】简约至上交互设计四策略第2章 明确认识
    【读书笔记】简约至上交互设计四策略第1章 话说简单
    采购管理计划
    项目管理整体的一些基本概念1
    【读书笔记】简约至上交互设计四策略第5章 组织
  • 原文地址:https://www.cnblogs.com/nowpaper/p/1661410.html
Copyright © 2011-2022 走看看