0

これは、スプライトシートを飛ぶために使用する方法です。オブジェクトクラスでは、情報を追跡し、すべてのサイクリングを行います。これは基本的に、テクスチャマッピング座標を割り当てるだけです。それだけが機能していないようです。しかし、私は行/列をめくる方法を記録しました、そしてそれは正しく循環しています。しかし、テクスチャに関しては何も見えません。まったく。私は何かが足りないのですか?

    public void SetToAnimatedTexture(int NumFramesWide, int NumFramesTall, int CurrentRow, int CurrentColumn) {
    /***************************************************************************************** 
     * This Assembles our Vertices in the correct spots by disassembling
     * our custom rectangles corners, and adds animation. Call this after creating the meshRect
     * *****************************************************************************************/

    float frameWidth = 1/NumFramesWide;
    float frameHeight = 1/NumFramesTall;

    float u1 = frameWidth*CurrentColumn;
    float u2 = (frameWidth*CurrentColumn) + frameWidth;
    float u3 = (frameWidth*CurrentColumn) + frameWidth;
    float u4  = frameWidth*CurrentColumn;

    float v1 = (frameHeight*CurrentRow) + frameHeight;
    float v2 = (frameHeight*CurrentRow) + frameHeight;
    float v3 = frameHeight*CurrentRow;
    float v4 = frameHeight*CurrentRow;

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * VERTEX_SIZE);
    byteBuffer.order(ByteOrder.nativeOrder());
    vertices = byteBuffer.asFloatBuffer();

    float x1 = (float) rect.BottomLeftCorner.x;
    float x2 = (float) rect.BottomRightCorner.x;
    float x3 = (float) rect.TopRightCorner.x;
    float x4 = (float) rect.TopLeftCorner.x;

    float y1 = (float) rect.BottomLeftCorner.y;
    float y2 = (float) rect.BottomRightCorner.y;
    float y3 = (float) rect.TopRightCorner.y;
    float y4 = (float) rect.TopLeftCorner.y;

    vertices.put(new float[] { x1, y1, 1, 1, 1, 1, u1, v1,
                                x2, y2, 1, 1, 1, 1, u2, v2,
                                x3, y3, 1, 1, 1, 1, u3, v3,
                                x4, y4, 1, 1, 1, 1, u4, v4 });
                            //  x   y   r  g  b  A   u|s  v|t
                            //  x,y are coordinates
                            //  rgba = color red green blue alpha
                            //  u|s v|t = UV or ST texture coordinates
    vertices.flip();

    byteBuffer = ByteBuffer.allocateDirect(6 * 2);
    byteBuffer.order(ByteOrder.nativeOrder());
    indices = byteBuffer.asShortBuffer();
    indices.put(new short[] { 0, 1, 2,
                                2, 3, 0 });
    indices.flip();

}

これは私が自分で設定したフレームワークの一部です。

いくつかのロギングを行うことで問題を理解しました。これはここにあるprobelmです

    float frameWidth = 1/NumFramesWide;
    float frameHeight = 1/NumFramesTall;

両方の値を0として返します。

    1/2=0 , 1/4=0

すべての変数の値を確認しましたが、これが問題です。

4

1 に答える 1

9

最初に整数除算を行い、次に割り当てを行います。1とは両方ともNumFrames*整数であるため、最終的には0になります。

コードを次のように変更することで、これを修正できます。

float frameWidth = 1.f/NumFramesWide;
float frameHeight = 1.f/NumFramesTall;
于 2012-08-11T00:45:33.997 に答える