1

私はAndroidゲームに取り組んでおり、画像を粉砕する効果を作成する必要があります。ゲーム開発にはCocos2dxを使用しています。

Cocos2dxには頂点配列がCGPoint配列であるため、粉砕する形状を小さな三角形に分割して配列に格納しました。例えば

CGPoint[] vertices;

vertices[1]={CGPoint.ccp(0,0),CGPoint.ccp(1,0),CGPoint.ccp(1,1)}

vertices[2]={CGPoint.ccp(1,0),CGPoint.ccp(0,1),CGPoint.ccp(1,1)}
....
vertices[numVertices]={CGPoint.ccp(1,0),CGPoint.ccp(0,1),CGPoint.ccp(1,1)}

絵を描くことになると

私は頂点配列をこのようにFloatBufferに変換しました

        ByteBuffer vbb = ByteBuffer.allocateDirect(4 * 2*3* numVertices);
        vbb.order(ByteOrder.nativeOrder());
        triVertices = vbb.asFloatBuffer();

onDraw()メソッドの場合ここで、pt1、pt2、pt3はCGPointです。

         for(int i=0;i<numVertices;i++){

        triVertices.put(vertices[i].pt1.x);
        triVertices.put(vertices[i].pt1.y);
        triVertices.put(vertices[i].pt2.x);
        triVertices.put(vertices[i].pt2.y);
        triVertices.put(vertices[i].pt2.x);
        triVertices.put(vertices[i].pt2.y);
    }
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, triVertices);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, triTexCoords);
    gl.glColorPointer(4, GL10.GL_UNSIGNED_BYTE, 0, colorBuffer);
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, numVertices*3);

残念ながら、全体の形が描かれていません。ある意味では、個々の三角形だけが描かれています。私の論理に問題はありますか。助けてください。本当に緊急です。

編集

以下は、 CCSpriteを拡張する粉砕クラスShatteredSprite.javaを呼び出すために使用しているコードです。

    CCSprite newSprite= CCSprite.sprite("bg-hand1.jpg");
    int piecesX = 20;
    int piecesY = 20;
    float speedVar = 0.5f;
    float rotVar = 0.2f;
    boolean radial = true;
    ShatteredSprite shatter =ShatteredSprite.shatterWithSprite(newSprite,
            piecesX,
            piecesY,
            speedVar,
            rotVar,
            radial);
    shatter.setAnchorPoint(CGPoint.make(0, 0));
    shatter.setPosition(CGPoint.ccp(100, 150));
    this.addChild(shatter, 1, 99);

今、粉砕が起こっていますが、効果が右上隅に表示されているので、そのポーションだけが表示されます。それを正しくする方法。アイデアがあります。よろしくお願いします。

4

0 に答える 0