标签:
lis->onTouchMoved=[=](Touch* ptouch, Event* pevent)
{
//cocos2d拖动按钮及遥感器的实现;
Vec2 p=ptouch->getLocation();
auto p1=this->convertToNodeSpace(p);
float v=sp->getContentSize().width/2;
float s=p1.distance(sp->getPosition());
log(",,,,,,,%f.....%f",s,v);
if (s<v) {
log("=========%f",s-v);
menu->setPosition(p1);
}
if (s>v) {
//利用相似三角形求坐标;
//一个直角边的长度;
if (p1.y<=sp->getPosition().y) {
float x1=sqrtf(s*s-(p1.x-sp->getPosition().x)*(p1.x-sp->getPosition().x));
float x2=v*(p1.x-sp->getPosition().x)/s+sp->getPosition().x;//相似三角形比例算出另外一边;
//则所求临界点的x坐标为;
// float x3=sp->getPosition().x+x;
//y坐标
float y3=sp->getPosition().y-v*x1/s;
log("y3=%f",y3);
//临界点为
Vec2 v3=Vec2(x2, y3);
menu->setPosition(v3);
}
else
{
float x1=sqrtf(s*s-(p1.x-sp->getPosition().x)*(p1.x-sp->getPosition().x));
float x2=v*(p1.x-sp->getPosition().x)/s+sp->getPosition().x;//相似三角形比例算出另外一边;
//则所求临界点的x坐标为;
// float x3=sp->getPosition().x+x;
//y坐标
float y3=sp->getPosition().y+v*x1/s;
log("y3=%f",y3);
//临界点为
Vec2 v3=Vec2(x2, y3);
menu->setPosition(v3);
}
}
};
标签:
原文地址:http://www.cnblogs.com/xiajianwei/p/5000954.html