昨天我问了一个关于Android图形的问题,现在我已经启动并运行了基础,我在自定义视图类中创建了一个渲染循环。
protected void render() {
long startTime = System.nanoTime();
long elapsedTime;
while (Main.running) {
Bitmap image = Bitmap.createBitmap(Main.WIDTH, Main.HEIGHT, null); //creates new Bitmap to draw onto
Canvas canvas = new Canvas(image); //new Canvas with the attached blank Bitmap
long newTime = System.nanoTime();
elapsedTime = newTime - startTime;
if (elapsedTime >= 1000000000/60) { //if enough time has passed for it to update
startTime = newTime;
Main.player.render(canvas); //this renders a test object, see below
}
display = Bitmap.createBitmap(image); //this writes to the display Bitmap that is drawn in onDraw, see below
invalidate(); //invoke onDraw()
}
}
以下是绘制我的播放器图像的代码(如果我绘制一次而不是循环播放,它会起作用。)
public void render(Canvas c) {
int xp = (int) x;
int yp = (int) y;
c.drawBitmap(Images.box, xp, yp, null);
}
在onDraw内部:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(display, 0, 0, null);
}
如果我只渲染播放器并调用invalidate()
一次,而不是多次循环播放,则显示正常(和花花公子)。但是,当我把它放在循环块中时,它不会渲染。
根据我的日志记录,循环功能正常并调用invalidate()
,但它在循环期间实际上从未进入onDraw
方法。
如果有人能够解释为什么会发生这种情况会非常盛大,如果您需要更多信息,请告诉我,我会提供。
修改 在我的主Activity类中,我有一个游戏逻辑线程,然后在启动逻辑线程后进入主线程的渲染循环。
Thread update = new Thread() { //game logic thread
public void run() {
loop(); //game logic loop
}
};
update.start(); //start logic thread
surface.render(); //start render loop (surface is the name of my custom view)
我尝试使用我的主线程创建一个单独的线程来渲染和进入游戏循环,但是仍然无效。