zoukankan      html  css  js  c++  java
  • cocos2dxnaTweeJump学习笔记2(都是自己看别人代码后所感所想,希望有懂的人指出我的错误或者大家交流交流)

    知识点一:

    “在使用的时候通过spriteManager.getChildByTag(tag:)取出相应的sprite进行position的赋值等达到我们需要的贴图或者移动、”

    在看到原博客里的这句话时,很不解。后来又看了一下代码,终于懂了。

    首先,在Main.cs里实例化里一个子节点spriteManager,然后将它addchild进去,addchild里的第三个参数tags,我觉得作用类似于ID,我们通过这个ID用getChildByTag可以找到一个对应的子节点spriteManager。

    CCSpriteBatchNode spriteManager = (CCSpriteBatchNode)getChildByTag((int)tags.kSpriteManager);

    CCSpriteBatchNode spriteManager = CCSpriteBatchNode.batchNodeWithFile("Images/sprites", 10);
    addChild(spriteManager, -1, (int)tags.kSpriteManager);

    知识点二:

    游戏控制-重力感应

    这个版本的cocos2d-xna是没有封装重力感应的,我用的是XNA中自带的重力感应,因为Accelerometer它也是事件驱动所以很搭不会出现不兼容的现象,应该在以后版本中也不会对它封装了吧。

    1添加Microsoft.Devices.Sensors引用

    2创建Accelerometer对象,

    3注册Accelerometer对象的CurrentValueChanged事件,

    4启动Accelerometer对象Start()方法来启动重力感应监听。

    在注册的事件处理方法中可以通过e.SensorReading.Acceleration.X和e.SensorReading.Acceleration.Y,e.SensorReading.Acceleration.Z来访问当前的加速度的三维偏移值。这里我要提的只有一个,很多教程里都是注册Accelerometer对象的ReadingChanged事件,当你使用的是Windows Phone 7.1 SDK时,VS会提示你ReadingChanged已经过时,当然你是可以用,但是还是建议你使用CurrentValueChanged。TimeBetweenUpdates属性会影响到两次触发CurrentValueChanged事件的时间间隔,所以如果你要设置重力感应的感应时间间隔的话最好还是使用CurrentValueChanged。详细见源代码Game.cs的init()。

     

    知识点三:

    集成OpenXLive SDK

    OpenXLive的功能:

    积分榜

      让全世界都知道你是这个游戏中的最强者!积分榜,用来记录你的游戏成绩,让你和全世界的玩家分享你超凡的游戏成绩。

    · 游戏成就

      一个个游戏成就,像一枚枚勋章,记录了你在游戏中的成长历程。篝火边,用成就,告诉你的朋友,你是如何成为游戏中最强的勇士。

    · 社交网络

      告诉你,这世界上还有多少兄弟姐妹和你一起在游戏中奋战。找到他们,和他们成为好友,一起开始一段冒险的路程。

    · 个人中心

      这里有你过去、现在和将来的故事。你的积分、你的成就、你玩过的游戏、你的好友,这是你值得珍藏的一页。

    · 云存储

      不想让别人发现你在游戏中的秘密?把它放在云端吧。你可以在任何地方,打开尘封的秘密。

    · 游戏公告

      告诉你游戏中发生的大事件,比如,你成为了NO.1。

     

    如果你在前面的

    勾选上了OpenXLive sdk,新建项目中就会我们添加好了引用就可以很方便的使用它。

    熟悉XNA的朋友会发现其实我们的游戏引擎Cocos2d-XNA就是一个GameComponent而我们的OpenXLive SDK也是一个GameComponent,打开我们的主游戏类Game1源代码中叫GameMain,就是找到继承于Microsoft.Xna.Framework.Game的类。

    对比我们项目TweeJump和示例程序HelloCocos2d的Game1.cs文件,多的几句代码就是集成OpenXLive的方式。

    Game1类中字段

    //#error Please full your game Secret Key in below code

    private string APISecretKey = "Y8eUF6f5xXEGSuw3DkKntbhQ";

    XLiveFormManager manager;

     

    Game1构造函数中吧XLiveFormManager实例并Add到Component中

    // Create XLive FormManager

    manager = new XLiveFormManager(this, APISecretKey);

    manager.OpenSession();

    // Add XLive FormManager in Components

    Components.Add(manager);

     

    这里需要注意的是OpenXLive的GameComponents的Add必须放在Cocos2d-xna的游戏引擎的GameComponents之前。

    在LoadContent()里加载资源给OpenXLive SDK UI添加背景和退出UI的事件。

    Texture2D background = this.Content.Load<Texture2D>(@"images\OpenXLive");

    manager.Background = background;

    manager.UIExitingEvent += new EventHandler(manager_UIExiting);

     

    void manager_UIExiting(object sender, EventArgs e)

    {

        CCDirector.sharedDirector().runningScene.visible = true;

    }

     

    如果在新建项目的时候你勾选了OpenXLive SDK这些代码都是默认添加到Game1.cs中的。

     

    下面以MainMenu为例教你在游戏中使用OpenXLive SDK。

    init()方法中创建一个按钮

    CCMenuItemImage Lobby = CCMenuItemImage.itemFromNormalImage(

    @"images\Lobby", @"images\Lobby1", this,

    new SEL_MenuHandler(LobbyCallback));

    Lobby.position = new CCPoint(0, 20);

    CCMenu LMenu = CCMenu.menuWithItems(Lobby);

    LMenu.position = new CCPoint(240, 60);

    回调方法:

    public virtual void LobbyCallback(CCObject pSender)

    {

    CCDirector.sharedDirector().pause();

           CCDirector.sharedDirector().runningScene.visible = false;          

    OpenXLive.Forms.XLiveFormFactory.Factory.ShowForm("Lobby");

    }

     

    OpenXLive.Forms.XLiveFormFactory.Factory.ShowForm("Lobby");show出我们需要的窗体这里是Lobby,除了”Lobby”还有"Startup"、"Leaderboard"、"Achievements"、"Logon"、"MyCenter"、"FirendsList"、"OnlinePlayer"、"Pause"、 "OpenXLiveGames"。

    TweeJump源代码中使用了"Achievements"、"Leaderboard"、"Lobby"这三个常用功能。在Show出窗体后务必把游戏暂停当前Scene隐藏。在回来的时候也务必把游戏开始当前Scene显示。

    void manager_UIExitingEvent(object sender, EventArgs e)

    {

    CCDirector.sharedDirector().runningScene.visible = true;

    CCDirector.sharedDirector().resume();

    }

    在原TweeJump里的Update里的Messagebox里自定义了一个方法,如下:

    protected override void Update(GameTime gameTime)       

      {   

                 if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)            

        {                

          CCDirector.sharedDirector().pause();                

          MessageBox.Show("Exit ?", "OpenXLive",MessageBoxButtons.OKCancel,Exit);                

           //这里的Exit是下面的方法            

        }            

        base.Update(gameTime);            

        // TODO: Add your update logic here

     }

     void Exit(DialogResult result)
            {
                if (result == DialogResult.OK)
                {
                    this.Exit();
                }
                else
                {
                    CCDirector.sharedDirector().resume();
                }
            }

  • 相关阅读:
    CSS 3列等高
    CSS分列等高
    jQuery函数
    JQuery解析JSON数据
    2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?
    2020-09-24:jvm监控系统是通过jmx做的么?
    2020-09-23:TCP头部信息有哪些?
    2020-09-22:已知两个数的最大公约数和最小公倍数,并且这两个数不能是最大公约数和最小公倍数本身。如何判断这两个数是否存在?
    2020-09-21:已知最大公约数和最小公倍数,如何判断这两个数是否存在?
    2020-09-20:如何判断一个数是质数?
  • 原文地址:https://www.cnblogs.com/dieaz5/p/2591515.html
Copyright © 2011-2022 走看看