1 回答

TA贡献1877条经验 获得超6个赞
你的“hack”的另一个(但更合乎逻辑的)实现是也绘制那些稍微离屏的背景图块,并且可以在接下来的几帧出现在屏幕上:
for (Image anImage : image) {
if ((x + offset + width) >= -RENDER_MARGIN && x + offset <= (canvasWidth + RENDER_MARGIN)) {
gc.drawImage(anImage, x + offset, y, width, height);
drawn++;
} else {
segmentsSkipped++;
}
offset += width;
}
因此,常量RENDER_MARGIN定义了一个图块可以在屏幕外并仍被绘制的像素数。实际值取决于您的滚动速度。
但是,我建议GrowableDataBuffer通过使用GraphicsContext.drawImage(Image img, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh)允许您定义源区域和目标区域的方法来改进渲染逻辑以保持恒定大小,即仅绘制当前屏幕上的图像的确切区域框架。
题外话:我建议将您的背景图像分成更小的块以减少内存使用并可能提高整体渲染性能。
添加回答
举报