java - 在 x 和 y 方向重复时设置 BitmapDrawable 的偏移量?

标签 java android android-bitmap bitmapdrawable

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

// 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 导致背景不随平台移动,使其看起来非常奇怪。

提前致谢!

最佳答案

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

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

抱歉,我只能向您展示想法,而没有具体的代码,因为我过去没有在这样的项目中工作的经验。希望它能尽可能地帮助您。

关于java - 在 x 和 y 方向重复时设置 BitmapDrawable 的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077726/

相关文章:

java - 在 Android Studio 中使用 Gradle 风格

android - 将捕获的图像从相机保存到自定义文件夹 react native

android - ListAdapter 和后台线程

android - 无法在外部存储上保存文件,即使有用户权限 [Android]

java - 有没有一种方法可以在 Java 中更改具有相同字符的多个字符串?

java - 无法捕获 Spring MVC 中的 org.hibernate.util.JDBCExceptionReporter 异常

java - 如何使用 java 安全地验证服务器套接字?

java - 通过 Java 实现 Spinner 的右对齐(不通过 XML)

java - Apache Commons - CircularFifoBuffer BufferOverflowException