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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en