可以移动平铺背景吗?(使用TileMode.REPEAT进行无限滚动)

Nul*_*ion 7 android bitmap tile infinite-scroll android-bitmap

我正在开发一款游戏

首先我的游戏将非常简单,所以我宁愿不使用库或opengl或canvas,我宁愿用简单的图像视图或普通视图来实现这一点,或者至少以最简单的方式实现.例如,使用android位图平铺模式:

public static void setBackground(Bitmap bmp, ViewGroup layout){
    BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
    bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    layout.setBackgroundDrawable(bitmapDrawable);
}
Run Code Online (Sandbox Code Playgroud)

我想开发一个简单的2D/3D混合太空飞船游戏.屏幕将是太空飞船驾驶舱的视野,你将移动宇宙飞船触摸我已经完成的操纵杆.所以背景将是一个宇宙背景,我的意思是一个巨大的黑色图像与星星,这个图像必须移动到所有方向,操纵杆模拟太空船正在改变它的方向,当你向右移动很多时,例如,背景图像必须从头开始模拟太空船仍在向右移动而没有任何限制

正如我所提到的,我现在有了操纵杆,我知道如何使用操纵杆移动图像视图,问题是我不知道如何正确地创建带有图块的无限图像视图,因为当我移动包含图块的图像时可以移动然后图像从屏幕上消失.

这是使用无限背景的图像示例:

在此输入图像描述

Nic*_*Dev 0

我遇到了类似的问题,并找到了一个仅使用 XML 的解决方案。在高度为 50000dp 的垂直 ScrollView 中,我的平铺背景图像会根据需要重复填充此高度。因此,滚动将产生所需的星星飞过的效果(以您的图像为例)。

  • 使用ScrollView,它的背景并不重要。高度设置为wrap_content.
  • 在这个 ScrollView 内部,放置另一个布局(我碰巧有一个 ConstraintLayout)。这才是最重要的背景。高度设置为wrap_content. 将其背景设置为:android:background="@drawable/repeating_background"
  • 使用以下代码创建一个名为Repeating_background.xml的新可绘制对象:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/stars_image"
    android:tileModeY="repeat"
    />
Run Code Online (Sandbox Code Playgroud)
  • wheretileModeY="repeat"使star_image(png、jpeg 等)仅垂直重复。您可能会想要使用它tileMode="repeat",因为它可以处理 X 和 Y。tileMode="mirror"您可以探索它,因为它会反映图像,以便在背景颜色发生变化时消除任何接缝的外观。

就是这样!如果您将相同的背景设置为 ScrollView 本身,那么它只会平铺您的图像,但在 ScrollView 的内容滚动时,平铺的背景将保持静态。