Shift bufferedimage 1行或列

时间:2014-09-22 20:41:40

标签: java bufferedimage

很抱歉,如果有人问过这个答案。我想弄清楚这是否可能。我试图让我的游戏的drawMap方法更有效率。

它通过一个循环并以通常的方式将每个tile绘制到bufferedImage。下面简化了代码以显示逻辑。

for (int x = 0; x < xTiles; x++){
    for (int y = 0; y < yTiles; y++){
        //10 x 10 map
        SpriteStore.get().getSprite("res/images/tiles/" + groundLayer[count] + ".png");
    }
}

每次玩家走路(North || NorthEast || NorthWest || East || South || SouthEast || SouthWest || West)我都会重新绘制完整的地图。

例如,在北移动期间,是否可以将整个图像“向下移动”一行(丢弃底行,10列宽)并简单地刷新顶行?这是否可能而不必遍历整个集合 - 这可能会破坏目的(避免迭代整个地图)?我不确定我是不是被烧坏了,或者是什么,但我很难想出这个逻辑。

非常感谢您阅读此内容以及您的智慧!!

2 个答案:

答案 0 :(得分:1)

我会在两个缓冲区之间交替使用:

draw oldImg to newImg at appropriate offset
draw remaining new data to newImg
draw newImg to screen
swap oldImg and newImg (temp=new;new=old;old=temp)

你可以在每一帧创建一个新图像,但这可能会比你想要的更多地压缩你的垃圾收集器。

答案 1 :(得分:1)

改进MadProgrammer的评论:

您可以使用Graphics.drawImage执行您想要的操作 - 将(x,y)设置为负值以向左/向上移动或向右移动向右/向下移动。然后你只需绘制“新”区域。

而且,如果你还没有,zebediah49关于重新使用一对缓冲图像而不是每帧创建一个新图像的建议将是一个巨大的推动。