2011-07-28 21 views
5

Neden herkesin benim sprite'lardan birinde çalıştığını biliyor mu? Ayrıca diğer sprite'lara bastığımda, aynı zamanda tek tek hareketli grafiğe de kuvvet uygular. NextTile yöntemi iyi çalışıyor. Paket com.martynnorman.jude;andengine zorla uygular

enter code here;

/** * @author Nicolas Gramlich * @since 11:54:51 - 03.04.2010 */ public class MainActivity BaseGameActivity IOnAreaTouchListener { // uygular uzatır ========= ================================================== // Sabitler // ============================ ================

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


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

private Camera mCamera; 

private BitmapTextureAtlas mBitmapTextureAtlas; 
private TiledTextureRegion mFaceTextureRegion; 
private BitmapTextureAtlas mBitmapTextureAtlas2; 
private TiledTextureRegion mFaceTextureRegion2; 
Random random = new Random(); 
Ball sprite; 
int scale; 
Scene scene; 
private BitmapTextureAtlas mFontTexture; 
private Font mFont; 
Text textcenter; 
int t = 1; 
Ball rgSprite[] = new Ball[10]; 
private PhysicsWorld mPhysicsWorld; 
Body body; 
int isTouched; 
final Vector2 gravity2 = new Vector2(0, 20); 
final Vector2 gravity = new Vector2(0, 0); 

özel statik son FixtureDef FIXTURE_DEF = PhysicsFactory.createFixtureDef (1, 0.5f, 0.5f);

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

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

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

@Override 
public Engine onLoadEngine() { 
    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(64, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
    this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "gfx/ball.png", 0, 0, 2, 1); 
    this.mBitmapTextureAtlas2 = new BitmapTextureAtlas(64, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
    this.mFaceTextureRegion2 = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas2, this,"gfx/ball2.png", 0, 0, 2, 1); 
    this.mFontTexture = new BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
    this.mFont = new Font(this.mFontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.BLACK); 
    this.mEngine.getTextureManager().loadTextures(this.mBitmapTextureAtlas, mBitmapTextureAtlas2); 
    this.mEngine.getFontManager().loadFont(this.mFont); 
    this.mEngine.getTextureManager().loadTexture(this.mFontTexture); 


} 

@Override 
public Scene onLoadScene() { 

    createAETimeHandler(2); 
    /* final Text textcenter = new Text(100, 60, this.mFont, "touched", HorizontalAlign.CENTER); 
     this.mFontTexture = new BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
     this.mFont = new Font(this.mFontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.BLACK);*/ 
    final Scene scene = new Scene(); 
    scene.setOnAreaTouchListener(this); 
    scene.setBackground(new ColorBackground(0.6274f, 0.6274f, 0.8784f)); 





    mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); 
    scene.registerUpdateHandler(mPhysicsWorld); 
    mPhysicsWorld.setGravity(gravity); 

    final Shape ground = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2); 
    final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f); 
    PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground, BodyType.StaticBody, wallFixtureDef); 
    scene.attachChild(ground); 

    final Shape left = new Rectangle(0, 0, 2, CAMERA_HEIGHT); 
    final Shape right = new Rectangle(CAMERA_WIDTH - 2, 0, 2, CAMERA_HEIGHT); 
    final Shape roof = new Rectangle(0, 0, CAMERA_WIDTH, 2); 
    PhysicsFactory.createBoxBody(this.mPhysicsWorld, left, BodyType.StaticBody, wallFixtureDef); 
    PhysicsFactory.createBoxBody(this.mPhysicsWorld, right, BodyType.StaticBody, wallFixtureDef); 
    PhysicsFactory.createBoxBody(this.mPhysicsWorld, roof, BodyType.StaticBody, wallFixtureDef); 
    scene.attachChild(left); 
    scene.attachChild(right); 
    scene.attachChild(roof); 


    // scene.setOnSceneTouchListener((IOnSceneTouchListener) this); 
    //final Ball hit = new Ball(random.nextInt(600)+1, random.nextInt(400)+1, this.mFaceTextureRegion.clone()); 
    //final Ball hit2 = new Ball(random.nextInt(600)+1, random.nextInt(400)+1, this.mFaceTextureRegion2.clone()); 
    //body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, hit2, BodyType.DynamicBody, FIXTURE_DEF); 
    //scene.attachChild(hit2); 
    //hit2.setScale(2); 
    //scene.registerTouchArea(hit2); 
    //this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(hit2, body, true, true)); 

     for (int i = 0; i < rgSprite.length; i++) { 


       rgSprite[i] = new Ball(random.nextInt(600)+1, 200, this.mFaceTextureRegion.clone()); 

        } 


     mPhysicsWorld.setGravity(gravity2); 

     for (Ball sprite : rgSprite) { 


      body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, sprite, BodyType.DynamicBody, FIXTURE_DEF); 
      this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true)); 
      scene.registerTouchArea(sprite); 
      scene.attachChild(sprite); 
      sprite.setScale(2); 
     } 

     //scene.attachChild(hit); 
     //hit.setScale(2); 
     //scene.registerTouchArea(hit); 





    return scene; 


} 
@Override 
public void onLoadComplete() { 

} 
private void createAETimeHandler(float mEffectSpawnDelay) 
{ TimerHandler spriteTimerHandler2; 
    this.getEngine().registerUpdateHandler(spriteTimerHandler2 = new TimerHandler(mEffectSpawnDelay, true, new ITimerCallback() 
    {      
     @Override 
     public void onTimePassed(final TimerHandler pTimerHandler) 
     {  

      /*if (isTouched == 1){ 


       mFaceTextureRegion.setCurrentTileIndex(0); 
       isTouched = 2; 



      } */   

     } 
    })); 
} 



// =========================================================== 
// Methods 
// =========================================================== 

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




@Override 
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, ITouchArea pTouchArea, float pTouchAreaLocalX,float pTouchAreaLocalY) { 
    if(this.mPhysicsWorld != null) { 

     if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) {   
      this.onOff((AnimatedSprite)pTouchArea); 

       } 
     } return false; 
}  
private void onOff(final AnimatedSprite ball) { 
    ball.nextTile(); 
    body.applyForce(new Vector2(200,-1500), new Vector2(body.getWorldCenter())); 
} 

}

cevap

2

Size sadece bir Body -Değişken var çünkü, ve döngü tarafından yazılır alır. Tüm spritelar oluşturulduğunda, sadece son sprite vücudunu bilirsiniz.

Kuvveti, tıkladığınız hareketli grafikle ilişkili gövdeye uygulamanız gerekir.

+0

Evet. Özel Hashtable ballBodies = new Hashtable (); –