void HelloWorld::onTouchEnded(Touch* touch, Event *event)
{
Vec2 p = touch->getLocation();
log("touchend x = %f y = %f ", p.x,p.y);
drawCrater->drawCircle(p, 15, CC_DEGREES_TO_RADIANS(90),30, false, Color4F::Color4F::GRAY);
}
```
我的本意是点击哪里 ,哪里就是圆心,然后画一个圆, 但是实现时,发现圆心不是我点的位置, 且只有第一次点击会画一个圆,再点不画了。 代码是执行的。 不懂。请教!
图片如下。
void HelloWorld::onTouchEnded(Touch* touch, Event *event)
{
Vec2 p = touch->getLocation();
log("touchend x = %f y = %f ", p.x,p.y);
drawCrater->drawCircle(p, 15, CC_DEGREES_TO_RADIANS(90),50, false, Color4F::Color4F::GRAY);
drawCrater->drawLine(Vec2(100,100), p, Color4F::Color4F::GREEN);
}
```
我再多画一根线,就都出来了。更不懂了!
多次点击如图
看到Bug我就屁颠屁颠跑进来了,稍后我将测试下,版本能告知下吗?
ver 3.3
能解答下,为什么我的画的圆是偏的,不是点击的位置 :)
drawCrater->setPosition(Vec2(left,top)); 这个的原因。 靠 这个坐标系还是没搞清楚。
额,问题搞定了?
没有 , 画空心圆那个问题还是存在。
楼主代码里这个drawCrater是什么东西…应该不是DrawNode吧…DrawNode在3.3里面就没那个接口…
然后我画了实心圆…代码如下
void HelloWorld::onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event)
{
auto drawC = CCDrawNode::create();
Vec2 p = touch->getLocation();
drawC->drawDot(p, 15, Color4F::GRAY);
this->addChild(drawC);
}
一切是正常的…
是drawNode
你用 drawCircle ,我的问题是出在这儿。
我画实心圆也没问题。 画空心圆有问题
好吧,我弄错了…不过3.3里面我也实现了…
void HelloWorld::onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event)
{
auto drawC = DrawNode::create();
Vec2 P = touch->getLocation();
drawC->drawCircle(P, 15, CC_DEGREES_TO_RADIANS(90),30, false, Color4F::Color4F::GRAY);
this->addChild(drawC);
}

你的代码我也试了没问题,那区别就是变量定义域不一样了。 奇怪啊,只是一个类成员变量而以,只有这个区别的
class HelloWorld : public cocos2d::Layer
{
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// a selector callback
void menuCloseCallback(cocos2d::Ref* pSender);
void onTouchEnded(cocos2d::Touch* touch, cocos2d::Event *event);
bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event *event);
void onTouchMoved(cocos2d::Touch* touch, cocos2d::Event *event);
cocos2d::DrawNode *drawCrater;
// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
};
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
drawCrater = DrawNode::create();
this->addChild(drawCrater);
.......
}
void HelloWorld::onTouchEnded(Touch* touch, Event *event)
{
Vec2 p = touch->getLocation();
log("touchend x = %f y = %f ", p.x,p.y);
drawCrater->drawCircle(p2, 15, CC_DEGREES_TO_RADIANS(90),100,false, Color4F::Color4F::YELLOW);
}
```
我觉得你那样写才是正确的,我们两个的区别其实主要是我点一下,创建一个节点,而你一直在一个节点里面画。明显你那种方法更好。
但是这种方法不知道为什么画空心圆无法实现,实心圆却可以。
我会反馈下,可能是个Bug
哈哈 好,终于重现问题。 版主的耐心值得佩服!
这边已经通知我了,说空心圆那个,你第二次调用的时候要drawCrater->clear ,但是这样只能画一个,如果你要画多个的话,就需要创建多个DrawNode,看来我的用法还是没错的= =!
哦 这样子啊。这个用法有点奇怪 。 谢谢 新年快乐 !