CCObject.h

流程控制(flow control): 非常容易管理不同场景之间的流程控制。
精灵(sprite):快速而方便的精灵用于显示一切可见的元素。
节点(node):基于树结构的分层组织方式,方便管理不同层次的游戏元素,同时提供了统一管理的计时器(scheduler)。
动作(action):应用于精灵或其他游戏元素的动画效果,可以组合成复杂的动作。
特效(effect):包括波浪(wave) 旋转(twirl)和透镜(lens)等视觉特效。
平面地图(tiled map):支持矩形和六边形的平面地图。
菜单(menu):创建游戏中常见的菜单。
用户输入:提供接受用户触摸事件 传感器等输入的简单解决方案。
文档(document):编程指南 api参考 视频教学以及很多简单可靠的测试样例。
MIT许可:免费开放的协议。
基于OpenGL:深度优化的绘图方式,支持硬件加速。


#ifndef __CCOBJECT_H__

#define __CCOBJECT_H__


#include "platform/CCPlatformMacros.h"


NS_CC_BEGIN


/**
 * @addtogroup base_nodes
 * @{
 */


class CCZone;
class CCObject;
class CCNode;
class CCEvent;


class CC_DLL CCCopying
{
public:
    virtual CCObject* copyWithZone(CCZone* pZone);
};


class CC_DLL CCObject : public CCCopying
{
public:
    // object id, CCScriptSupport need public m_uID
// 对象id 在脚本引擎中使用
    unsigned int        m_uID;
    // Lua reference id
    int                 m_nLuaID;
protected:
    // count of references
// 引用数量
    unsigned int        m_uReference;
    // is the object autoreleased
// 标识此对象是否已经设置 autoreleased
    bool        m_bManaged;        
public:
    CCObject(void);
    virtual ~CCObject(void);
    // 释放该对象的引用权
    void release(void);
// 获取该对象的引用权
    void retain(void);
// 把对象放入自动回收池(CCAutoreleasePool) 当回收池自身释放的时候,它会对池中的所有对象执行一次 release()方法,实现灵活的垃圾回收。
// 回收池可以手动创建和释放。除此之外,引擎在每次游戏循环开始之前也会创建一个回收池,在循环结束后释放回收池。
// 因此,即使我们没有手动创建和释放回收池,每一帧结束的时候,自动回收池中的对象也都会执行一下release()方法。
    CCObject* autorelease(void);
    CCObject* copy(void);
    bool isSingleReference(void);
// 获得对象当前的引用计数值
    unsigned int retainCount(void);
    virtual bool isEqual(const CCObject* pObject);


    virtual void update(float dt) {CC_UNUSED_PARAM(dt);};
    
    friend class CCAutoreleasePool;
};




typedef void (CCObject::*SEL_SCHEDULE)(float);
typedef void (CCObject::*SEL_CallFunc)();
typedef void (CCObject::*SEL_CallFuncN)(CCNode*);
typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);
typedef void (CCObject::*SEL_CallFuncO)(CCObject*);
typedef void (CCObject::*SEL_MenuHandler)(CCObject*);
typedef void (CCObject::*SEL_EventHandler)(CCEvent*);
typedef int (CCObject::*SEL_Compare)(CCObject*);


#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)
#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)
#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)
#define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)
#define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)


// end of base_nodes group
/// @}


NS_CC_END


#endif // __CCOBJECT_H__
提供了两份地图相关的源码。一份是针对移动应用开发的地图定位导航小程序源码,集成了地图显示、定位、路径规划等关键功能,基于常见的地图 API 开发,包含交互设计、API 接口与数据处理等方面的实用知识,可应用于打车软件、外卖配送等实际项目中[^1]。另一份是地图迷雾效果实现的 C++ 源码,以下为部分代码展示: ```cpp // HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::CCLayer { public: // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); // implement the "static node()" method manually CREATE_FUNC(HelloWorld); /* 注册触摸监听 */ virtual void onEnter(); /* 注销触摸监听 */ virtual void onExit(); /* 手指按下 */ virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); }; #endif // __HELLOWORLD_SCENE_H__ ``` 此外,还有初始化地图并添加标记的示例代码: ```python # 初始化地图 const map = L.map("map", { center: [51.505, -0.09], # 纬度, 经度 zoom: 13, layers: [L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}")], }); # 添加标记 L.marker([51.5, -0.09]) .addTo(map) .bindPopup("<b>Hello!</b><br>I am a popup."); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值