有没有也遇到这个问题的, 或者有大神能帮帮我
4 个解决方案
#1
还真是奇特的现象 哪个版本的sdk?
#2
lz问题能描述清楚一点吗
#3
今天我又测试了下,还是那样
版本是2.2.1
首先在AppDelegate.cpp里面我开启了深度缓冲
然后在HelloWorldScene.cpp里面加入了一个层
在这个层的init函数里面我创建了一个地图和两个精灵并且把它们加入到这个层里面
然后我开启了这个层的update并在update里面更新这两个精灵的深度想看下效果
版本是2.2.1
首先在AppDelegate.cpp里面我开启了深度缓冲
CCDirector::sharedDirector()->setDepthTest(true);
CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);
然后在HelloWorldScene.cpp里面加入了一个层
TestLayer *testLayer = TestLayer::create();
this->addChild(testLayer);
在这个层的init函数里面我创建了一个地图和两个精灵并且把它们加入到这个层里面
CCTMXTiledMap *map = CCTMXTiledMap::create("orthogonal-test-vertexz.tmx");
addChild(map, 0);
sprite1 = CCSprite::create("player.png");
sprite1->setAnchorPoint(ccp(0, 0));
sprite1->setPosition(ccp(0, 81));
sprite1->retain();
addChild(sprite1);
sprite = CCSprite::create("enemy.png");
sprite->setAnchorPoint(ccp(0, 0));
sprite->setPosition(ccp(0, -50));
sprite->retain();
addChild(sprite);
CCActionInterval* move = CCMoveBy::create(1, ccp(0,200));
CCActionInterval* back = move->reverse();
CCSequence* seq = CCSequence::create(move, back,NULL);
sprite->runAction( CCRepeatForever::create(seq));
然后我开启了这个层的update并在update里面更新这两个精灵的深度想看下效果
schedule( schedule_selector(TestLayer::update));
void TestLayer::update(float dt)
{
CCPoint p = sprite->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
sprite->setVertexZ( -(p.y + 81) / 81 );
p = sprite1->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
sprite1->setVertexZ(-(p.y + 81) / 81);
CCLayer::update(dt);
}
#4
问题已解决, 应该是深度缓冲和z-order冲突的问题, 在更改深度的时候相应的还要改z-order的值。 要确保深度计算正确的情况下,覆盖者的z-order值要大于被覆盖者的z-order值。这样就不会出现那种透明部分奇怪的情况。
#1
还真是奇特的现象 哪个版本的sdk?
#2
lz问题能描述清楚一点吗
#3
今天我又测试了下,还是那样
版本是2.2.1
首先在AppDelegate.cpp里面我开启了深度缓冲
然后在HelloWorldScene.cpp里面加入了一个层
在这个层的init函数里面我创建了一个地图和两个精灵并且把它们加入到这个层里面
然后我开启了这个层的update并在update里面更新这两个精灵的深度想看下效果
版本是2.2.1
首先在AppDelegate.cpp里面我开启了深度缓冲
CCDirector::sharedDirector()->setDepthTest(true);
CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);
然后在HelloWorldScene.cpp里面加入了一个层
TestLayer *testLayer = TestLayer::create();
this->addChild(testLayer);
在这个层的init函数里面我创建了一个地图和两个精灵并且把它们加入到这个层里面
CCTMXTiledMap *map = CCTMXTiledMap::create("orthogonal-test-vertexz.tmx");
addChild(map, 0);
sprite1 = CCSprite::create("player.png");
sprite1->setAnchorPoint(ccp(0, 0));
sprite1->setPosition(ccp(0, 81));
sprite1->retain();
addChild(sprite1);
sprite = CCSprite::create("enemy.png");
sprite->setAnchorPoint(ccp(0, 0));
sprite->setPosition(ccp(0, -50));
sprite->retain();
addChild(sprite);
CCActionInterval* move = CCMoveBy::create(1, ccp(0,200));
CCActionInterval* back = move->reverse();
CCSequence* seq = CCSequence::create(move, back,NULL);
sprite->runAction( CCRepeatForever::create(seq));
然后我开启了这个层的update并在update里面更新这两个精灵的深度想看下效果
schedule( schedule_selector(TestLayer::update));
void TestLayer::update(float dt)
{
CCPoint p = sprite->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
sprite->setVertexZ( -(p.y + 81) / 81 );
p = sprite1->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
sprite1->setVertexZ(-(p.y + 81) / 81);
CCLayer::update(dt);
}
#4
问题已解决, 应该是深度缓冲和z-order冲突的问题, 在更改深度的时候相应的还要改z-order的值。 要确保深度计算正确的情况下,覆盖者的z-order值要大于被覆盖者的z-order值。这样就不会出现那种透明部分奇怪的情况。