2015-10-13 98 views
0

嗨我想在3D世界有不同z的2個精靈和圍繞屏幕中心旋轉並指向屏幕中心的相機。 即使精靈有不同的z(和zorder,我不知道這是否有必要),精靈總是可視化,而我期望有第二個精靈從另一個隱藏...cocos2dx:Sprite3D旋轉,剔除錯誤

這是的HelloWorld層的init

auto sp3d = Sprite3D::create(); 
sp3d->setPosition(visibleSize.width/2, visibleSize.height/2); 
addChild(sp3d); 

auto sprite = Sprite::create("JP9_table.png"); 
auto spritePos = Vec3(0,0,0); 
sprite->setScale(0.3); 
sprite->setPosition3D(spritePos); 
sp3d->addChild(sprite,0); 

auto sprite2 = Sprite::create("JP9_logo_yc.png"); 
auto spritePos2 = Vec3(0,0,10); 
sprite2->setPosition3D(spritePos2); 
sp3d->addChild(sprite2,10); 
sp3d->setCullFace(GL_BACK); 
sp3d->setCullFaceEnabled(true); 
this->setCameraMask((unsigned short)CameraFlag::USER2, true); 

camera = Camera::createPerspective(60, (float)visibleSize.width/visibleSize.height, 1.0, 1000); 
camera->setCameraFlag(CameraFlag::USER2); 
camera->setPosition3D(spritePos + Vec3(-200,0,800)); 
camera->lookAt(spritePos, Vec3(0.0,1.0,0.0)); 
this->addChild(camera); 

this->scheduleUpdate(); 
angle=0; 

,這是更新:

void TestScene::update(float dt) 
{ 
    angle+=0.1; 
    Size visibleSize = Director::getInstance()->getVisibleSize(); 
    Vec2 origin = Director::getInstance()->getVisibleOrigin(); 
    Vec3 spritePos=Vec3(visibleSize.width/2,visibleSize.height/2,0); 

    camera->setPosition3D(Vec3(visibleSize.width/2,visibleSize.height/2,0) + Vec3(800*cos(angle),0,800*sin(angle))); 
    camera->lookAt(spritePos, Vec3(0.0,1.0,0.0)); 

} 

我已經tryed東西simplier:

auto sp3d = Sprite3D::create(); 
sp3d->setPosition(visibleSize.width/2, visibleSize.height/2); 
addChild(sp3d); 

auto sprite = Sprite::create("JP9_table.png"); 
auto spritePos = Vec3(0,0,0); 
sprite->setScale(0.3); 
sprite->setPosition3D(spritePos); 
sp3d->addChild(sprite,0); 

auto sprite2 = Sprite::create("JP9_logo_yc.png"); 
auto spritePos2 = Vec3(0,0,10); 
sprite2->setPosition3D(spritePos2); 
sp3d->addChild(sprite2,10); 
sp3d->setCullFace(GL_BACK); 
sp3d->setCullFaceEnabled(true); 

即使與sp3d->runAction(RotateTo::create(20,vec3(0,3000,0)))同樣的錯誤。 這是一個cocos2dx錯誤?

z = 10的精靈在被其他精靈覆蓋之前消失... 保持隱藏一段時間,並且它應該隱藏完全重現! 我忘記了什麼嗎? 謝謝

回答

0

也許你應該檢查這一點。

_camControlNode = Node::create(); 
_camControlNode->setNormalizedPosition(Vec2(.5,.5)); 
addChild(_camControlNode); 

_camNode = Node::create(); 
_camNode->setPositionZ(Camera::getDefaultCamera()->getPosition3D().z); 
_camControlNode->addChild(_camNode); 

auto sp3d = Sprite3D::create(); 
sp3d->setPosition(s.width/2, s.height/2); 
addChild(sp3d); 

auto lship = Label::create(); 
lship->setString("Ship"); 
lship->setPosition(0, 20); 
sp3d->addChild(lship); 

_lis->onTouchMoved = [this](Touch* t, Event* e) { 
     float dx = t->getDelta().x; 
     Vec3 rot = _camControlNode->getRotation3D(); 
     rot.y += dx; 
     _camControlNode->setRotation3D(rot); 

     Vec3 worldPos; 
     _camNode->getNodeToWorldTransform().getTranslation(&worldPos); 

     Camera::getDefaultCamera()->setPosition3D(worldPos); 
     Camera::getDefaultCamera()->lookAt(_camControlNode->getPosition3D()); 
    };