由于需要绘制一个圆形的攻击范围,又不想通过加多一个layer的方式来实现,于是重载了draw函数,在node中draw函数有两个,一个是
virtual void draw () final
另外一个是
virtual void draw (Renderer *renderer, const kmMat4 &transform, bool transformUpdated)
第一个不可以重载,因此需要自己绘制需要重载第二个函数
在第二个函数中默认使用的内容为
.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;
}