当我尝试在Android上从sprite创建动画对象时,它们开始变慢
我使用下面的示例()来设置我的精灵表的动画 根据示例,我编写了我的对象:当我尝试在Android上从sprite创建动画对象时,它们开始变慢,android,animation,bitmap,sprite,Android,Animation,Bitmap,Sprite,我使用下面的示例()来设置我的精灵表的动画 根据示例,我编写了我的对象: public class Sprite { private int x, y; private int width, height; private Bitmap b; MainGamePanel ov; int currentFrame = 0; public Sprite(MainGamePanel mainGamePanel, Bitmap blob) { this.ov = mainGamePanel;
public class Sprite {
private int x, y;
private int width, height;
private Bitmap b;
MainGamePanel ov;
int currentFrame = 0;
public Sprite(MainGamePanel mainGamePanel, Bitmap blob) {
this.ov = mainGamePanel;
this.b = blob;
// 1x12
height = b.getHeight();
width = b.getWidth()/12;
x = y = 50;
}
private void update(int dist) {
currentFrame = ++currentFrame % 12;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//return _b;
}
public void draw(int shift, Canvas canvas, int dist) {
update(dist);
int srcX = currentFrame * width;
Rect src = new Rect(srcX, 0, srcX+width, height);
Rect dst = new Rect(x, y+shift, x+width, y+height+shift);
canvas.drawBitmap(b, src, dst, null);
}
这里每100毫秒我从图像(位图)中提取不同的部分并显示它
1->2->3->4->…->十二,
所以我的生物用翅膀飞翔和移动
如果我只显示1对象,看起来不错,但当我尝试在循环中运行20个生物时:
Bitmap blob = BitmapFactory.decodeResource(getResources(), R.drawable.sprite3);
for(int i=0; i<20; i++){
spriteList.add(new Sprite(this, blob));
}
....
for(int i=0; i<spriteList.size(); i++){
sprite = spriteList.get(0);
sprite.draw(canvas, dist);
}
但代码看起来很混乱
谁能帮我修一下吗
以下是sprite3图像:
[编辑]
也许我需要在单独的线程中创建每个对象?渲染时绝对不应该睡觉;这会大大降低性能,尤其是在添加新动画片段等时。此外,不要在onDraw方法中创建对象,而是尝试重用Rect对象。在渲染过程中创建对象非常昂贵。好的,我理解你关于重用
Rect
的观点,但我需要在我的精灵表上以某种方式切换,延迟100毫秒。我不睡觉怎么做?谢谢如果您想严格控制何时绘制下一帧,我建议在更新方法中输入时间,并计算是否绘制以及绘制哪一帧。规则是让渲染尽可能快,但要有选择地绘制。
int sleep = 100/spriteList.size();
Thread.sleep(sleep);