Question

Je veux montrer une bande de triangle lorsque l'utilisateur échange un doigt à l'écran. Je ne sais pas comment le faire avec Andengine, en utilisant un système de particules ou à l'aide de Sprites ou à l'aide d'une bande triangulaire Algo ...

Je n'ai écrit aucun code parce que je suis frappé que quoi faire. Je télécharge une image s'il vous plaît partager vos idées.

bande triangulaire

mise à jour

Quelqu'un a fait cela dans l'iPhone mais malheureusement, je suis inconnu avec la syntaxe de la langue, aidez-moi s'il vous plaît à comprendre l'algo de ce code https://github.com/hiepnd/ccblade

** effet je veux ** effet de fruit ninja

Téléchargement de projet Android complet

http://www.andengine.org/forums/resources / complet-runnable-projet / 1301

J'ai fait ce code mais je n'ai pas pu obtenir l'effet souhaité ...

    package org.az.algo.examples;

import javax.microedition.khronos.opengles.GL10;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.particle.ParticleSystem;
import org.anddev.andengine.entity.particle.emitter.RectangleParticleEmitter;
import org.anddev.andengine.entity.particle.initializer.AlphaInitializer;
import org.anddev.andengine.entity.particle.initializer.ColorInitializer;
import org.anddev.andengine.entity.particle.initializer.GravityInitializer;
import org.anddev.andengine.entity.particle.initializer.RotationInitializer;
import org.anddev.andengine.entity.particle.modifier.AlphaModifier;
import org.anddev.andengine.entity.particle.modifier.ColorModifier;
import org.anddev.andengine.entity.particle.modifier.ExpireModifier;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;

import android.view.ViewGroup.MarginLayoutParams;
import android.widget.Toast;


public class ParticleSystemSimpleExample extends BaseExample {
    // ===========================================================
    // Constants
    // ===========================================================

    private static final int CAMERA_WIDTH = 720;
    private static final int CAMERA_HEIGHT = 480;

    // ===========================================================
    // Fields
    // ===========================================================

    private Camera mCamera;
    private BitmapTextureAtlas mBitmapTextureAtlas;
    private TextureRegion mParticleTextureRegion;
    private BitmapTextureAtlas mBitmapTextureAtlasStreak;
    private TextureRegion mStreadTextureRegion;

    private Sprite[] mSprite = new Sprite[20];
    private int mIndex = 0;

    // ===========================================================
    // Constructors
    // ===========================================================

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    @Override
    public Engine onLoadEngine() {
        Toast.makeText(this, "Touch the screen to move the particlesystem.", Toast.LENGTH_LONG).show();
        this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
    }

    @Override
    public void onLoadResources() {
        this.mBitmapTextureAtlas = new BitmapTextureAtlas(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
        this.mParticleTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "gfx/particle_point.png", 0, 0);

        this.mBitmapTextureAtlasStreak = new BitmapTextureAtlas(128, 16, TextureOptions.BILINEAR_PREMULTIPLYALPHA);     
        this.mStreadTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasStreak, this, "gfx/streak1.png", 0, 0);

        this.mEngine.getTextureManager().loadTextures(this.mBitmapTextureAtlas, this.mBitmapTextureAtlasStreak);
    }

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

        final Scene scene = new Scene();

//      final CircleOutlineParticleEmitter particleEmitter = new CircleOutlineParticleEmitter(CAMERA_WIDTH * 0.5f, CAMERA_HEIGHT * 0.5f + 20, 80);
        final RectangleParticleEmitter particleEmitter = new RectangleParticleEmitter(CAMERA_WIDTH * 0.5f, CAMERA_HEIGHT * 0.5f, 5f,5f);

//      final PointParticleEmitter particleEmitter = new PointParticleEmitter(10, 10);      
        final ParticleSystem particleSystem = new ParticleSystem(particleEmitter, 100, 100, 1000, this.mParticleTextureRegion);
        particleSystem.setParticlesSpawnEnabled(false);     

        scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
            @Override
            public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {               

                if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE){                 

                    particleSystem.setParticlesSpawnEnabled(true);                  
                    particleEmitter.setCenter(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());

                    mSprite[getIndex()].setPosition(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
                    mSprite[getIndex()].setVisible(true);

                }else if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP){

                    particleSystem.setParticlesSpawnEnabled(false);
                    hideAll();

                }else if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){

                    particleSystem.reset();

                }

                return true;
            }
        });     

        particleSystem.addParticleInitializer(new ColorInitializer(1, 0, 0));
        particleSystem.addParticleInitializer(new AlphaInitializer(0));
        particleSystem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
//      particleSystem.addParticleInitializer(new VelocityInitializer(-2, 2, -20, -10));
        particleSystem.addParticleInitializer(new GravityInitializer());

//      particleSystem.addParticleModifier(new ScaleModifier(0.5f, 1.0f, 0, 1.5f));
        particleSystem.addParticleModifier(new ColorModifier(1, 1, 0, 0.5f, 0, 0, 0, 3));
        particleSystem.addParticleModifier(new ColorModifier(1, 1, 0.5f, 1, 0, 1, 4, 6));
        particleSystem.addParticleModifier(new AlphaModifier(0, 1, 0, 0.5f));
        particleSystem.addParticleModifier(new AlphaModifier(1, 0, 2.5f, 3.5f));
        particleSystem.addParticleModifier(new ExpireModifier(6, 6f));

        scene.attachChild(particleSystem);


        for(int i = 0; i < mSprite.length; i++){
            mSprite[i] = new Sprite(-20, 0, mStreadTextureRegion);
            mSprite[i].setVisible(false);
            scene.attachChild(mSprite[i]);
        }





        return scene;
    }

    @Override
    public void onLoadComplete() {

    }


    private int getIndex(){
        if(mIndex >= mSprite.length -1){
            mIndex = 0;
        }
        System.out.println("Index ........ "+mIndex);
        return mIndex++;
    }

    private void hideAll(){
        for(int i = 0; i<mSprite.length; i++){
            mSprite[i].setVisible(false);
            mSprite[i].setPosition(-CAMERA_WIDTH, 0);
        }
    }
    // ===========================================================
    // Methods
    // ===========================================================

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}

image J'ai utilisé ce code

Image que j'ai utilisé avec ce code est également attaché

mis à jour

Effet partiel obtenu .. Mais problème sur la balayage rapide. Tous les projets complets sont téléchargés ici http://www.andengine.org/forums/post31772.html#p31772

effet partiel

Était-ce utile?

La solution

Voici une solution à Libgdx.Il utilise GL_TRIANGLE_STRIP.

https://github.com/mattdesl/lwjgl-basics/wiki / libgdx-doigt-glisse

La solution finale utilise deux bandes triangulaires et un attribut Texcoord personnalisé, permettant à nous d'utiliser une texture de recherche pour obtenir une anti-aliasing fausse (mais efficace).Un anti-aliasing plus efficace / flexible utiliserait des shaders et une seule bande de triangle.Utilisez l'attribut Vertex -1.0 pour le haut et 1,0 pour le bord inférieur de votre balayage et 1,0 pour les astuces.Ensuite, dans le shader Frag, utilisez ABS () - donc 0,0 signifie "centre" et 1.0 signifie "bord".

quelque chose comme ceci:

    color.a *= smoothstep(0.0, 2./thickness, 1.0-abs(vTexCoord.t));

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top