AndEngine получает ошибку: предоставляемый pTextureAtlasSource не должен превышать границы текстуры - PullRequest
4 голосов
/ 21 декабря 2011

я новичок в играх для Android и начал разработку и столкнулся с проблемой при использовании createTiledFromAsset код, где я получаю проблему:

@Override
public void onLoadResources() {
    mBitmapTextureAtlas = new BitmapTextureAtlas(128, 128,
            TextureOptions.BILINEAR);

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

    mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory
            .createTiledFromAsset(this.mBitmapTextureAtlas, this,
                    "move.png", 0, 0, 10, 1);
    mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas);

}

@Override
public Scene onLoadScene() {
    mEngine.registerUpdateHandler(new FPSLogger());

    mMainScene = new Scene();
    mMainScene
            .setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

    player = new AnimatedSprite(0, 0, mPlayerTextureRegion);

    mMainScene.attachChild(player);
    return mMainScene;
}

я не получаю сообщение об ошибке, так как мой BitmapTextureAtlas имеет 128 * 128, и каждая мозаичная часть, полученная из createTiledFromAsset, должна иметь 78 * 85, поскольку переданные ей аргументы - это 1 строка и 10 столбцов, а мое исходное изображение имеет 779 * 85 это означает, что если ширина разделена на 10 частей, то 779/10 = 78 приблизительно, что будет шириной каждой плиточной части, а строка равна 1, поэтому 85/1 = 85, следовательно, ширина * высота каждой плиточной части, которая должна быть размещена для BitmapTextureAtlas - 78 * 85, а сам BitmapTextureAtlas имеет размер 128 * 128, тогда почему ошибка говорит Supplied pTextureAtlasSource must not exceed bounds of Texture что здесь происходит ...? или я не понимаю фактические функции ...? если я не прав, то как работает процесс createTiledFromAsset ........?

Ответы [ 2 ]

5 голосов
/ 13 апреля 2013

Я тоже нашел такую ​​же проблему.Я использую большой лист спрайта и пытаюсь его использовать.после поиска я нашел подсказку в этом уроке: Getting-Start-Working-с-изображениями , и я понимаю, что значение ширины и высоты используется в:

BitmapTextureAtlas(WIDTH, HEIGHT ,TextureOptions.BILINEAR);

должно быть больше, чем размер изображения.например, если я использую спрайт 1200 * 100, я должен использовать ширину и высоту выше 1200 * 100.

BitmapTextureAtlas(2047, 128, TextureOptions.BILINEAR);

2 голосов
/ 21 декабря 2011

Если я правильно понимаю BitmapTextureAtlas, вы пытаетесь поместить изображение 779 * 85 в маленькое пространство 128 * 128. TextureAtlas - это большой холст, на котором вы должны разместить много изображений. Позже к этим изображениям обращаются, используя объект с именем TextureRegion, который в основном определяет размер и координаты меньшего изображения на холсте. Метод createTiledFromAsset, вероятно, копирует исходное изображение 1: 1 в TextureAtlas и сохраняет координаты плиток.

Обратите внимание, что TextureRegion не имеет ничего общего с самим изображением, это просто «указатель» на место в TextureAtlas, где хранится изображение.

Чтобы получить представление о том, что на самом деле представляет собой TextureAtlas, посмотрите на удивительные картинки внизу этой страницы: http://www.blackpawn.com/texts/lightmaps/default.html

...