cocos2dx-学习笔记(总)

1.渲染框架

1.导演与层
  • 1.导演Director-Ref(单实例类)

  • 2.层Layer-Node节点-Ref

2.重点:将节点2设置为节点1的子节点的方法:
  • 节点1->addChild(节点2);
3.Node的设置/获取属性的方法:
  • 1.设置/获取位置:setPosition/getPosition(设置位置时,如果有父节点,则是以父节点内容左下角坐标为坐标系原点,与父节点锚点无关)

  • 2.设置/获取旋转:setRotation/getRotation

  • 3.设置/获取缩放:setScale/getScale

  • 4.设置/获取倾斜:setSkew/getSkew

  • 5.设置/获取翻转:setFlipped/getFilpped(不影响子节点)

  • 6.设置/获取透明度:setOpacity/getOpacity(取值范围0-255)(不影响子节点)

  • 7.设置/获取颜色:setColor/getColor(不影响子节点)

  • 8.设置/获取是否可见:setVisible/getVisible

  • 9.设置/获取锚点:setAnchorPoint(左下角为(0,0),右上角为(1,1)),层的锚点默认在(0,0),其他节点的锚点默认在(0.5,0.5)

  • 10.设置/获取内容大小:setContentSize/getContentSize(获取节点的大小(层的大小与屏幕大小一样),与缩放和旋转无关)

  • 11.设置ZOrder:setZOrder/getZOrder(Z轴的顺序,Z值越大越后渲染)

  • 12.设置/获取标签:可以通过标签删除节点;

  • 13.设置/获取名字:可以通过名字删除节点;

  • 14.设置/获取父节点:setParent(节点)/getParent();

4.移除节点的方法Node:
  • 1.removeChild(Node* child);//移除某一个节点

  • 2.removeChildByTag();//通过标签移除节点

  • 3.removeChildByName();//通过名字移除节点

  • 4.removeAllChild();//移除所有节点

  • 5.removeFromParent();//从父节点上移除

5.精灵:
  • 1.设置纹理: sp->setTexture(“图片路径”);

  • 2.设置纹理矩形:sp->setTextureRect(Rect(左下角坐标,宽高));

6.Size类:由宽高组成;
7.Rect类:由左下角坐标和矩形宽高组成;
8.获取可视区域的起点和大小:
  • _director->getVisibleOrigin();

  • _director->getVisibleSize();

9.Cocos2d-x的四大坐标系:
  • 1.OpenGL坐标系:左下角为原点,x轴向右,y轴向上;

  • 2.世界坐标系:与OpenGL坐标系相同;

  • 3.本地坐标系:也称为自身坐标系;

  • 4.屏幕坐标系:左上角为原点,x轴向右,y轴向下(触摸事件得到的坐标就是屏幕坐标,需要从屏幕坐标转世界)

  • 5.转换坐标系的函数:Node:convertTo一类

10.打印到输出窗口:
  • 使用log("%d\n",hp);//字符串使用code格式+转义字符打印

2.二段构建

  • MyLayer.h

    #pragma once
    #include "cocos2d.h"  //cocos2d的基本类
    //继承于Scene
    class MyLayer:public cocos2d::Layer
    {
    public:
    	MyLayer();
    	~MyLayer();
    	//创建方法
    	static MyLayer* create();
    	bool init() override;
    };
    
  • MyLayer.cpp

    #include "MyLayer.h"
    
    using namespace cocos2d;
    MyLayer::MyLayer()
    {
    }
    
    MyLayer::~MyLayer()
    {
    }
    
    MyLayer *MyLayer::create()
    {
    	MyLayer *ret = new (std::nothrow) MyLayer();
    	//判断指针是否为空和是否初始化成功
    	if (ret && ret->init())
    	{
    		ret->autorelease();
    		return ret;
    	}
    	else
    	{
    		delete ret;
    		ret = nullptr;
    		return nullptr;
    	}
    }
    
    bool MyLayer::init()
    {
    	//调用父类的初始化方法
    	if (!Layer::init())
    	{
    		return false;
    	}
    
    	return true;
    }
    

3.调度器

1.调度器:处理随时间变化的动态事件.

隔一段时间调用一次函数,例如:移动/发射子弹/判断碰撞等;

  • 默认调度器:每一帧调用update函数;

    • 1.实现默认调度器的两步:

      • 1.开启默认调度器 Node:scheduleUpdate();

      • 2.重写update函数 Node:update(float delta);//虚函数

  • 单次调度器

    1.开启单次调度器

      void Node::scheduleOnce(SEL_SCHEDULE selector, float delay);// 1.方法 2.延时
    
      void Node::scheduleOnce(const std::function<void(float)> &callback, float delay, const std::string &key);
    
    • 2.写一个返回值类型为void,形参为float类型的函数(一般写在开启单次调度器的类中)
  • 自定义调度器:可以控制时间间隔/调用次数等;

    1.开启自定义调度器schedule

    void Node::schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);

    1.方法 2.间隔时间 2.重复次数(CC_REPEAT_FOREVER表示最大值,为一直重复)(总共调用repeat+1次) 3.延时)

    void Node::schedule(const std::function<void(float)> &callback, const std::string &key);

    2.写一个返回值类型为void,形参为float类型的函数

2.function与lambda
  • typedef void(Ref::*SEL_SCHEDULE)(float):

    取别名:

    void(*pFunc)(float):pFunc指向返回值为void,形参为float类型的函数

    void(Ref::*pFunc)(float):pFunc是指向Ref类的成员函数,

    成员函数返回值类型为void,形参为float.

    typedef void(Ref::*SEL_SCHEDULE)(float):SEL_SCHEDULE是类型名,是成员函数指针的别名.

    成员函数指针:赋值:&类名::成员函数

  • function<返回值类型(形参表))>

    1.函数名的地址(只能传普通函数的地址)

    2.仿函数

    3.l

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值