cocos2dx 重载node绘制基本图形

来源:互联网 发布:linux 禁止执行rm rf 编辑:程序博客网 时间:2024/04/30 00:29

由于需要绘制一个圆形的攻击范围,又不想通过加多一个layer的方式来实现,于是重载了draw函数,在node中draw函数有两个,一个是

virtual void    draw () final

另外一个是

virtual void    draw (Renderer *renderer, const kmMat4 &transform, bool transformUpdated)

第一个不可以重载,因此需要自己绘制需要重载第二个函数
在第二个函数中默认使用的内容为
node&draw

.h文件

#ifndef DISPLAY_CIRKLE#define DISPLAY_CIRKLE#include "cocos2d.h"class DisplayCircle : public cocos2d::Node {public:    DisplayCircle();    ~DisplayCircle();    void init(cocos2d::Point tpos,float r);    static DisplayCircle* create(cocos2d::Point tpos,float r);    virtual void draw(cocos2d::Renderer* renderer, const cocos2d::Mat4 &transform, uint32_t flags);    bool isClick(cocos2d::Point p);    cocos2d::Sprite* sprite;protected:    CC_SYNTHESIZE(cocos2d::Point, pos, Pos);    CC_SYNTHESIZE(float, radius, Radius);};#endif

.cpp文件

#include "DispalyCircle.h"DisplayCircle::DisplayCircle(){}DisplayCircle::~DisplayCircle(){}void DisplayCircle::init(cocos2d::Point tpos, float r){    setPos(tpos);    setRadius(r);    sprite = cocos2d::Sprite::create("blue_block.png");    sprite->setPosition(tpos);}DisplayCircle * DisplayCircle::create(cocos2d::Point tpos, float r){    DisplayCircle *temp = new DisplayCircle();    if (temp) {        temp->init(tpos,r);        temp->autorelease();    }    else {        CC_SAFE_DELETE(temp);    }    return temp;}void DisplayCircle::draw(cocos2d::Renderer * renderer, const cocos2d::Mat4 & transform, uint32_t flags){    glLineWidth(5);    float radius = 50;    cocos2d::ccDrawCircle(cocos2d::Vec2(getPos().x, getPos().y), radius,360,20, false);}bool DisplayCircle::isClick(cocos2d::Point p){    auto t_pos = getPos();    if (t_pos.getDistance(p) <= getRadius()) {        return true;    }    return false;}
0 0
原创粉丝点击