有没有办法在Andengine中绘制曲线或矩形?

时间:2015-05-15 10:36:15

标签: andengine curve

我必须在Andengine中绘制曲线或矩形。如果有人知道,请告诉我。

1 个答案:

答案 0 :(得分:2)

好的,所以Rectangle类绘制Rectangles,Line类绘制线条。

Rectangle rect = new Rectangle(float pX, float pY, float pWidth, float pHeight, VertexBufferObjectManager pVertexBufferObjectManager)

您可以在此处设置位置,宽度和高度。把顶点缓冲区对象管理器也放在那里,你很高兴。

Bezier曲线更难做,因为没有Curve类和BezierCurve。我使用的是LineStrip类:

    final VertexBufferObjectManager vbom = engine.getVertexBufferObjectManager();
    final HighPerformanceLineChainVertexBufferObject pLeftCurbLineChainVBOM = new HighPerformanceLineChainVertexBufferObject(vbom, triangleCount * 3, DrawType.DYNAMIC, true, leftCurb.VERTEXBUFFEROBJECTATTRIBUTES_DEFAULT);

LineStrip leftCurb = new LineStrip(0, 0, 2f, 300, pLeftCurbLineChainVBOM){


        @Override
        protected void onManagedUpdate(final float pSecondsElapsed) {
            super.onManagedUpdate(pSecondsElapsed);
            drawByBezier(curveOffset);

        };

        void drawByBezier(float curveOffset){



            for (int triangleIndex = 0; triangleIndex < 300; triangleIndex++) {

                this.setX(triangleIndex, getBezier(triangleIndex, curveXP1, curveXControl, curveXP2));
                this.setY(triangleIndex, getBezier(triangleIndex, curveYP1, curveYControl, curveYP2));
             }
        }

你计算这样的曲线:

public float getBezier(float triangleIndex, float P1X, float PcX, float P2X){

            float t = triangleIndex / 300;
            float tt = t * t;
            float u = 1 - t;
            float uu = u * u;

            float bezier = (uu * P1X) + (2 * u * t * PcX) + (tt * P2X);

            return bezier;

        }

当然你不必在onManagedUpdate中这样做 - 它只是来自我的代码,因为我在那里修改了曲线。另外,作为LineStrip和getBezier方法的参数的数字300不必是300,它可以更低或更高,但在两个地方必须相同。因此,如果你想要一个从(100,100)到(400,300)的贝塞尔曲线,控制点在(200,350),那就像这样:

    this.setX(triangleIndex, getBezier(triangleIndex, 100, 200, 400));
    this.setY(triangleIndex, getBezier(triangleIndex, 100, 350, 300));

希望它也适合你。