1

私はプロジェクトに Libgdx を使用しており、より正確には Box2DLights を使用しています。

私の問題は次のとおりです。新しい「PointLight」を配置したい場合、常に画面の中央にあります。座標を変更すると、機能しません。

私の "show()" メソッド内:

    Box2D.init();
    world = new World(new Vector2(0, 0), true);

    rh = new RayHandler(world);
    rh.setAmbientLight(1.2f, 0.2f, 0.2f, 0.1f);
    pl = new PointLight(rh, 100, new Color(1,1,1,1),(float) 0.5,0,0);

私の "render()" メソッド内:

    Gdx.gl.glClearColor(0f, 0f, 0f, 1f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    world.step(delta, 8, 3);

    renderer.begin(ShapeType.Filled);
    for (SolarSystem ss : solarSystemList)
    {
        if(ss.getColor() <= 15) colorSS = Color.YELLOW;
        else if(ss.getColor() > 15 && ss.getColor() < 31) colorSS = Color.ORANGE;
        else if(ss.getColor() > 30 && ss.getColor() < 46) colorSS = Color.RED;
        else if(ss.getColor() > 45) colorSS = Color.CYAN;

        renderer.setColor(colorSS);
        renderer.circle(ss.getMapX(), ss.getMapY(), ss.getSize() - 3);
    }
    renderer.end();

    rh.updateAndRender();

結果 :

ここに画像の説明を入力 今、座標を変更しようとすると:

pl = new PointLight(rh, 100, new Color(1,1,1,1),(float) 0.5, 50, 50);

ここに画像の説明を入力

...もう光がありません

どうすれば好きな場所に光を当てることができるか知っていますか?

編集: 私の画面サイズ: 幅 - 860px / 高さ - 645px

4

2 に答える 2

1

(1,1) が右上、(0,0) が左下、(0.5,0.5) が画面の中央にある場合、私はこれを行うことを提案します: 必要な値を挿入して除算しますたとえば、画面の幅と高さによって

 ( xPosition/Gdx.graphics.width, yPosition/Gdx.graphics.height ) 

アップデート :

申し訳ありませんが、(0,0) が中心であることがわかりませんでした。代わりにこれを使用することをお勧めします。

width  = Gdx.graphics.width;
height = Gdx.graphics.height;
((xPosition - width/2)/ width/2 , (yPosition - height/2)/ height/2)

更新 2: 私はあなたが少し算数の間違いをしていると思います

あなたが言ったように、幅= 860、高さ= 645

これは方程式です:

x= ((xPosition - 幅/2)/幅/2)

y= (y位置 - 高さ/2)/高さ/2)

x = (50 - 860/2) / (860/2)

y = (50 - 645/2) / (645/2)

x = (50 - 430) / (430)

y = (50 - 322.5) / (322.5)

x = (50 - 430) / (430) = (-380) / (430)

y = (50 - 322.5) / (322.5) = (-272.5) / (322.5)

x = -0.88

y = -0.84

(-1,-1) 別名 : 左下隅に近い

お役に立てば幸いです:)

于 2015-10-22T14:43:43.663 に答える
0

の距離をとっ0.5て光が画面の半分以上を照らす場合、 の位置が50, 50この画面に収まらないと思います。位置をより小さな値に変更してみてください。box2d で推奨されているように、座標はピクセルではなく他の単位を表している可能性があります。

編集: libgdx アプリ全体がわからないので、 などを詳しく調べることをお勧めしCameraますViewPort。たとえば、box2dlightsRayHandlerは 経由でカメラを取得できますsetCombinedMatrix。ライトをボディと同期させ、box2d ワールドをスプライトと同期させることもできます。

于 2015-10-22T13:38:45.307 に答える