zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x中对其他某个类的某个属性的获得

    类A要获得类B中的某个属性,可以是节点属性

    方法一

    1.先在B类中定义一个_edge的节点属性(可以在B类中进行各种对_edge的操作),然后写一个方法
    Node* GameController::getEdge(){
      return _edge;
    }

    2.接着在A类中先实例化一个B类的对象,然后用这个对象调用刚才写在B类中的那个方法,就可以获得B类中的那个属性。

    if (gc->getEdge()->getBoundingBox().containsPoint(t->getLocation())) {
       

    }

    方法二

    1.先在B类中定义一个_edge的节点属性(可以在B类中进行各种对_edge的操作)

    2.接着在A类中先实例化一个B类的对象,因为这个对象本身是一个指针,所以再用“*”可以变成一个真实的对象,真实的实例,这时候就可以直接用“.属性值”的方法来获得想要的B类中的_edge的节点属性。

    if ((*gamecontroller)._hero->getPositionX() < 0) {

    }

    有时候恰巧B类是GameScene类,这时候不能在A类中实例化一个B类的对象Scene实例,这时候就要用到

    方法三

    1.在B类GameScene.h中声明

    private:
      static GameScene* m_gamelayer; //游戏场景层的单例对象

    public:
      static GameScene* sharedGameLayer() { return m_gamelayer; } //获取该游戏层单例对象

    2.在B类GameScene.cpp的createScene函数中,把GameScene::create(heroCount)赋值给m_gamelayer

    Scene * GameScene::createScene(int heroCount){
      auto s = Scene::createWithPhysics();

      s->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); //物理引擎调试框

      s->getPhysicsWorld()->setGravity(Vec2(0, -1000));

      m_gamelayer = GameScene::create(heroCount);

      s->addChild(m_gamelayer);

      return s;
    }

    3.再在B类GameScene.h中声明一个将要用到的实用的方法和一个属性

    private:

    int _myScore; //当前游戏分数

    public:

    int getScore();//获取游戏分数

    4.在B类GameScene.cpp中定义将要用到的实用的方法

    //返回此时的分数
    int GameScene::getScore()
    {
      return _myScore;
    }

    5.在A类Baby.cpp对象类中使用(Baby类是场景中的层中的一个对象)

    int m_score=GameScene::sharedGameLayer()->getScore(); //静态函数和静态变量是可以不用对象来引用的,就是说可以直接用  "类名::方法名();"  的格式去调用想要的方法,而不是  "实例化对象->方法名();"

    因为static成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

    在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。这句话很好理解,因为对象是一个实实在在的东西,通过对象来引用非static数据成员,该数据成员只属于他的

    对象,不会是别的对象。但是如果直接使用,static成员函数并不知道一个非static数据成员到底是从哪里来,属于那个对象(一个类可以有多个对象,当然对于sington的实现例外),所以static成员函数中不能直接操作类中的非static数据成员。

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5769702.html
Copyright © 2011-2022 走看看