level 10
缄默no
楼主
作者:缄默no(Silen)
不允许转载
0
0
一般小游戏的背景都是通过一张背景图片然后不断一张draw在一张的后面,网上说背景必须大于屏幕,其实没必要
你需要了解下camera的用法
0
以下文字来自:奋斗的小土豆
(1)首先,将第一张背景图片底部平铺到整个屏幕(可以仅是X周铺满,不必缩放)。
(2)其次,将第二章背景图片的底部,紧接在第一张图片上面。
(3)如果直接连接不和谐,可以适当的加点像素(如:+ 111)。
(4)当第一张背景图片的X坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的Y坐标设置到第二张图片的上方。
(5)最后,当第二张背景图片的X坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的X坐标设置到第一张图片的上方。
0
(其实我是不想打字)
从土豆的话可以看出怎么实现背景轮换
代码实现(我实现的是X轴)
首先定义以下内容
SpriteBatch batch;//绘图用的batch
float position=0;用来记录背景的X轴位置
纹理
TextureRegion backRegion;
Texture backTexture;
2d的camera
OrthographicCamera camera;
在 create()方法中实例化
相机
camera = new OrthographicCamera();
camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
获得背景
backTexture = new Texture(Gdx.files.internal("back.png"));//图片为back.png
backRegion = new TextureRegion(backTexture);
实例batch
batch = new SpriteBatch();
_
_
render()代码
刷屏
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
更新相机和batch
camera.update();
batch.setProjectionMatrix(camera.combined);
以下为重点
代码块①
检查position是否超出屏幕右边
while (position + backRegion.getRegionWidth() <= camera.position.x + Gdx.graphics.getWidth() / 2)
{
position += backRegion.getRegionWidth();
}
解释下代码
position是背景图的左下角x坐标, position + backRegion.getRegionWidth()得到右下角x坐标, camera.position.x + Gdx.graphics.getWidth() / 2得到屏幕最右边的坐标,如果前者小于后者,则背景没有完全覆盖屏幕,所以加上宽度直到超过,是为了让position<=屏幕最右<=position+ backRegion.getRegionWidth()
-
-
开始绘制
batch.begin();
-
定义个float方便绘制
float temp;
temp = position;
-
绘制背景
do{
batch.draw(backRegion, temp, 1);
temp -= backRegion.getRegionWidth();
}while(temp > camera.position.x - Gdx.graphics.getWidth() / 2 - backRegion.getRegionWidth());
_
代码解释:
temp > camera.position.x - Gdx.graphics.getWidth() / 2 - backRegion.getRegionWidth()
检查最左边的背景图片是否覆盖了屏幕最左端
一直绘制背景图片知道其充满x轴
_
结束绘制
batch.end();
_
修改camera位置
camera.translate(100 * Gdx.graphics.getDeltaTime(), 0);
好,代码结束
_
_
_
最后:
我的表达能力有限,只能这样了。
优点:对背景图片的大小没有限制(除非你发癫用1x1的图片)
比较节约资源,系统只打印了屏幕能够看到的图片
总之,比AIDE那个一次性打印几十张好多了……
2014年08月13日 10点08分
1
不允许转载
0
0
一般小游戏的背景都是通过一张背景图片然后不断一张draw在一张的后面,网上说背景必须大于屏幕,其实没必要
你需要了解下camera的用法
0
以下文字来自:奋斗的小土豆
(1)首先,将第一张背景图片底部平铺到整个屏幕(可以仅是X周铺满,不必缩放)。
(2)其次,将第二章背景图片的底部,紧接在第一张图片上面。
(3)如果直接连接不和谐,可以适当的加点像素(如:+ 111)。
(4)当第一张背景图片的X坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的Y坐标设置到第二张图片的上方。
(5)最后,当第二张背景图片的X坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的X坐标设置到第一张图片的上方。
0
(其实我是不想打字)
从土豆的话可以看出怎么实现背景轮换
代码实现(我实现的是X轴)
首先定义以下内容
SpriteBatch batch;//绘图用的batch
float position=0;用来记录背景的X轴位置
纹理
TextureRegion backRegion;
Texture backTexture;
2d的camera
OrthographicCamera camera;
在 create()方法中实例化
相机
camera = new OrthographicCamera();
camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
获得背景
backTexture = new Texture(Gdx.files.internal("back.png"));//图片为back.png
backRegion = new TextureRegion(backTexture);
实例batch
batch = new SpriteBatch();
_
_
render()代码
刷屏
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
更新相机和batch
camera.update();
batch.setProjectionMatrix(camera.combined);
以下为重点
代码块①
检查position是否超出屏幕右边
while (position + backRegion.getRegionWidth() <= camera.position.x + Gdx.graphics.getWidth() / 2)
{
position += backRegion.getRegionWidth();
}
解释下代码
position是背景图的左下角x坐标, position + backRegion.getRegionWidth()得到右下角x坐标, camera.position.x + Gdx.graphics.getWidth() / 2得到屏幕最右边的坐标,如果前者小于后者,则背景没有完全覆盖屏幕,所以加上宽度直到超过,是为了让position<=屏幕最右<=position+ backRegion.getRegionWidth()
-
-
开始绘制
batch.begin();
-
定义个float方便绘制
float temp;
temp = position;
-
绘制背景
do{
batch.draw(backRegion, temp, 1);
temp -= backRegion.getRegionWidth();
}while(temp > camera.position.x - Gdx.graphics.getWidth() / 2 - backRegion.getRegionWidth());
_
代码解释:
temp > camera.position.x - Gdx.graphics.getWidth() / 2 - backRegion.getRegionWidth()
检查最左边的背景图片是否覆盖了屏幕最左端
一直绘制背景图片知道其充满x轴
_
结束绘制
batch.end();
_
修改camera位置
camera.translate(100 * Gdx.graphics.getDeltaTime(), 0);
好,代码结束
_
_
_
最后:
我的表达能力有限,只能这样了。
优点:对背景图片的大小没有限制(除非你发癫用1x1的图片)
比较节约资源,系统只打印了屏幕能够看到的图片
总之,比AIDE那个一次性打印几十张好多了……