0

我正在制作一个 2D 平台游戏。我已经为平台创建了一个纹理,这意味着可以一遍又一遍地重复以填充整个平台,而不会重复。我的第一次尝试是手动从位图中绘制所有像素,但这会导致在移动平台时背景闪烁(移动和绘制线程是分开的,因此移动可以以特定速度运行,而 FPS 则不会) t需要受苦)。我发现这种技术效果更好:

// Init
bitmap = new BitmapDrawable(res, Texture.PLATFORM.getBitmap());
bitmap.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

// Drawing loop
int x = getX() + (isStill() ? 0 : (int)MainActivity.offsetX);
int y = getY() + (isStill() ? 0 : (int)MainActivity.offsetY);

bitmap.setBounds(x, y, x + getWidth(), y + getHeight());
bitmap.draw(canvas);

但是,当平台充当“视孔”以透视位图时,位图似乎保持静止。我能想到的唯一解决方法是以某种方式“偏移”静态位图:

bitmap.offset(x, y);

显然,这不是一个函数。在浏览文档时,我找不到可以做我想做的事。

为了召唤东西,BitmapDrawable 导致背景不随平台移动,使它看起来超级怪异。

提前致谢!

4

1 回答 1

0

在您的代码中尝试这些提示:(我假设游戏在水平方向上向前移动)

  1. GUY只能上下移动(使用适当的触摸输入)而不是向前和向后移动,因为您希望焦点(或相机)仅在 GUY 上。我注意到当 GUY 移动时,墙在您的视频中向上移动从墙壁最初的较高位置到后来稍微较低的位置,纠正这一点,因为GUY应该向下移动(尝试实现重力效果)。
  2. 应该只向前(大部分)和向后(我猜不太常见)。墙不应该正常上下移动。不要对其应用重力效果。您可以为一个屏幕创建至少 2BitmapDrawable个 WALL 实例。它们将按顺序重复使用(例如:如果第一个完全超出屏幕,则使用setBounds()方法将其重新显示在所需位置)并在整个游戏中对其他人继续相同。
  3. 当前的蓝色背景,如果是较大地图的一部分,则需要适当偏移。
  4. 在撰写本文时,我能想到的障碍之一是将墙向下移动,直到它离开屏幕,这会导致 GUY 死亡。
  5. 在那些我使用了move这个词的地方,您需要使用该setBounds(a, b, c, d)方法进行必要的基于位置的更改,因为我没有找到其他方法来更新BitmapDrawable实例的位置。我认为,您需要使用像 libGdx 这样的游戏框架来获得类似setOffset(x, y)或类似类型的豪华方法。

抱歉,我只能在没有特定代码的情况下向您展示这些想法,因为我过去没有在这样的项目中工作的经验。希望,它无论如何都可以帮助你。

于 2020-05-29T07:03:40.187 回答