[help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Effect

  ... discussions about development with the GLES1 branch of AndEngine.

[help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Effect

Postby drjava72 » Thu Mar 15, 2012 4:07 pm

Hi fellows,
Here is a link to my stackoverflow post http://stackoverflow.com/questions/9698 ... -andengine.

Pleae view this and you will know about what I am talking..

I am partially successful in doing this... posing my latest code here... please note that stackoverflow code is OLD.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. package org.anddev.andengine.examples;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import javax.microedition.khronos.opengles.GL10;
  6.  
  7. import org.anddev.andengine.engine.Engine;
  8. import org.anddev.andengine.engine.camera.Camera;
  9. import org.anddev.andengine.engine.options.EngineOptions;
  10. import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
  11. import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
  12. import org.anddev.andengine.entity.particle.ParticleSystem;
  13. import org.anddev.andengine.entity.particle.emitter.RectangleParticleEmitter;
  14. import org.anddev.andengine.entity.particle.initializer.AlphaInitializer;
  15. import org.anddev.andengine.entity.particle.initializer.ColorInitializer;
  16. import org.anddev.andengine.entity.particle.initializer.GravityInitializer;
  17. import org.anddev.andengine.entity.particle.modifier.AlphaModifier;
  18. import org.anddev.andengine.entity.particle.modifier.ColorModifier;
  19. import org.anddev.andengine.entity.particle.modifier.ExpireModifier;
  20. import org.anddev.andengine.entity.primitive.Line;
  21. import org.anddev.andengine.entity.scene.Scene;
  22. import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
  23. import org.anddev.andengine.entity.sprite.Sprite;
  24. import org.anddev.andengine.entity.util.FPSLogger;
  25. import org.anddev.andengine.input.touch.TouchEvent;
  26. import org.anddev.andengine.opengl.texture.TextureOptions;
  27. import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
  28. import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
  29. import org.anddev.andengine.opengl.texture.region.TextureRegion;
  30. import org.anddev.andengine.opengl.util.GLHelper;
  31. import org.anddev.andengine.util.MathUtils;
  32.  
  33. import android.graphics.Path;
  34. import android.view.MotionEvent;
  35. import android.view.ViewGroup.MarginLayoutParams;
  36. import android.widget.Toast;
  37.  
  38. public class ParticleSystemSimpleExample extends BaseExample {
  39.         // ===========================================================
  40.         // Constants
  41.         // ===========================================================
  42.  
  43.         private static final int CAMERA_WIDTH = 720;
  44.         private static final int CAMERA_HEIGHT = 480;
  45.  
  46.         // ===========================================================
  47.         // Fields
  48.         // ===========================================================
  49.  
  50.         //TODO: rotate this with the angle with previous move point to current move point.
  51.        
  52.         private Camera mCamera;
  53.         private BitmapTextureAtlas mBitmapTextureAtlas;
  54.         private TextureRegion mParticleTextureRegion;
  55.         private BitmapTextureAtlas mBitmapTextureAtlasStreak;
  56.         private TextureRegion mStreadTextureRegion;
  57.        
  58.         private Sprite[] mSprite = new Sprite[20];
  59.         private int mIndex = 0;
  60.  
  61.         private Line[] mLineArray = new Line[10];
  62.         private ArrayList<Points> mTouchPoints = new ArrayList<Points>();
  63.         // ===========================================================
  64.         // Constructors
  65.         // ===========================================================
  66.  
  67.         // ===========================================================
  68.         // Getter & Setter
  69.         // ===========================================================
  70.  
  71.         // ===========================================================
  72.         // Methods for/from SuperClass/Interfaces
  73.         // ===========================================================
  74.  
  75.         @Override
  76.         public Engine onLoadEngine() {
  77.                 Toast.makeText(this, "Touch the screen to move the particlesystem.", Toast.LENGTH_LONG).show();
  78.                 this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
  79.                 return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
  80.         }
  81.  
  82.         @Override
  83.         public void onLoadResources() {
  84.                 this.mBitmapTextureAtlas = new BitmapTextureAtlas(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
  85.                 this.mParticleTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "gfx/particle_point.png", 0, 0);
  86.  
  87.                 this.mBitmapTextureAtlasStreak = new BitmapTextureAtlas(128, 16, TextureOptions.BILINEAR_PREMULTIPLYALPHA);            
  88.                 this.mStreadTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasStreak, this, "gfx/streak1.png", 0, 0);
  89.                
  90.                 this.mEngine.getTextureManager().loadTextures(this.mBitmapTextureAtlas, this.mBitmapTextureAtlasStreak);
  91.         }
  92.  
  93.         @Override
  94.         public Scene onLoadScene() {
  95.                 this.mEngine.registerUpdateHandler(new FPSLogger());
  96.  
  97.                 final Scene scene = new Scene();
  98.  
  99.  
  100.                 final RectangleParticleEmitter particleEmitter = new RectangleParticleEmitter(CAMERA_WIDTH * 0.5f, CAMERA_HEIGHT * 0.5f, 5f,5f);
  101.                
  102.  
  103.                 final ParticleSystem particleSystem = new ParticleSystem(particleEmitter, 100, 100, 1000, this.mParticleTextureRegion);
  104.                 particleSystem.setParticlesSpawnEnabled(false);        
  105.                
  106.                 scene.setOnSceneTouchListenerBindingEnabled(true);
  107.                 scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
  108.                         @Override
  109.                         public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {                              
  110.                                
  111.                                 if(pSceneTouchEvent.getAction() != TouchEvent.ACTION_DOWN && pSceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE){                                  
  112.  
  113.                                         particleSystem.setParticlesSpawnEnabled(true);                                 
  114.  
  115.                                        
  116.                                         mTouchPoints.add(new Points(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()));
  117.                                        
  118.                                         printSamples(pSceneTouchEvent.getMotionEvent(), particleEmitter);
  119.                                        
  120.  
  121.                                        
  122.                                 }else if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_UP){
  123.                                        
  124.                                         particleSystem.setParticlesSpawnEnabled(false);
  125.  
  126.                                         hideAllLine();
  127.                                         resetTouchList();
  128.                                        
  129.                                 }else if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){                                      
  130.                                         particleSystem.reset();
  131.                                        
  132.                                 }                      
  133.                                
  134.                                 return true;
  135.                         }
  136.                 });            
  137.  
  138.                 particleSystem.addParticleInitializer(new ColorInitializer(1, 0, 0));
  139.                 particleSystem.addParticleInitializer(new AlphaInitializer(0));
  140.                 particleSystem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
  141.  
  142.                 particleSystem.addParticleInitializer(new GravityInitializer());
  143.  
  144.  
  145.                 particleSystem.addParticleModifier(new ColorModifier(1, 1, 0, 0.5f, 0, 0, 0, 3));
  146.                 particleSystem.addParticleModifier(new ColorModifier(1, 1, 0.5f, 1, 0, 1, 4, 6));
  147.                 particleSystem.addParticleModifier(new AlphaModifier(0, 1, 0, 0.5f));
  148.                 particleSystem.addParticleModifier(new AlphaModifier(1, 0, 2.5f, 3.5f));
  149.                 particleSystem.addParticleModifier(new ExpireModifier(6, 6f));
  150.  
  151.                 scene.attachChild(particleSystem);
  152.  
  153.                 for(int i = 0; i<mLineArray.length; i++){
  154.                        
  155.                         mLineArray[i] = new Line(0, 0, 0, 0) {
  156.                                 protected void onInitDraw(final GL10 pGL) {
  157.                                         super.onInitDraw(pGL);
  158.                                         GLHelper.disableTextures(pGL);
  159.                                         GLHelper.disableTexCoordArray(pGL);
  160.                                         pGL.glEnable(GL10.GL_LINE_SMOOTH);
  161.                                         pGL.glBindTexture(GL10.GL_TEXTURE_2D, mBitmapTextureAtlas.getHardwareTextureID());
  162.                                        
  163.                                                                                
  164.                                        
  165.                                         pGL.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_NICEST);
  166.                                         GLHelper.lineWidth(pGL, this.getLineWidth());
  167.                                 }
  168.                         };     
  169.                        
  170.                         mLineArray[i].setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
  171.                         mLineArray[i].setScale(25);
  172.                         mLineArray[i].setVisible(false);
  173.                        
  174.                         scene.attachChild(mLineArray[i]);
  175.                 }      
  176.                
  177.                
  178.                 return scene;
  179.         }
  180.        
  181.         private int lineIndex = 0;
  182.         synchronized void printSamples(MotionEvent ev, RectangleParticleEmitter ps) {
  183.                
  184.                
  185.                 System.out.println("Touch List Size "+mTouchPoints.size());
  186.                
  187.                 if(mTouchPoints.size() <= 1){
  188.                         return;
  189.                 }
  190.                
  191.                
  192.                
  193.                 System.out.println("index "+mIndex);
  194.                
  195.                 float X1 = mTouchPoints.get(mIndex).x;
  196.                 float Y1 = mTouchPoints.get(mIndex).y;
  197.                
  198.                
  199.                 mIndex += 1;
  200.                 System.out.println("index "+mIndex);
  201.                
  202.                 float X2 = mTouchPoints.get(mIndex).x;
  203.                 float Y2 = mTouchPoints.get(mIndex).y;
  204.                                
  205.                 mLineArray[lineIndex].setPosition(X1, Y1, X2, Y2);
  206.                 mLineArray[lineIndex].setVisible(true);        
  207.                 lineIndex += 1;
  208.                 if(lineIndex >= mLineArray.length -1){
  209.                         lineIndex = 0;
  210.                 }
  211.          }
  212.        
  213.  
  214.          float getRotationAngle(MotionEvent ev) {
  215.              final int historySize = ev.getHistorySize();
  216.              
  217.              if(historySize == 0){
  218.                  return -1;
  219.              }
  220.              float x = ev.getHistoricalX(0, historySize -1);
  221.              float y = ev.getHistoricalY(0, historySize -1);
  222.              float angleDegree = MathUtils.radToDeg((float)Math.atan2(y - ev.getY(), x - ev.getX()));
  223.          
  224.  
  225.              return angleDegree;
  226.          }
  227.        
  228.        
  229.         @Override
  230.         public void onLoadComplete() {
  231.  
  232.         }
  233.  
  234.        
  235.  
  236.        
  237.         private synchronized void resetTouchList(){
  238.                 mTouchPoints.clear();
  239.                 mIndex = 0;
  240.                 hideAllLine();
  241.         }
  242.        
  243.         private void hideAll(){
  244.                 for(int i = 0; i<mSprite.length; i++){
  245.                         mSprite[i].setVisible(false);                  
  246.                 }
  247.         }
  248.        
  249.         private void hideAllLine(){
  250.                 for(int i = 0; i<mLineArray.length; i++){
  251.                         mLineArray[i].reset();
  252.                         mLineArray[i].setVisible(false);                       
  253.                 }
  254.         }
  255.         // ===========================================================
  256.         // Methods
  257.         // ===========================================================
  258.  
  259.         // ===========================================================
  260.         // Inner and Anonymous Classes
  261.         // ===========================================================
  262.         class Points{
  263.                 public float x = 0;
  264.                 public float y = 0;
  265.                
  266.                 Points(float pX, float pY){
  267.                         this.x = pX;
  268.                         this.y = pY;
  269.                 }
  270.         }
  271. }
  272.  
Parsed in 0.062 seconds, using GeSHi 1.0.8.4


As you will notice that a white box is moving with this.. I what this effect.. the ninja effect of which pic is attached.

please help me.. for reference I am giving you CoCoStudio code

https://github.com/hiepnd/CCBlade/blob/master/CCBlade.m

COMPLETE PROJECT IS ATTACHED

effect 2
also project attached.. I have done it partially help me to do it 100% please community
Attachments
SwipeParticleNLine (line).zip
effect 2 project
(1.22 MiB) Downloaded 444 times
effeg.png
effect 2
effeg.png (2.75 KiB) Viewed 2943 times
SwipeParticleNLine.zip
complete runnable project
(1.22 MiB) Downloaded 1618 times
ninja.png
desired effect
ninja.png (212.68 KiB) Viewed 2969 times
desired.png
current effect
desired.png (3.73 KiB) Viewed 2969 times
particle_point.png
image used in this example
particle_point.png (768 Bytes) Viewed 2969 times
Best Regards,
drJava72
drjava72
 
Posts: 287
Joined: Fri Apr 29, 2011 8:03 am

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby sufferer » Sat Apr 21, 2012 8:18 pm

Thank you!!! It is cool)
sufferer
 
Posts: 50
Joined: Thu Jun 23, 2011 8:07 am

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby conscience » Fri Apr 27, 2012 5:49 am

DUDE.. i am reading and testing your project... and i have manage to remove the white something in the screen..



i just comment this line..



>> printSamples(pSceneTouchEvent.getMotionEvent(), particleEmitter); <<
conscience
 
Posts: 1
Joined: Wed Apr 11, 2012 10:11 am

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby siddharth3322 » Tue Apr 09, 2013 1:38 pm

Hey guys,
I need help on this. Anybody solve this thing then please help me.
siddharth3322
 
Posts: 243
Joined: Thu Jan 03, 2013 10:10 am

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby Siddharth » Sat Apr 20, 2013 6:08 pm

I have now ready with Cut The Rope type game.
I need only ninja swipe remaining to cut the rope. I need only suggestion for this.

Or how to create this type of animation or any other similar animation that work for me.
User avatar
Siddharth
 
Posts: 272
Joined: Thu May 03, 2012 12:11 pm
Location: Rajkot

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby Siddharth » Mon Apr 22, 2013 5:59 pm

Anyone guide me. Only basic animation concept work for me.
I only need concept what to do in this situation. I tried following two way but I don't satisfied with it.

1) I use particle system but I get random point on the screen. So effect does not convey its meaning.
I have following link in which I have implemented line drawing algorithm with particle system.
http://stackoverflow.com/questions/10702328/drawing-line-effect-on-touch-like-fruit-ninja-or-veggie-samurai-in-and-engine

2) Use simple and single sprite, and perform scale, transformation and rotation but I don't get desire effect that look perfect for rope cutting.

So friends please help me to come out of this.
User avatar
Siddharth
 
Posts: 272
Joined: Thu May 03, 2012 12:11 pm
Location: Rajkot

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby Siddharth » Mon Apr 22, 2013 7:32 pm

I got following reply from one member of other forum.

http://gamedev.stackexchange.com/questions/54281/fruit-ninja-swipe
User avatar
Siddharth
 
Posts: 272
Joined: Thu May 03, 2012 12:11 pm
Location: Rajkot

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby siddharth3322 » Tue Apr 23, 2013 3:27 pm

Hi guys I finally able to create swipe effect with following code. I know it was really basic but it serve my purpose. I share my code here if any one improve this then it is really nice for us.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.        
  2.         @Override
  3.         public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
  4.  
  5.                 if (pSceneTouchEvent.isActionDown()) {
  6.                         mTouchDownX = pSceneTouchEvent.getX();
  7.                         mTouchDownY = pSceneTouchEvent.getY();
  8.                         if (swipe == null) {
  9.                                 swipe = new Swipe(mTouchDownX, mTouchDownY,
  10.                                                 textureManager.swipeRegion, mVertexBufferObjectManager,
  11.                                                 ropeList, mPhysicsWorld, gameActivity);
  12.                                 swipe.setScaleCenter(1f, 1f);
  13.                                 swipe.setScaleX(0f);
  14.                                 attachChild(swipe);
  15.                         }
  16.                         return true;
  17.                 } else if (pSceneTouchEvent.isActionMove()) {
  18.  
  19.                         if (swipe != null) {
  20.                                 float pX = pSceneTouchEvent.getX();
  21.                                 float pY = pSceneTouchEvent.getY();
  22.  
  23.                                 swipe.setRotationCenter(0f, 0f);
  24.                                 float distance = getDistance(pX, pY);
  25.                                 float scale = distance / swipe.getWidth();
  26.                                 scale = (scale > 2f) ? 0f : scale;
  27.  
  28.                                 swipe.setScaleX(scale);
  29.                                 swipe.setBlendFunction(GL10.GL_SRC_ALPHA,
  30.                                                 GL10.GL_ONE_MINUS_SRC_ALPHA);
  31.  
  32.                                 if (mAngle == 0f)
  33.                                         mAngle = MathUtils.radToDeg(getAngle(pX, pY));
  34.                                 swipe.setRotation(mAngle + 180f);
  35.                         }
  36.                         return true;
  37.                 } else if (pSceneTouchEvent.isActionUp()) {
  38.                         if (swipe != null) {
  39.                                 mAngle = 0f;
  40.                                 detachChild(swipe);
  41.                                 swipe = null;
  42.                         }
  43.                         return true;
  44.                 }
  45.  
  46.                 return false;
  47.         }
  48.  
  49.         private float getAngle(float pX, float pY) {
  50.                 float dx = mTouchDownX - pX;
  51.                 float dy = mTouchDownY - pY;
  52.                 return MathUtils.atan2(dy, dx);
  53.         }
  54.  
  55.         private float getDistance(float pX, float pY) {
  56.                 float dx = mTouchDownX - pX;
  57.                 float dy = mTouchDownY - pY;
  58.                 return FloatMath.sqrt(dx * dx + dy * dy);
  59.         }
  60.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4


Also I upload the texture file that I used. I think other members get help from this.
Attachments
swipe.png
swipe.png (1.28 KiB) Viewed 1828 times
siddharth3322
 
Posts: 243
Joined: Thu Jan 03, 2013 10:10 am

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby mrfarts » Tue Sep 24, 2013 3:58 pm

siddharth3322 wrote:Hi guys I finally able to create swipe effect with following code. I know it was really basic but it serve my purpose. I share my code here if any one improve this then it is really nice for us.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.        
  2.         @Override
  3.         public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
  4.  
  5.                 if (pSceneTouchEvent.isActionDown()) {
  6.                         mTouchDownX = pSceneTouchEvent.getX();
  7.                         mTouchDownY = pSceneTouchEvent.getY();
  8.                         if (swipe == null) {
  9.                                 swipe = new Swipe(mTouchDownX, mTouchDownY,
  10.                                                 textureManager.swipeRegion, mVertexBufferObjectManager,
  11.                                                 ropeList, mPhysicsWorld, gameActivity);
  12.                                 swipe.setScaleCenter(1f, 1f);
  13.                                 swipe.setScaleX(0f);
  14.                                 attachChild(swipe);
  15.                         }
  16.                         return true;
  17.                 } else if (pSceneTouchEvent.isActionMove()) {
  18.  
  19.                         if (swipe != null) {
  20.                                 float pX = pSceneTouchEvent.getX();
  21.                                 float pY = pSceneTouchEvent.getY();
  22.  
  23.                                 swipe.setRotationCenter(0f, 0f);
  24.                                 float distance = getDistance(pX, pY);
  25.                                 float scale = distance / swipe.getWidth();
  26.                                 scale = (scale > 2f) ? 0f : scale;
  27.  
  28.                                 swipe.setScaleX(scale);
  29.                                 swipe.setBlendFunction(GL10.GL_SRC_ALPHA,
  30.                                                 GL10.GL_ONE_MINUS_SRC_ALPHA);
  31.  
  32.                                 if (mAngle == 0f)
  33.                                         mAngle = MathUtils.radToDeg(getAngle(pX, pY));
  34.                                 swipe.setRotation(mAngle + 180f);
  35.                         }
  36.                         return true;
  37.                 } else if (pSceneTouchEvent.isActionUp()) {
  38.                         if (swipe != null) {
  39.                                 mAngle = 0f;
  40.                                 detachChild(swipe);
  41.                                 swipe = null;
  42.                         }
  43.                         return true;
  44.                 }
  45.  
  46.                 return false;
  47.         }
  48.  
  49.         private float getAngle(float pX, float pY) {
  50.                 float dx = mTouchDownX - pX;
  51.                 float dy = mTouchDownY - pY;
  52.                 return MathUtils.atan2(dy, dx);
  53.         }
  54.  
  55.         private float getDistance(float pX, float pY) {
  56.                 float dx = mTouchDownX - pX;
  57.                 float dy = mTouchDownY - pY;
  58.                 return FloatMath.sqrt(dx * dx + dy * dy);
  59.         }
  60.  
Parsed in 0.040 seconds, using GeSHi 1.0.8.4


Also I upload the texture file that I used. I think other members get help from this.



What is the swipe function? can u give code for that?
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  swipe = new Swipe(mTouchDownX, mTouchDownY,
  2.                       textureManager.swipeRegion, mVertexBufferObjectManager,
  3.                       ropeList, mPhysicsWorld, gameActivity);
Parsed in 0.035 seconds, using GeSHi 1.0.8.4
Image
mrfarts
 
Posts: 134
Joined: Fri Jan 25, 2013 6:14 pm

Re: [help] draw GL10.GL_TRIANGLE_STRIP Fruit Ninja Swipe Eff

Postby Siddharth » Wed Sep 25, 2013 6:34 am

Hi mrfarts,

Swipe is my user define class in which I write code for collision detection as per my game requirement.
You can use normal sprite for this purpose also.
User avatar
Siddharth
 
Posts: 272
Joined: Thu May 03, 2012 12:11 pm
Location: Rajkot

Next

Return to GLES1

Who is online

Users browsing this forum: No registered users and 15 guests