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