首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Piccolo2D中使用多层?

如何在Piccolo2D中使用多层?
EN

Stack Overflow用户
提问于 2013-12-25 21:16:50
回答 1查看 304关注 0票数 0

我希望在另一张图片上有一些图片,并希望使用PCameraaddLayer()方法。

这个是可能的吗?

下面的代码抛出NullPointerException。它有什么问题?

代码语言:javascript
复制
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);


            }
        };
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-12-27 08:47:32

问题是,当您设置一个新的相机时,它没有关联的根。因此,PCanvas.getRoot()返回null,并且在其中一个绘制方法中有一个NPE。下面是一个基本的Piccolo2D运行时结构:

Piccolo2D Patterns上阅读更多内容。

在您的例子中,您丢失了一个从PCameraPRoot的链接。这里有一个简单的解决方法:

代码语言:javascript
复制
private PCamera camera = new PCamera(); {
    PRoot root = new PRoot();
    root.addChild(camera);
    camera.addLayer(layer1);
    camera.addLayer(layer2);
    camera.addLayer(layer3);
}

这将导致:

作为参考,这里有一个来自PUtil.createBasicScenegraph()的副本,它创建了一个基本的相机。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20773197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档