1,cocos2d内存管理机制
某一个对象,A代码对其应用,引用基数++,B代码对其释放,引用基数--;这样就可以方便的统计
代码对某一个对象引用了多少次,每一个代码用某个对象,他的基数++;当所有的代码都不适用的
时候它的referenceconunt= 0;就会删除该对象;当某一个对象调用autorelase();方法时,他会把当前的
对象放到一个自动释放的池里,该池会在每一个绘图生命周期结束(一帧绘图结束)的时候会获取到池中所有的对象并自动释放对象一次,建议永远不要用delete obj,因为不知道是否有其他的对象引用该对象,造成系统的崩溃;一般使用了某个对象时写obj->retain(),在对象使用完毕后释放写obj->release();也可以在对象new了之后就调用obj->autorelease();方法,它会当前绘图周期结束release();如果这时依然没有代码引用该对象,那么他就会被删除!
2,自定义Sprite的创建
Ball.h
#include <iostream>
#include<cocos2d.h>
Using namespace std;
Class Ball:public Sprite{
Public:
Virtualbool init();
CREATE_FUNCK(Ball);
}
Ball.cpp
#include ball.h
Bool Ball::init(){
initWithFile(“xx.png”);//调用父类的初始化的方法
return true;
}
3,自定义场景
#pragma once#include "cocos2d.h"
using namespace cocos2d;
class HelpScene:public cocos2d::Layer
{
public:
//这里init和CREATE_FUNCK是约定俗称的方法,集合每一个对象初始化都需要,然后就是自定义的方法
//在.h头文件里面声明,在.cpp文件里面定义
bool init();
CREATE_FUNC(HelpScene);<==>
StaticBall * create(){Ball * b = new Ball();b->init();b->atuorelase();return b;};
static Scene * createScene();
};
#include "HelpScene.h"
#include "HelloWorldScene.h"
//对init方法的实现
bool HelpScene::init(){
if(!Layer::init()){
return false;
}
auto spbk = Sprite::create("help.png");
spbk->setPosition(Point::ZERO);
spbk->setAnchorPoint(Point::ZERO);
this->addChild(spbk);
//在该场景初始化的时候就注册了点击和滑动屏幕的事件
EventListenerTouchOneByOne * touch = EventListenerTouchOneByOne::create();
touch->onTouchBegan=[](Touch *touch,Event * event){
return true;
};
touch->onTouchMoved=[](Touch *touch,Event * event){
Director::getInstance()->replaceScene(HelloWorld::createScene());
};
_eventDispatcher->addEventListenerWithSceneGraPHPriority(touch,this);
return true;
}
Scene * HelpScene::createScene(){
//helloWorld本来是一个层,它需要创建一个场景,导演运行场景,场景添加层layer,layer添加sprite auto scene = Scene::create(); auto layer = HelpScene::create();//就调用CREATE_FUNCK方法,然后在调用init()初始化的方法 scene->addChild(layer); return scene; }