我正在制作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导致背景不随平台移动,从而使其看起来异常怪异。
提前致谢!
最佳答案
在您的代码中尝试以下技巧:(我假设游戏在水平方向上前进)
GUY只能上下移动(使用适当的触摸输入),而不能像只希望在GUY上聚焦(或选择摄像头)那样向前和向后移动。我注意到,当GUY移动时,WALL在视频中向上移动从墙的初始较高位置到稍后的较低位置,请纠正此问题,因为GUY应该向下移动(尝试实现重力效果)。
墙只能向前(大部分)和向后移动(我猜不太常见)。墙不应该正常上下移动。不要对其应用重力效果。您可以为一个屏幕至少创建2个实例。它们将被顺序重用(例如:如果第一个完全超出屏幕,请使用BitmapDrawable
方法将其重新显示在所需位置),并在整个游戏中继续对其他对象重复使用。
当前的蓝色背景,如果它是较大地图的一部分,则需要适当地偏移它。
在撰写本文时,我能想到的障碍之一是将WALL向下移动直至其脱离屏幕,从而导致GUY死亡。
在那些我使用过移动一词的地方,您需要使用setBounds()
方法进行必要的基于位置的更改,因为我没有找到其他方法来更新setBounds(a, b, c, d)
实例的位置。我认为,您需要使用libGdx之类的游戏框架来获取BitmapDrawable
之类的奢侈方法。
很抱歉,我只能在没有特定代码的情况下向您介绍这些想法,因为我没有在这样的项目中工作的经验。希望它能在任何情况下为您提供帮助。