有任何方法来绘制曲线或矩形在Andengine



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

好的,矩形类绘制矩形,直线类绘制直线。

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

您可以在这里设置位置、宽度和高度。把顶点缓冲对象管理器也放在那里,就可以了。

贝塞尔曲线更难做,因为没有Curve类和贝塞尔曲线。我使用的是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;
        }

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

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

最新更新