cocos2d-x基础1

本文详细介绍了Cocos2d的内存管理机制,包括对象引用计数、自动释放池以及如何避免内存泄漏。同时,通过自定义Sprite和场景的示例,展示了如何在Cocos2d中实现自定义对象和场景的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,自定义场景

3.1自定义的头文件
#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();
};

3.2自定义的cpp文件

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值