生成器模式不工作

时间:2015-01-30 21:40:22

标签: java design-patterns libgdx builder

所以我目前正在利用LibGDX开发Java游戏。最近我碰到了一个问题,当我试着为另一个有很多参数的类做一个Builder类时,所以我猜它需要一个Builder类。作为自信的java程序员,我开始了,我发现了一个我无法纠正的问题。我已经在互联网上查了一下并找到了一些例子,但一切似乎都适合我。也许你可以帮忙。所需的代码:

public class SpecialTile implements MyAnimation {

    /**
     * Class builder for SpecialTile
     * @author Zsemberi Daniel
     *
     */
    public static class SpecialTileBuilder {
        /*
         * Drawables
         */
        private Sprite image;
        private Animation anim;

        //position
        private Point position;

        /**
         * Sprite path constructor
         */
        public SpecialTileBuilder(String imagePath) {
            this.image = new Sprite((Texture) Load.manager.get(imagePath));
        }

        /**
         * Image constructor
         */
        public SpecialTileBuilder(Sprite image) {
            this.image = image;
        }

        /**
         * Animation constructor
         */
        public SpecialTileBuilder(Animation anim) {
            this.anim = anim;
        }

        //Set position
        public SpecialTileBuilder setPosition(Point position) {
            this.position = position;
            return this;
        }


        public SpecialTile createSpecialTile() {
            return new SpecialTile(this);
        }
    }

    /*
     * Drawables
     */
    private Sprite image;
    private Animation anim;

    private float stateTime = 0f;

    //position
    private Point position;

    protected SpecialTile(SpecialTileBuilder builder) {
        image = builder.image;
        anim = builder.anim;
        position = builder.position;
    }

    /**
     * Hits the player
     */
    public boolean isHit(Sprite sprite) {
        if(anim == null)
            return image.getBoundingRectangle().contains(sprite.getBoundingRectangle());
        else
            return new Sprite(getCurrentFrame()).getBoundingRectangle().contains(sprite.getBoundingRectangle());
    }

    /**
     * If it is triggered it does something
     */
    public void doTheHarlemShake(Sprite sprite) {

    }

    public Sprite getSprite() { return image; }
    public Animation getAnimation() { return anim; }

    public float getX() { return position.x; }
    public float getY() { return position.y; }

    /*
     * Animation stuff
     */

    @Override
    public TextureRegion getCurrentFrame() {
        return anim.getKeyFrame(stateTime, true);
    }

    @Override
    public void updateAnimation(float delta) {
        stateTime += delta;
    }

}

那么你可以在那里看到我写过Buidler的全班(我以为你可能需要它)。如果有效的话我会如何使用它。

SpecialTile.SpecialTileBuilder("test.png")
                .setPosition(new Point(2, 2))
                .createSpecialTile();

所以它在日食中说我遇到了这个问题:

  

方法SpecialTileBuilder(String)未定义类型   SpecialTile

1 个答案:

答案 0 :(得分:2)

好像你忘记了new。您应该创建一个新的SpecialTile.SpecialTileBuilder实例,但是您尝试调用SpecialTile.SpecialTileBuilder(...)方法。

相关问题