一个3d模型(不在屏幕中心),可以绕着屏幕的中心转动,如何做成有按钮功能,当我点击这个模型就能触发相应的功能。。。求大神解答
可以给sprite3d上addchild一个普通的node,给node一个size或bounding box, 给这个node添加touch listener 。
试试这个:
auto s = Director::getInstance()->getWinSize();
auto sprite1 = Sprite3D::create("Sprite3DTest/boss1.obj");
sprite1->setScale(4.f);
sprite1->setTexture("Sprite3DTest/boss.png");
sprite1->setPosition( Vec2(s.width/2, s.height/2) );
sprite1->setContentSize(Size(20, 20));
//add to scene
addChild( sprite1 );
sprite1->runAction(RepeatForever::create(RotateBy::create(3, 360)));
auto sprite2 = Sprite3D::create("Sprite3DTest/boss1.obj");
sprite2->setScale(4.f);
sprite2->setTexture("Sprite3DTest/boss.png");
sprite2->setPosition( Vec2(s.width/2, s.height/2) );
sprite2->setContentSize(Size(20, 20));
sprite2->setAnchorPoint(Vec2(0.5, 0.5));
//add to scene
addChild( sprite2 );
sprite2->runAction(RepeatForever::create(RotateBy::create(3, -360)));
// Make sprite1 touchable
auto listener1 = EventListenerTouchOneByOne::create();
listener1->setSwallowTouches(true);
listener1->onTouchBegan = ](Touch* touch, Event* event){
auto target = static_cast<Sprite3D*>(event->getCurrentTarget());
Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(-s.width/2, -s.height/2, s.width, s.height);
if (rect.containsPoint(locationInNode))
{
log("sprite3d began... x = %f, y = %f", locationInNode.x, locationInNode.y);
target->setOpacity(100);
return true;
}
return false;
};
listener1->onTouchMoved = ](Touch* touch, Event* event){
auto target = static_cast<Sprite3D*>(event->getCurrentTarget());
target->setPosition(target->getPosition() + touch->getDelta());
};
listener1->onTouchEnded = =](Touch* touch, Event* event){
auto target = static_cast<Sprite3D*>(event->getCurrentTarget());
log("sprite3d onTouchesEnded.. ");
target->setOpacity(255);
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2);
按照你这个如果只是在平面里移动是可以,但我是想把它放在一个3d的球体上,可以绕着球心自由转动,越贴近屏幕物体就会越大
你这种需求只能做3D射线碰撞检测了,射线根AABB或OBB盒子碰撞,你这个版本还没有相应的接口和类,可以等3.3版本。
— Begin quote from ____
引用第4楼lvlong于2014-07-28 12:02发表的 :
你这种需求只能做3D射线碰撞检测了,射线根AABB或OBB盒子碰撞,你这个版本还没有相应的接口和类,可以等3.3版本。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=216787&pid=1014771
— End quote
是的u3d做这个更早,它有rayCast,你可以参考这个原理先自己看看