cocos2dx 重载node绘制基本图形

由于需要绘制一个圆形的攻击范围,又不想通过加多一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值