2015-12-18 123 views
0

我试图在地图上绘制用户位置指示器(这是一个演员),无论透视摄像机的视野如何,所以演员的大小将在放大时保持不变。放大时保留演员的大小

我曾尝试下面的代码,但没有成功:

userActorContainer.setScale(camera.fieldOfView/150,camera.fieldOfView/150); 

编辑1: 好,我已经使用单独的SpriteBatch用于呈现用户位置指示器,现在的大小问题被固定,但正如我所预测的位置的演员是完全错误的(不适合背景放大的地图)。这里是我的代码:

在构造函数中:

camera.update(); 
    firstProjectionMatrix = new Matrix4(); 
    firstProjectionMatrix.set(camera.combined); 

在渲染方法:

testBatch.setTransformMatrix(camera.view); 
    testBatch.setProjectionMatrix(firstProjectionMatrix); 
    testBatch.begin(); 
    pinsGroup.draw(testBatch, 1); 
    testBatch.end(); 

回答

0

只是这个演员添加到另一个阶段 - 那么你可以进行变焦用map阶段这对你的演员没有任何影响

Stage mapStage, actorStage; 

    ... 

    //render method 
    mapStage.handleZoom(); //you zooming handling here 
    mapStage.act(); 
    mapStage.draw(); 

    actorStage.act(); 
    actorStage.draw(); 

请注意,您还可以使用另一种类型的视/相机对您的actorStage它可以帮助也很大


如果你不使用Scene2D你还可以创建第二个摄像头,并设置它的.combined为projectionMatrix之前指标渲染spriteBatch甚至只为指标渲染目的创建新的SpriteBatch像

SpriteBatch batch, indicatorBatch; 

    ... 

    //render() 
    camera.update(); 

    batch.setProjectionMatrix(camera.combined); 

    batch.begin(); 
    //rendering map etc... 
    batch.end(); 

    indicatorBatch.begin(); 
    //rendering indicator 
    indicatorBatch.end();  

编辑 - 变焦摄像头,你应该使用camera project and unproject方法后处理的位置。 You can also read more here

+0

但我不想使用舞台! –

+0

那么你使用SpriteBatch渲染你的演员/地图等? –

+0

是的,我正在绘制一切使用SpriteBatch –