Hi,

Yesterday, I've changed my code, to work with the matrix more
effectively...

My GameEntity class now looks like this:

----------GAME ENTITY----------

public class GameEntity {
        public Bitmap mBitmap;
        private Rect mBounds;
        private Matrix mMatrix;
        public int mWidth;
        public int mHeight;
        public boolean mAlive;
        public float mX, mY;
        public float mVelocityX, mVelocityY;
        public float mMoveAngle, mFaceAngle;
        public float mRotationVelocity;

        public GameEntity(Bitmap bitmap) {
                mBitmap = bitmap;
                mBounds = new Rect();
                mMatrix = new Matrix();
                mWidth = bitmap.getWidth();
                mHeight = bitmap.getHeight();
                mAlive = false;
                mX = 0.0f;
                mY = 0.0f;
                mVelocityX = 0.0f;
                mVelocityY = 0.0f;
                mMoveAngle = 0.0f;
                mFaceAngle = 0.0f;
                mRotationVelocity = 0.0f;
        }

        public void draw(Canvas canvas, float angle) {
                Matrix m = mMatrix;
                m.reset();
                m.postTranslate(mX - mWidth / 2, mY - mHeight / 2);
                m.postRotate(angle, mX, mY);
                canvas.drawBitmap(mBitmap, m, null);
        }

         public Rect getBounds() {
                mBounds.left = (int)(mX - mWidth / 2);
                mBounds.top = (int)(mY - mHeight / 2);
                mBounds.right = (int)(mX + mWidth / 2);
                mBounds.bottom = (int)(mY + mHeight / 2);
                return mBounds;
        }
}

And "draw" methods in GameView class:

----------GAME VIEW----------

private void drawSpaceship(Canvas canvas) {
        mSpaceship.draw(canvas, mSpaceship.mFaceAngle);
}

private void drawAsteroids(Canvas canvas) {
        GameEntity[] asteroids = mAsteroids;
        GameEntity asteroid;
        for(int i = 0; i < MAX_ASTEROIDS; i++) {
                asteroid = asteroids[i];
                if(asteroid.mAlive) {
                        asteroid.draw(canvas, asteroid.mMoveAngle);
                }
        }
}

private void drawBullets(Canvas canvas) {
        GameEntity[] bullets = mBullets;
        GameEntity bullet;
        for(int i = 0; i < MAX_BULLETS; i++) {
                bullet = bullets[i];
                if(bullet.mAlive) {
                        bullet.draw(canvas, bullet.mMoveAngle + 90);
                }
        }
}

This gives me an extra 4-5 FPS, and now I have ~25 FPS.
It worth to mention, that I run my app on emulator, and currently have
not tested it on real device.

I decide to go little further with testing and commented out
m.postTranslate() method call, and got +4 FPS, after that I commented
out m.postRotate(), and got +12-15 FPS, it seems that rotation (with
pivot points) is very costly...

Best Regards, Andre
-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to