簡體   English   中英

如何在Piccolo2D中使用多個圖層?

[英]How to use multiple layers in Piccolo2D?

我不想在另一張照片上方有一些圖片,並且想要利用PCameraaddLayer()方法。

這可能嗎?

以下代碼拋出NullPointerException 它出什么問題了?

package test.piccolo;

import java.awt.Color;

import edu.umd.cs.piccolo.PCamera;
import edu.umd.cs.piccolo.PLayer;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolox.PFrame;

public class Try_Cameras_01 {
    @SuppressWarnings("serial")
    public static void main(String[] args) {
        new PFrame() {



            private PLayer layer1 = new PLayer();

            private PLayer layer2 = new PLayer();

            private PLayer layer3 = new PLayer();

            private PCamera camera = new PCamera();
            {
                camera.addLayer(layer1);
                camera.addLayer(layer2);
                camera.addLayer(layer3);
            }


            @Override
            public void initialize() {

                getCanvas().setCamera(camera);

                PPath redRectangle = PPath.createRectangle(0, 0, 100, 100);
                redRectangle.setStrokePaint(Color.black);
                redRectangle.setPaint(Color.red);

                PPath greenRectangle = PPath.createRectangle(20, 20, 100, 100);
                greenRectangle.setStrokePaint(Color.black);
                greenRectangle.setPaint(Color.green);

                PPath blueRectangle = PPath.createRectangle(40, 40, 100, 100);
                blueRectangle.setStrokePaint(Color.black);
                blueRectangle.setPaint(Color.blue);

                layer1.addChild(redRectangle);
                layer2.addChild(greenRectangle);
                layer3.addChild(blueRectangle);


            }
        };
    }
}

問題在於,當您設置新相機時,它沒有關聯的根。 結果, PCanvas.getRoot()返回null並且其中一種繪畫方法中包含一個NPE 這是Piccolo2D基本運行時結構:

在此處輸入圖片說明

Piccolo2D模式中閱讀更多內容

就您而言,您缺少從PCameraPRoot的鏈接。 這是一個簡單的解決方法:

private PCamera camera = new PCamera(); {
    PRoot root = new PRoot();
    root.addChild(camera);
    camera.addLayer(layer1);
    camera.addLayer(layer2);
    camera.addLayer(layer3);
}

結果是:

在此處輸入圖片說明

作為參考,這里是PUtil.createBasicScenegraph()的副本,該副本創建了基本的相機。

public static PCamera createBasicScenegraph() {
    final PRoot root = new PRoot();
    final PLayer layer = new PLayer();
    final PCamera camera = new PCamera();

    root.addChild(camera);
    root.addChild(layer);
    camera.addLayer(layer);

    return camera;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM