文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Silverlight C# 游戏开发:L9 天空盒

Silverlight C# 游戏开发:L9 天空盒

时间:2011-02-10  来源:nowpaper

 

从上图可以想想,由6张图片可以组合封闭空间,所以先准备上面的这样的一张图,我直接从别的地方借来了6张标准的SkyBox图片,关于SkyBox的图片可以请3D美术师帮助,或者借助网络资源,另外,有一些专门制作天空盒的软件。

最先需要准备图片,把他们加入到工程中

  

我为了方便,这次不再构建很大的独立控件,而是通过继承的方式直接获得之前写过的类:

 

public class Lesson09 : Lesson04
{
    public Lesson09()
    {
    }
}

 

 

关于Lesson04,可以参见: Silverlight C# 游戏开发:L4 模型组和简单的动画

我们将完成下面的这张截图的效果: 

 

在继承完了以后,需要对lesson04类做一些小小的改造,比如将Execution.Game给protected出来,将其中的DispatcherTimer的Tick事件执行方法virtual,这样可以帮助Lesson09少写很多的代码。

public class Lesson09 : Lesson04
{
    public Lesson09()
    {
        //创建天空盒
        Skybox skybox = new Skybox();
        //天空盒6个方向的指定贴图
        skybox.Back = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_BK.png"));
        skybox.Bottom = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_DN.png"));
        skybox.Front = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_FR.png"));
        skybox.Left = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_LF.png"));
        skybox.Right = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_RT.png"));
        skybox.Top = new ImageMap(Runtime.Instance.ContentManager.Load<Balder.Imaging.Image>("/Balder_Studio;component/SkyBox/cloudy_noon_UP.png"));
        //激活天空盒,如果没有激活则不会显示出来
        skybox.IsEnabled = true;
        //指定
        game.Skybox = skybox;
    }
    double _sin = 0;
    //重写Lesson04中的Timer动画
    protected override void _dispatchertimer_Tick(object sender, EventArgs e)
    {
        //首先执行原来的
        base._dispatchertimer_Tick(sender, e);
        //判断是否存在摄像机
        if (game.Camera == null)
            return;
        //按照Sin曲线计算x,y,z的值,使之围绕浏览Camera的TargetPoint
        var x = System.Math.Cos(_sin) * 250;
        var y = System.Math.Sin(2*_sin) * 250;
        var z = System.Math.Sin(_sin) * 150;
        game.Camera.Position.X = x;
        game.Camera.Position.Y = y;
        game.Camera.Position.Z = z;
        //变化
        _sin += 0.016;
    }
}

上面的代码就完成了天空盒的添加,如果你了解之前的内容,看起来很容易吧:)

点击直接下载工程浏览和测试,运行效果如下:

 

工程中如果缺少Balder.dll请在这里快速下载:SL4_Balder.rar

推荐Silverlight游戏开发博客:深蓝色右手

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载