我挣扎绘制围绕其中心旋转的位图,也没有调整的位图旋转。 我通过游戏线拉拽我所有的精灵到屏幕上,所以我在寻找结合了原有的位图,而不是在画布上的解决方案。
提前致谢。
这是到目前为止我的代码,它绕其中心位图,但调整它的大小。
i = i + 2;
transform.postRotate(i, Assets.scoresScreen_LevelStar.getWidth()/2, Assets.scoresScreen_LevelStar.getHeight()/2);
Bitmap resizedBitmap = Bitmap.createBitmap(Assets.scoresScreen_LevelStar, 0, 0, Assets.scoresScreen_LevelStar.getWidth(), Assets.scoresScreen_LevelStar.getHeight(), transform, true);
game.getGraphics().getCanvasGameScreen().drawBitmap(resizedBitmap, null, this.levelStar.getHolderPolygons().get(0), null);
更新:
我发现这并不像听起来那么容易。 我的旋转编码是没有问题的。 位图旋转,但在DST RECT也将不得不增加/减少取决于旋转的角度,否则bimap的会出现小的,因为它被拉入一个固定的DST矩形。 所以,我猜我会开发一些方法将返回一个DST矩形。 因此,需要方法将位图旋转,而不出现了调整:
public static Bitmap rotateBitmap(Bitmap bitmap, int rotation) // I've got this method working
和
public static Rect rotateRect(Rect currentDst, int rotation) // Don't got this
我明白这将需要一些数学(三角函数),任何人都做好了迎接挑战? :P
您应该借鉴使用位图Matrix
类。 下面是一个非常基本的想法假设你想在“船”类的内旋转图像。 您更新的更新方法内的当前位置矩阵。 在的onDraw()你画使用最新更新的位置矩阵位图。 这将绘制旋转位图而不调整其大小。
public class Ship extends View {
private float x, y;
private int rotation;
private Matrix position;
private Bitmap bitmap;
...
@Override
public void onDraw(Canvas canvas) {
// Draw the Bitmap using the current position
canvas.drawBitmap(bitmap, position, null);
}
public void update() {
// Generate a new matrix based off of the current rotation and x and y coordinates.
Matrix m = new Matrix();
m.postRotate(rotation, bitmap.getWidth()/2, bitmap.getHeight()/2);
m.postTranslate(x, y);
// Set the current position to the updated rotation
position.set(m);
rotation += 2;
}
....
}
希望帮助!
也请记住,生成新的Bitmap
,你的游戏循环内的对象将需要大量资源。
这为我工作!
我创建了一个返回一个矩阵的方法。 该基质可以在以下拉伸方法可以使用:
public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)
干得好! (参数形状可以轻松地更换,如果你想的是,仅仅发表评论):
public static Matrix rotateMatrix(Bitmap bitmap, Shape shape, int rotation) {
float scaleWidth = ((float) shape.getWidth()) / bitmap.getWidth();
float scaleHeight = ((float) shape.getHeight()) / bitmap.getHeight();
Matrix rotateMatrix = new Matrix();
rotateMatrix.postScale(scaleWidth, scaleHeight);
rotateMatrix.postRotate(rotation, shape.getWidth()/2, shape.getHeight()/2);
rotateMatrix.postTranslate(shape.getX(), shape.getY());
return rotateMatrix;
}
注意:如果你想要一个动画旋转,旋转参数必须与每一帧例如,新的值进行更新。 1,则2然后3 ...