Android открывает анимированную текстовую логику? - PullRequest
0 голосов
/ 01 июля 2011

Я получил текст для рендеринга с использованием открытых окон на Android и в настоящее время пытаюсь выяснить, как его «оживить», как в играх с покемонами, где он «показывает» персонажей слева направо с определенной скоростью.Как это сделать?

1 Ответ

1 голос
/ 05 июля 2011

По сути, это «вставка текста», как и все другие анимации.

Например, посмотрите на этот пример кода:

public class GameObject {
    // Each element in this char array contains
    // a single character, representing a serie of text.
    private char[] mText;
    // Frames before a new character appears.
    private int mFrames;        
    // Current frame.
    private int mCurrentFrame;
    // Current index (which character is currently the last).
    private int mIndex;

    public GameObject(String defaultText, int framesPerCharacter) {
        final int textLength = defaultText.length();
        mText = new char[textLength];

        for (int x = 0; x < textLength; x++) {
            mText[x] = defaultText.charAt(x);
        }

        mFrames = framesPerCharacter;
    }

    public void drawText() {
        // I do not have room enough to explain drawing APIs, but 
        // you'll get the idea.
        for (int x = 0; x < mIndex; x++) {
            // Draw text, from the beginning to the current index.
            // Depending on the drawing API, you might have to
            // change the x and y coordinates for each character.
            APIDrawText.drawText(mText[x]);
        }

        // Reset the counter if the character's "animation"
        // is done and add one to the index. 
        // Otherwise, add one to the current frame.
        if (mCurrentFrame >= mFrames) { mCurrentFrame = 0; mIndex++; }
        else { mCurrentFrame++; }

        if (mIndex >= mText.length) {
            // Reset the index counter (will display the text all over again).
            mIndex = 0;
        }
    }
}

Обратите внимание, что в классе игровых объектов есть больше полей, описывающих их, но для примера этого должно быть достаточно.

/**
 * Basic OpenGL ES implementation on Android.
 * Should contain onSurfaceCreated() and onSurfaceChanged().
 */
public class GLRenderer extends GLSurfaceView implements Renderer {
    private GameObject mGameObject;

    public GLRenderer() { 
        // Add default text and add 25 frames per character.
        mGameObject = new GameObject("Default text!", 25);
    }

    /**
     * The ordinary draw function on Android. Your code should
     * look something similiar to this.
     */
    @Override
    public void onDrawFrame(GL10 gl) {
        // Use the method which you got to render text with OpenGL
        // here.
        mGameObject.drawText();         
    }
}

Ну, что происходит? Подведем итог:

Первый кадр : D <- Увеличить <em>mCurrentFrame на единицу.

Второй кадр : D <- Увеличить <em>mCurrentFrame на единицу.

...

Двадцать шестой кадр : De <- <em>mIndex увеличен до одного (он проходит через Переменная mText два раза).

...

Весь текст был отображен : <- Сброс <em>mIndex в ноль, сброс mCurrentFrame в ноль. Это будет воспроизводить анимацию с самого начала.

Это основная идея. Вы можете добавить больше методов, в которых вы будете изменять количество кадров на количество символов, менять текст, замедлять / ускорять анимацию после каждого символа и т. Д.

Я также написал пример этого, но для системы Canvas. Вам должно быть легко адаптироваться к тому, что вы выберете.

Вы можете найти мой пример здесь .

...