zoukankan      html  css  js  c++  java
  • Cocos2dx for WindowsPhone:从开始到一个场景再一张图片

    在Cocos2d-x XNA的工程模板里创建出来的工程有点复杂,如果直接去看可能会晕头转向,如果想将其完全理解,推荐各位看快乐之王的Cocos2D-x for XNA类解析系列,但通常来说,我所追求的应是简洁易读可塑的代码,所以本篇探讨的是如何更加明了的展现Cocos2d-x的魅力。

      从简单开始

    建立cocos2d-x XNA的工程可以通过所带模版直接建立,也可以直接在空白的XNA工程里建立,下面就是这种的建立方法。

    首先,点击新建项目,选择WindowsPhoneGame

    image

    然后,引用cocos2d-xna.dll,在这里需要自行编译一个cocos2d-x XNA的dll,相关的说明可以参看“Cocos2d-x for WindowsPhone:万丈高楼亦可不需平地起

    再后,建立一个名字叫AppDelegate的类,继承自CCApplication,AppDelegate不是固定的类名,按照个人的需求可以自己写,你可以叫GameClient或者GameRoot什么都好。

    public class AppDelegate : CCApplication
    {
        public AppDelegate(Game game, GraphicsDeviceManager graphics)
            : base(game, graphics)
        {
            CCApplication.sm_pSharedApplication = this;
        }
        public override bool applicationDidFinishLaunching()
        {
            //初始化CCDirector
            CCDirector pDirector = CCDirector.sharedDirector();
            pDirector.setOpenGLView();
            //是否显示FPS(每秒帧速率)
            pDirector.DisplayFPS = true;
            // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
            // 在这里设置Updata的间隔
            pDirector.animationInterval = 1.0 / 60;
            // 创建一个场景
            CCScene pScene = new TestScene() ;
            // 运行这个场景
            pDirector.runWithScene(pScene);
            return true;
        }
    }

    这个类里简单写了注释,相比用模板建立起来的AppDelegate代码少了很多,模板建立的涵盖比较全,写法也比较特殊,其实很多对于初学来说没有用,将原来的类简化明确各代码用途,待后续用到一些深入的方法时候再对Application继承类做改造。将上面代码实现后,你会发现TestScene类没有实现,这个就是我们下面要说的场景。

      一个场景和一张图片

    场景对于游戏来说是内容表现的承载,基本上所有的展示都在这里来做,而cocos2d也有一个比较好的场景管理器——CCDirector,这个名字起好,游戏就像拍电影一样,由导演来安排在什么时候有什么样的场景,它有例如下面的场景管理方法:

    public void pushScene(CCScene pScene);
    public void replaceScene(CCScene pScene);
    public void popScene();
    public void runWithScene(CCScene pScene);

    上面就用上了runWithScene方法,实现一个场景也很简单,新建一个类比如叫TestScene,场景里面需要有元素,比如一张图片,实现如下代码:

    public class TestScene : CCScene
    {
        public TestScene()
        {
            InitScene();
        }
        public void InitScene()
        {
            CCSprite image = CCSprite.spriteWithFile("HelloWorld");
            image.position = new CCPoint(400, 240);
            this.addChild(image);
        }        
    }

    上面的代码是创建了一张图片的精灵,通过文件读取,并且将位置设置在(400,240),并将其添加到场景中。

    但是你会发现图片没有加入,你可以找到一张,起名叫HelloWorld,当然,你可以随便叫什么名,只需要将代码调整正确即可,注意代码里不需要写后缀,因为XNA里读取不需要。添加到你的Content子工程目录里,如果放在的是二级目录,例如Images/HelloWorld.png,那么代码里就得写成CCSprite.spriteWithFile("Images/HelloWorld");

      整合起来

    在主程序和cocos2d-x的类没有建立任何联系,所以运行起来是没有效果,到现在就需要改造Game1.cs了,打开文件,然后把Game1类改成下面的样子:

    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
    
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
    
            this.graphics.IsFullScreen = true;
    
            TargetElapsedTime = TimeSpan.FromTicks(333333);
    
            InactiveSleepTime = TimeSpan.FromSeconds(1);
    
            CCApplication application = new AppDelegate(this, graphics);
            this.Components.Add(application);
        }
    
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            base.Update(gameTime);
        }
    }

    把那些自动生成的没用代码删除掉,整体看起来很简洁,我就觉得极简的代码能有一种艺术感,清晰明了,那些没用的代码无时不刻浪费着时间。

    好了请确保上述中的AppDelegate.cs、TestScene.cs、Game1.cs都已经做好了修改,以及HelloWorld图片,运行一下。

    啊哈~~~报错了

      解决错误,字体文件

    这个错误你看起来会莫名其妙,实际上是因为cocos2d-x XNA版本内部读取了一个Arial.spritefont,这个字体文件是引擎的默认字体,就和直接用XNA写文字一样,需要一个spritefont来指定样式,

    image

    要加这个文件直接将模板里的复制过来可以,自己建立一个也可以,这就是看个人喜好了,但是记得要放在fonts目录里,在其他的地方是不行的。

    加入后再运行就可以看到效果了。

    本篇主要用极简的代码来实现一个开始程序、一个场景、一个图片的显示,这个例子可以帮助我们对引擎基本运作的理解。

      源代码

    源代码由于考虑后续的文章,所以和本篇中的代码有所出入。

    点击这里下载

  • 相关阅读:
    grep awk 搜索日志常用命令
    【MySQL】通过Percona Monitoring and Management实现数据库的监控
    阿里云centos7.4安装nexus
    Java 开源博客 Solo 1.8.0 发布
    《设计模式之美》
    《设计模式之美》
    《设计模式之美》
    《设计模式之美》
    iOS 通过反射的方式调用目标函数
    回调方法?钩子方法?模板模式?
  • 原文地址:https://www.cnblogs.com/nowpaper/p/2552128.html
Copyright © 2011-2022 走看看