【发布时间】:2013-05-21 03:46:07
【问题描述】:
我正在用 Java 制作一个(目前相当简单的)自上而下的 2D 游戏,但在实现缩放时遇到了麻烦。
似乎我可以缩放的唯一方法是减小宽度和高度,并将倍增的版本提供给 setPreferredSize()。我想改用 AffineTransform 在渲染时缩放我的 Graphics2D,但包含 g2d.setTransform(transformer); 行会使所有内容都呈现为空图块。
没有: 和:
我还尝试将我的类处理平铺/精灵渲染乘以/除以宽度和高度的值,得到完全相同的结果。有什么想法吗?
这是我的渲染方法:
bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3); // woo, triple buffering!
return;
}
transformer.scale(scale, scale);
// other stuff here . . .
// draw screen.pixels to pixels
for (int i = 0; i < pixels.length; i++) {
pixels[i] = screen.pixels[i];
}
// draw
g2d = (Graphics2D)bs.getDrawGraphics();
g2d.setTransform(transformer);
{
g2d.drawImage(image, 0, 0, width, height, null);
/* g.setColor(Color.WHITE);
* g.setFont(new Font("Veranda", 0, 50));
* g.drawString("B: " + Mouse.b(), 80, 80);
*/
}
g2d.dispose();
bs.show(); // blit/show buffer
Toolkit.getDefaultToolkit().sync();
我使用的是 Eclipse IDE,并且在 Java1.6 上没有预制游戏引擎。我正在渲染到 JFrame 中的画布上。
【问题讨论】:
-
我记得,缩放转换也会缩放位置点
-
有没有不这样做的标准化缩放方法?还是我需要手动检查并反击每个?
-
别想了,不。您可以尝试使用
AffineTransformation#setToTranslation翻译图形原件 -
setToTranslation 停止它显示空白图块,但它的功能是沿翻译值(偏移所有内容)。查看 AffineTransformation api 页面以获得更合适的功能。
-
使用 setToScale 似乎证明你对缩放位置点的看法是正确的——当我在游戏中调整缩放因子时,我可以看到一切都向右移动。
标签: java zooming transform render 2d-games