gpt4 book ai didi

java - Android 翻译的 Canvas 矩形碰撞

转载 作者:行者123 更新时间:2023-12-01 11:20:22 25 4
gpt4 key购买 nike

我正在尝试开发一款类似塞尔达传说的游戏。到目前为止,我正在使用位图,一切都运行顺利。此时英雄的摄像机已固定,这意味着他可以位于屏幕上的任何位置。

问题在于缩放。支持每一种设备并保持每一个尺寸完美的矩形似乎并不那么容易:D为了防止这种情况,我需要一个移动相机。我可以将所有内容缩放到每个设备上的大小相同。第一步英雄会出现在屏幕中央。

可行的解决方案是

xCam += hero.moveX;
yCam += hero.moveY;
canvas.translate(xCam,yCam);
drawRoom();
canvas.restore();
drawHero();

我这样做是因为我不想重新排列游戏中的每个图 block 。我猜想在某些设备上这可能是太多的处理。正如我所说,这工作得很好。英雄在屏幕中央,整个房间都在动。但问题是碰撞检测。这是一个简单的例子:

wall.rect.intersects(hero.rect);

假设墙最初位于 (0/0) 并且英雄位于 (screenWitdh/2/screenHeight/2),他们应该在某个点发生碰撞。问题是,wall.rect 的 x 和 y 永远不会改变。它们在 Canvas 平移的任何点上都是 (0/0),因此它们永远不会发生碰撞。

我知道,我可以使用 canvas.getClipBounds() ,然后使用返回的矩形的坐标来更改每个图 block ,但正如我上面提到的,我试图避免这种情况加上,返回的矩形仅适用于int 值,而不是 float 。

你们知道这个问题的解决方案吗?或者有人解决过类似的问题吗?

期待您的答复!

最佳答案

您可以分离模型逻辑和 View 逻辑。假设您的 window 开发尺寸为宽x高。在这种情况下,如果模型中的 Sprite 为 100x100 并放置在 0,0,它将覆盖从 0,0 到 100, 100 的区域。让我们在 105,0(基本上稍微向右一点)添加下一个 Sprite (相同的 100x100 尺寸)第一个),覆盖面积从 105,0 到 205,100。很明显,在模型中它们没有发生碰撞。现在,对于 View ,如果您的目标设备恰好是宽x高,您只需按原样绘制模型即可。如果您的设备的屏幕 w = 2*W,h = 2*H,那么每个方向的大小都是两倍。你只需乘以 the x and y by w / W and h / H分别。因此,我们得到 x 和 y 的 2x,在屏幕上成为第一个对象 - 从 0,0 到 200, 200,第二个对象 - 从 210,0 到 410, 200。可以看出,它们仍然没有碰撞。总而言之,将游戏逻辑与绘图(渲染)逻辑分开。

关于java - Android 翻译的 Canvas 矩形碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com