Составление списка анимированных растровых изображений - PullRequest
1 голос
/ 19 июля 2011

Итак, у меня есть эта замечательная игра для Android (змей-клон с анимацией), которая делает финальное тестирование, когда BAM! Мое второе тестирующее устройство (Nexus 1, HTC Magic было моим 1.) мерцает при рисовании. Кто-нибудь знает, почему этот код не будет работать правильно с Nexus 1?

public void draw(Canvas canv) {
int count = 0;
isHead = false;
for (int i = 0; i < SPACES; i++) {
    if (mDrawSpaces[i]) {
    count++;
    if (count == SPACES - 1) {
        setDrawSpacesToFalse();
        if (bmp != null)
        super.drawPlaceable(canv);
    }
    } else {
    mDrawSpaces[i] = true;
    return;
    }
}
}

У меня есть список Птиц (Птицы / НЛО / другие) с ПРОСТРАНСТВОМ (4) раза больше элементов, которые рисуются на экране. Поэтому я подумал про себя, что вместо расчета поворота и масштаба изображений для каждой Птицы у меня есть только 3 заполнителя между птицами, у каждого из которых есть изображение, которое нужно нарисовать, как только они станут видимыми. Эти картинки генерируются первой птицей:

public void drawHead(Canvas canv) {
    //calculate the rotation & mirroring of the picture
    super.drawPlaceable(canv);
        //generate the pics for smaller birds following it
    mat.preScale((float) 0.6, (float) 0.6);
    this.bmp = Bitmap.createBitmap(SPRITESHEET, Bird.mCurFrame
        * BIG_W[mUseBird], 0, BIG_W[mUseBird], BIG_H[mUseBird],
        mat, true);
}

Есть идеи? Мой метод рисования (Canvas) неверен в какой-то части?

РЕДАКТИРОВАТЬ: я не знаю почему, я не знаю как, но сегодня днем, когда я снова проверил его, он волшебным образом работал ...

1 Ответ

0 голосов
/ 20 июля 2011

Я вижу, что вы используете матрицу для масштабирования - другой вариант будет использовать

canvas.DrawBitmap(spriteSheet, fromRect, toRect, paint);

Где toRect должен быть классом Rect любого размера, таким образом, вы не будете создавать растровые объекты при рисованииигровые рамки.В пианте должен быть включен битовый фильтр.

Для поворота вам понадобится:

canvas.save();
canvas.rotate(spriteAngle,spriteCenterX, spriteCenterY);
canvas.DrawBitmap(spriteSheet, fromRect, toRect, paint);
canvas.restore();

Это достаточно быстрый код для многих 2D-игр, хотя и не такой быстрый и мощный, как OpenGL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...