CCObject】的更多相关文章

写了个类想让其作为某种数据集合,还可以自动销毁,所以就直接继承了最底层的CCObject,所以并不属于视图,也就不会被addChild到显示列表里,于是就造成了接下来遇到的一个情况:其所有的成员变量被访问时数值都乱掉了.我相信这时如果其拥有其他对象的指针,那么该指针估计也会出现为空的问题. 原因就在于,在创建这个类实例的方法A结束之前,我并没有调用其retain方法,虽然我把这个对象传递给了另一个视图对象,但是根据cocos2d-x(3.0之前的版本)的内存管理机制其并不会自动增加一个引用数量,…
转自: http://blog.csdn.net/honghaier/article/details/8160519 CCObject.h: #ifndef __CCOBJECT_H__ #define __CCOBJECT_H__ #include "platform/CCPlatformMacros.h" //Cocos2d命名空间 NS_CC_BEGIN //声明以下几种类,在后面会定义相应类的成员变量的指针.以下几个类均是CCObject类的派生类. class CCZone;…
继承关系 CCObject -> CCCopying 类定义 class CC_DLL CCObject : public CCCopying { public: // object id, CCScriptSupport need public m_uID unsigned int m_uID; // Lua reference id int m_nLuaID; protected: // count of references unsigned int m_uReference; // co…
/**************************************************************************** Copyright (c) 2010 cocos2d-x.org http://www.cocos2d-x.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated docum…
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/13765639 再看CCObject,剔除上节的拷贝相关,以及Lua脚本相关的属性和方法后,CCObject还剩下什么? 1.剩下什么? 可以看到整个CCObject就是围绕着m_uReference和m_uAutoReleaseCount在转.这两个变量的解释如下.所以CCObject剩下的其实就是对内存的管理. CCObject::CCObject(void)//构造函数…
CCTargetedTouchDelegate 的继承 和 dynamic_cast 想写个可以响应touch的sprite 类定义成了这个样子: class GemBoard : public CCSprite, CCTargetedTouchDelegate 然后注册touch消息的时候 CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true); 在这挂了,查了一下午,挂在了 -addTargetedD…
从源代码版本号3.x.转载请注明 cocos2d-x 总的文件夹的源代码分析: http://blog.csdn.net/u011225840/article/details/31743129 1.Ref,AutoreleasePool.PoolManager Ref中包括了一个叫referenceCount的引用计数,当一个Ref类的变量被new的时候,其referenceCount的引用计数被置为1. 当中有三个重要的操作,retain.release,autorelease,以下源代码分析…
使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG隐藏在引擎的底层. 接下来是场景还原: 在某个节点下,需要执行这样一段逻辑,在游戏场景中,添加几个节点,由于游戏场景就是该节点的父节点,于是就直接getParent然后调用父节点的addChild,在onEnter函数中添加看上去比较合适,因为这时候该节点的父节点可以访问,而在init函数中,还没有…
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h #ifndef GAMESCENE_BIRD #define GAMESCENE_BIRD #include "cocos2d.h" #include "Box2D/Box2D.h" #include "SimpleAudioEngine.h" U…
问题起源 在使用Qt框架的时候, 经常发现一些构造函数 *parent = 0 这样的代码. 时间长了, 就觉的疑惑了. 一个指针不是等于NULL吗? 这样写, 行得通吗? 自己测试一下就可以了. 测试代码 #include <iostream> using namespace std; int main() { int * npt = 0; if( 0 == npt ){ cout << "npt == 0" << endl; ///< 输出…
UE生UObject,UObject生万物 引言 在上个GamePlay专题,谈到UE创建游戏世界的时候(GamePlay架构(一)Actor和Component),简单的介绍了一下UObject的功能: 藉着UObject提供的元数据.反射生成.GC垃圾回收.序列化.编辑器可见.Class Default Object等,UE可以构建一个Object运行的世界.(后续会有一个大长篇深挖UObject) 那么从本专题开始,我们将开始慢慢的填这个大坑.正所谓,千里之堤溃于蚁穴,万丈高塔始于垒土.在…
void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(GameScene::UI_SelectLayer); } 在这里 this->getParent() 会获得一个父类的一个node型指针,然后转换为父类类型,可以使用这个指针调用父类函数. _centerLayer=CenterLayer::create(); this->addChild(_cent…
老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create(""); this->addChild(spBG); //添加到当前层 spGB->setPosition(ccp(x,y)); //设置坐标 spGB->setScale(0.5); //缩放 文字按钮: CCMenuItemFont* pItem = CCMenuItemFont::c…
cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化.有关这些方面的方法请大家查找其他的文章.我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景.UI,小到 NPC.道具,只要是用图片展示的,都是精灵或它的子类.精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片.精灵如此的重要,我们当然要好好的优化优化了.我们可以减小精灵图片的大小,使用缓存Cache的方法将精灵提前加载到内存中,当有很多精灵的时候…
前两天和同事一起查一个游戏的闪退问题,log日志显示最后挂在CCNode* ActionNode::getActionNode()函数中的首行CCNode* cNode = dynamic_cast<CCNode*>(m_Object),由于不是必现bug,出现概率极低,单从代码来看,唯一的可能就是走到这里时m_Object已经为null了,所以才会挂出去.当然经过不懈努力,问题还是得以解决,这里mark一下,留作以后复习. 想方设法也无法重现的情况下,我们只能一步一步的分析UI动画的生命周期…
由于一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,组合成一个完整的地图,这就是瓦片地图集的基本原理. Cocos2D-x中支持两种瓦片地图集格式:一种是*.tag文件格式,一种是*.tmx文件格式. ·*.tag文件格式一般采用photoshop生成,在Cocos2D-x中为了兼容性仍保留,目前已经不推荐使用这种方式拼图.虽然如此,我们还是简单了解一下.Cocos2D-x通过类CCTileMapAtl…
在游戏中,经常会周期执行一些检测.操作或更新一些数据等,我们称之为调度.Cocos2D-x中将调度封装为类CCScheduler,方便在游戏开发中使用.我们一起来学习一下,CCScheduler具有哪些调度功能.    从上图可知,CCScheduler直接从基类CCObject继承而来.CCScheduler的调度模式分为两种:一种是update定时器调度,它是按照优先级来进行调度,在Cocos2D-x中优先级分为三类(大于零.小于零和等于零),值越小优先级越高.另一种是按照自定义定时器调度.…
Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异.   Cocos2D-x使用CCKeypadDelegate接口类处理相应的事件,这个类定义很简单,如下: class CC_DLL CCKeypadDelegate{public:    virtual void keyBackClicked() {} //返回按键事件    virtual void keyMenuClicked() {}; //M…
1.参考文章  http://blog.csdn.net/vanquishedzxl/article/details/23616535 class HelloWorld : public cocos2d::CCLayer { public: virtual bool init(); static cocos2d::CCScene* scene(); void  sengMsg(CCObject *pSender); void testMSG(CCObject *pSender); CREATE_…
由于要做一个能够加红字体的dialog,而cocos2d中的CCMessageBox是系统内带的,我无法修改其字体颜色.事实上是可以修改的,通过观察发现CCMessageBox被调用后,在安卓平台中会调用org.cocos2dx.lib.Cocos2dxHandler类中的showDialog方法,结果发现Cocos2dx使用AlertDialog来实现的,贴上代码: private void showDialog(Message msg) { Cocos2dxActivity theActiv…
是否使用虚拟方法 最好在不用“virtual”关键字的情况下声明所有cpp成员方法 但是在写CPP头文件时,请检查有没有父类的方法被当前的工作覆盖.如果有,请确保将这些方法改为虚拟方法. 如果从父类继承了一个虚拟方法,确保这个方法可以继承“virtual”(虚拟)关键字 public/protected/private方法介绍 默认情况下,将所有成员方法声明为“public”(公共) 如果以下任意条件满足,方法必须为“private”:该方法在.m文件被声明;该方法位于“private”范畴 p…
转载请注明来自:Alex Zhou的程序世界,本文链接:http://codingnow.cn/cocos2d-x/1024.html //================================================================================== 在游戏和应用中经常要实现左右滑动展示游戏帮助.以列表显示内容的UI效果,就像android中的Gallery和ListView.本文通过CCScrollView和CCTableView分别来实现…
Cocos2D-x的音频分为长时间的背景音乐和短的音效两种,我们可以通过SimpleAudioEngine::sharedEngine()方法来获取音频播放的引擎,然后调用对音频相关的操作方法就可以了,那么这个是非常简单的. 在Cocos2D-x For WP8里面的要使用音频播放的API,我们需要把CocosDenshion这个项目添加到我们的游戏项目里面去,然后添加引用.如下图所示: 需要注意的是如果发现在编译的时候会出现下面的错误,那么通常是因为没有添加CocosDenshionWindo…
     场景(CCScene) 在游戏里,场景就是关卡. CCScene是app工作流程上独立块,一个app可能拥有多个scene,但是在任何时候只能有一个是激活状态的.一个CCScene对象由一个或多个CCLayer组成,layer之间是前后相连的.Layer提供了scene的外观和行为.通常的用法是直接用一个或多个layer实例化一个scene.CCScene的子类CCTrasitionScene实现移动transitions,提供两个scene之间的转移效果,由于scene是CCNode…
在游戏中我们通常会涉及到两个精灵之间的碰撞的计算,那么在Cocos2d-x里面我们通常会用矩形碰撞检测来计算两个精灵在运动的过程中是否碰撞到了.原理很简单,就是当运动的时候通过精灵的矩形坐标进行遍历来计算精灵之间是否有重合,如果有重合那就证明是碰撞上了. 下面看一下下面的例子: Ball精灵会根据帧速率来进行运动的,下面是Ball精灵的实现代码: #ifndef _BALL_H_ #define _BALL_H_ #include "cocos2d.h" /* 创建一个球的精灵 */…
从2.1.2版本开始,2dx在libExtensions下添加了一个AssetsManager类用于资源的在线更新和简单的版本管理,同时添加了AssetsManagerTest项目示范了AssetsManager类的用法. 运行AssetsManagerTest,可以看到菜单界面 点击enter,看到下面的画面 重新运行程序,点击update,可以看到后台的log 然后再点击enter,发现画面已经发生改变 重新运行程序,画面一直都是新的.重新运行程序,点击reset,再点击enter,发现画面…
0. 环境: winxpsp3, vs2010, cocos2dx@2.1.4 1. 新建一个Helloworld工程 2. HelloworldScene.h里面重写virtual bool ccTouchBegan( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); 3. .cpp看代码: 关注点在write_callback() 和 ccTouchBegan()的重写 4. c盘创建个空文件C:\\baidu.html 5. 实现的…
#ifndef DROPDOWNLIST_H_INCLUDED#define DROPDOWNLIST_H_INCLUDED namespace azl{ #define DROPDOWNLIST_NORMAL_COLOR       cocos2d::ccc4(128, 128, 128, 255)#define DROPDOWNLIST_SELECTED_COLOR     cocos2d::ccc4(200, 200, 200, 255)#define DROPDOWNLIST_HIGHL…
关于coco2d-x 3.8版的PhysicsEditor.exe1.09版的GB2ShapeCache-x.h.cpp中有些方法更新了和容器的使用方法,还有就是头文件include "CCNS.h"  以前在cocoa包中现在在base包中. //GB2ShapeCache-x.h.cpp #include "GB2ShapeCache-x.h"  #include "Box2D/Box2D.h"  #include "base/CC…
游戏跟视频最大的区别就是互动,而手游(基于智能手机)主要靠触摸屏幕.重力传感和虚拟键盘等方式实现互动.这里主要记录Cocos2D-x对玩家触屏操作的处理. 在Cocos2D-x中触屏分为单点触屏和多点触屏,下面介绍一下与触屏相关的几个类.触屏事件和流程. ·CCTouch(触屏点类):这个类用于封闭触屏点,通过它的locationInView方法返回当前触屏点CCPoint.它还记录上一个触屏点. ·CCTouchDelegate(触屏代理协议类):它是触屏事件委托,系统捕捉到触屏事件后交由它或…