AssetManager ParticleEffectLoader из Libgdx android

В libgdx нет ParticleEffectLoader для AssetManager. Поэтому я пишу загрузчик для эффекта частиц. Но всегда возникает ошибка и говорит, что не удается загрузить файл.

Может ли кто-нибудь помочь мне решить проблему или показать мне успешный загрузчик эффектов частиц? Большое спасибо!

мой код:

package com.game.data;

import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.assets.AssetLoaderParameters;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader;
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.utils.Array;

public class ParticleEffectLoader extends 
    AsynchronousAssetLoader<ParticleEffect, AssetLoaderParameters<ParticleEffect>>{

    ParticleEffect particleEffect;

    public ParticleEffectLoader (FileHandleResolver resolver) {
        super(resolver);
        if(particleEffect==null){
            particleEffect=new ParticleEffect();
        }
    }

    @Override
    public void loadAsync(AssetManager manager, String fileName,
            AssetLoaderParameters<ParticleEffect> parameter) {
        System.out.println("loadAsync");
        FileHandle particleFile = resolve(fileName);
        particleEffect.loadEmitters(particleFile);
        particleEffect.loadEmitterImages(imagesDir);
    }

    @Override
    public ParticleEffect loadSync(AssetManager manager, String fileName,
            AssetLoaderParameters<ParticleEffect> parameter) {
        System.out.println("loadSync");
        return particleEffect;
    }

    @Override
    public Array<AssetDescriptor> getDependencies(String fileName,
            AssetLoaderParameters<ParticleEffect> parameter) {
        System.out.println("getDependencies");
//      FileHandle imagesDir = resolve("res/");
//      particleEffect.loadEmitterImages(imagesDir);
        return null;
    }

}

person Qiengo    schedule 04.09.2012    source источник


Ответы (2)


Сегодня мне тоже нужно реализовать ParticleEffectLoader, и я рад узнать, что это довольно просто. Ниже моя реализация, я проверил ее в своем собственном проекте, я использую SynchronousAssetLoader.

import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.assets.AssetLoaderParameters;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
import com.badlogic.gdx.assets.loaders.SynchronousAssetLoader;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.utils.Array;

/**
 * @author Daniel
 * @date Oct 10, 2012 2:04:42 PM
 */
public class ParticleEffectLoader extends SynchronousAssetLoader<ParticleEffect, ParticleEffectLoader.ParticleEffectParameter> {

    public ParticleEffectLoader(FileHandleResolver resolver) {
        super(resolver);
    }

    @Override
    public ParticleEffect load(AssetManager assetManager, String fileName,
            ParticleEffectParameter parameter) {
            ParticleEffect effect = new ParticleEffect();
        FileHandle effectFile = resolve(fileName);
        FileHandle imgDir = effectFile.parent();
        effect.load(effectFile, imgDir);
        return effect;
    }

    @Override
    public Array<AssetDescriptor> getDependencies(String fileName,
            ParticleEffectParameter parameter) {
        return null;
    }

    static public class ParticleEffectParameter extends AssetLoaderParameters<ParticleEffect> {
        public ParticleEffectParameter () {
        }
    }

}

Обратите внимание, что в моем проекте я всегда помещаю файл изображения в ту же папку, что и файл Particle, поэтому мне этого достаточно.

person Daniel Chow    schedule 10.10.2012

Просто для полноты: тем временем есть официальный ParticleEffectsLoader: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/assets/loaders/ParticleEffectLoader.html

person Sebastian    schedule 22.12.2016