cocos2dx:Sprite3D旋转,剔除错误

时间:2015-10-13 13:10:42

标签: cocos2d-x-3.0

嗨我想在3d世界中尝试使用不同z的2个精灵,以及围绕屏幕中心旋转并指向屏幕中心的摄像机。 即使精灵有不同的z(和zorder,我也不知道这是否必要),精灵总是可视化的,而我期待第二个精灵隐藏在另一个精灵......

这是helloworld layer 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));

}

我尝试过更简单的东西:

    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的精灵在被其他精灵覆盖之前就消失了...... 保持隐藏一段时间,当它应该被隐藏完全重新出现! 我忘记了什么吗? 感谢

1 个答案:

答案 0 :(得分: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());
    };