Straight Shooting

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

Straight Shooting

Postby swiggins » Tue Mar 06, 2012 10:30 pm

I've been having a lot of trouble with this. I'm trying to shoot a projectile in a straight line in the direction of where the second control stick is pointing. I've figured out some things (I guess) but a lot still doesn't work correctly.

Also, I'v confused about garbage collection and sprite creation.
Help!


Here's my code for the control change:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. @Override
  2.                         public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY)
  3.                         {                              
  4.                                 // If the controls are being used
  5.                                 if(pValueX > 0.1 || pValueY > 0.1 || pValueX < -0.1 || pValueY < -0.1)
  6.                                 {
  7.                                         final Sprite projectile = new Sprite(player.getX(), player.getY(), mProjectileTextureRegion.deepCopy());
  8.                                         scene.attachChild(projectile);
  9.                                         final PhysicsHandler projectilePhysics = new PhysicsHandler(projectile);
  10.                                         projectile.registerUpdateHandler(projectilePhysics);
  11.                                         projectilePhysics.setVelocity(pValueX * 400, pValueY * 400);
  12.                                         projectile.setVisible(true);
  13.                                         projectile.registerEntityModifier(new MoveModifier(1, player.getX() - player.getWidth() / 2, projectilePhysics.getVelocityX(), player.getY() - player.getHeight() / 2, projectilePhysics.getVelocityY()));
  14.                                                        
  15.                                         // Collision detection?
  16.                                         if(projectile.collidesWith(enemy))
  17.                                         {
  18.                                                 enemy.setColor(1, 0, 0);
  19.                                                
  20.                                                 if(enemy.getX() > projectile.getX())
  21.                                                         enemy.setPosition(enemy.getX()+8, enemy.getY());
  22.                                                 if(enemy.getY() > projectile.getY())
  23.                                                         enemy.setPosition(enemy.getX(), enemy.getY()+8);
  24.                                                 if(enemy.getX() < projectile.getX())
  25.                                                         enemy.setPosition(enemy.getX()-8, enemy.getY());
  26.                                                 if(enemy.getY() < projectile.getY())
  27.                                                         enemy.setPosition(enemy.getX(), enemy.getY()-8);
  28.                                                
  29.                                                 scene.detachChild(projectile);
  30.                                                 enemy.setColor(1, 1, 1);
  31.                                         }              
  32.                                         // Every 2 seconds, garbage collect
  33.                                         else
  34.                                         {
  35.                                                 mEngine.registerUpdateHandler(new TimerHandler(2, true, new ITimerCallback() {
  36.                                                        
  37.                                                         @Override
  38.                                                         public void onTimePassed(TimerHandler pTimerHandler)
  39.                                                         {
  40.                                                                 projectile.detachSelf();
  41.                                                         }
  42.                                                 }));
  43.                                         }
  44.                                 }
  45.                         }
  46.  
Parsed in 0.038 seconds, using GeSHi 1.0.8.4


Sorry the code looks stupidly formatted.
swiggins
 
Posts: 3
Joined: Tue Mar 06, 2012 5:18 am

Re: Straight Shooting

Postby swiggins » Mon Mar 12, 2012 8:47 pm

bump
swiggins
 
Posts: 3
Joined: Tue Mar 06, 2012 5:18 am

Re: Straight Shooting

Postby Primadawn » Tue Mar 13, 2012 3:22 am

Don't create the MoveModifier, the body moves when you set its velocity and the PhysicsConnector moves the sprite accordingly.
If you want to shoot it in a straight line that will no be effected by gravity, you can try and use a kinematic body for the projectile.
Primadawn
 
Posts: 414
Joined: Fri Sep 23, 2011 3:28 am

Re: Straight Shooting

Postby swiggins » Tue Mar 13, 2012 7:42 pm

I recently put in that MoveModifier. When it was just setVelocity, I still couldn't figure out how to shoot the projectile in the direction the control stick was pointing.
swiggins
 
Posts: 3
Joined: Tue Mar 06, 2012 5:18 am

Re: Straight Shooting

Postby salami » Tue Mar 13, 2012 8:10 pm

I guess you could do something like this:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. Vector2 normal = Vector2Pool.obtain(pValueX, pValueY);
  2. normal.nor();
  3. bullet.setVelocity(normal.x * BULLET_VELOCITY, normal.y * BULLET_VELOCITY);
  4. Vector2Pool.recycle(normal);
  5.  
Parsed in 0.031 seconds, using GeSHi 1.0.8.4
salami
 
Posts: 57
Joined: Wed May 11, 2011 3:22 pm


Return to GLES1

Who is online

Users browsing this forum: Yahoo [Bot] and 22 guests