我想在Android上写一个小游戏,因为我有很好的Java实验,我先用Java编写它。现在我想移植游戏,但不幸的是Android库不支持" AffineTransform"或" Graphics2d"。 我知道可以使用canvas完成旋转,但我还没有设法显示图像。 我遇到的问题是从不调用onDraw方法。下面是我在Java中使用并希望移植到Android的示例代码。
public void drawEdge(Edge edge, Graphics g){
.... computation Stuff
Graphics2D g2d = (Graphics2D) g;
AffineTransform att = new AffineTransform();
att.translate(posX,posY);
att.rotate(rotAngle);
g2d.drawImage(lineImage, att, null);
}
所以在Android中我尝试了这个:
public void drawEdge(Edge edge, Graphics g){
.... computation Stuff
Paint mPaint = new Paint();
canvas.drawLine(200, 200, 400, 400, mPaint); // Just a simple line not the edge yet
}
但这不起作用。我也尝试创建onDraw方法,但似乎从未调用过。此外,我无法将limeImage加载为位图。我用过:
Assets.lineBitmap = BitmapFactory.decodeFile("LineImage.png");
并获取massege:无法解码流:java.io.FileNotFoundException。但是使用:
Assets.lineImage = g.newImage("Line_height6.png", ImageFormat.RGB565);
工作正常。
我知道有很多关于画布用法的教程,但我仍然无法弄清楚代码有什么问题,所以如果有任何人对我有任何线索,我会非常感激。< / p>
最佳Sergej
答案 0 :(得分:0)
好吧我设法在上面的代码中绘制了一行,问题是我的itmap文件不是improter:解决了
FileIO fileIO = game.getFileIO();
InputStream in = null;
Bitmap bitmap;
try {
in = fileIO.readAsset("Line_height6.png");
bitmap = BitmapFactory.decodeStream(in);
}
catch(IOException e) {
throw new RuntimeException("Couldn't load texture '" + "Line_height6.png", e);}
所以我现在所做的就是使用游戏开头创建的画布。然后我可以划清界限。到现在为止还挺好。但是如果我想旋转位图,那么背景也会旋转。我尝试解决方案是使用位图创建一个新画布:
Bitmap bmp = lineBitmap;
Bitmap mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true);
Canvas newcanvas = new Canvas(mutableBitmap);
newcanvas.rotate((float) theta);
newcanvas.drawBitmap(mutableBitmap, matrix, paint2);
但我现在没有新的图片或错误。背景在那里,以及我在原始画布上绘制的一些其他图像,但我无法显示旋转位图。 有什么建议吗?