(libgdx小结)背景移动(1)
来源:互联网 发布:at指令集 单片机 编辑:程序博客网 时间:2024/05/16 09:43
滚屏原理
其实滚屏的原理很简单,我们所玩的雷电类游戏,简单的游戏使用1张游戏背景,比较复杂的游戏,就需要使用多张游戏背景,当然也可以使用比较长的游戏背景图片,但是他们的原理是相同的。我们拿本次的例子作为实验讲解。
(1)首先,将第一张背景图片底部平铺到整个屏幕(可以仅是X周铺满,不必缩放)。
(2)其次,将第二章背景图片的底部,紧接在第一张图片上面。
(3)如果直接连接不和谐,可以适当的加点像素(如:+ 111)。
(4)当第一张背景图片的Y坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的Y坐标设置到第二张图片的上方。
(5)最后,当第二张背景图片的Y坐标超出屏幕并且超出长度和自己高度等高,那么这是立即将该图片的Y坐标设置到第一张图片的上方。
(6)当然了,我们要使用的背景图片,必须要可以无缝的衔接,否则会影响用户体验。我们使用的2张图片就是无缝连接的,为了方便大家区分,这里i我的2个图片都标记了号码。
二、应用举例
MyGame
package com.example.groupactiontest;import com.badlogic.gdx.Game;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.audio.Music;public class MyGame extends Game {Music music;StartScreen startScreen;GameScreen gameScreen;@Overridepublic void create() {startScreen = new StartScreen(this);gameScreen = new GameScreen(this);music = Gdx.audio.newMusic(Gdx.files.internal("plane.ogg"));music.play();music.setLooping(true);music.setVolume(15f);this.setScreen(startScreen);}}
StartScreen
package com.example.groupactiontest;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.Screen;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.scenes.scene2d.InputEvent;import com.badlogic.gdx.scenes.scene2d.InputListener;import com.badlogic.gdx.scenes.scene2d.Stage;import com.badlogic.gdx.scenes.scene2d.ui.Image;public class StartScreen implements Screen {MyGame game; Image logoImage; Image bgImage; Stage stage; public StartScreen(MyGame game) {this.game = game;}@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic void hide() {// TODO Auto-generated method stub}@Overridepublic void pause() {// TODO Auto-generated method stub}@Overridepublic void render(float arg0) {Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);stage.act();stage.draw();}@Overridepublic void resize(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void resume() {// TODO Auto-generated method stub}@Overridepublic void show() {stage = new Stage();Texture logoTexture = new Texture(Gdx.files.internal("logo.png")); Texture bgTexture = new Texture(Gdx.files.internal("background.png")); logoImage = new Image(logoTexture); logoImage.setPosition(240-(logoTexture.getWidth()/2), 400); bgImage = new Image(bgTexture); bgImage.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); logoImage.addListener(new InputListener(){ @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { game.setScreen(game.gameScreen); stage.clear(); return true; } }); stage.addActor(bgImage); stage.addActor(logoImage); Gdx.input.setInputProcessor(stage); }}
GameScreen
package com.example.groupactiontest;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.Screen;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.SpriteBatch;import com.badlogic.gdx.graphics.g2d.TextureRegion;public class GameScreen implements Screen {MyGame game;//以下变量用来处理背景移动逻辑Texture bgTexture1;Texture bgTexture2;TextureRegion bgTextureRegion1;TextureRegion bgTextureRegion2;SpriteBatch batch;float bg1x,bg1y,bg2x,bg2y;//以下逻辑用来处理飞机移动逻辑float beginTouchedX,beginTouchedY,endTouchedX,endTouchedY;Texture planeTexture;float touchedX,touchedY;public GameScreen(MyGame game) {this.game = game;}@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic void hide() {// TODO Auto-generated method stub}@Overridepublic void pause() {// TODO Auto-generated method stub}@Overridepublic void render(float arg0) {Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);logic();touch();batch.begin();//其实这个时候bg1x和bg2x一直都为0batch.draw(bgTextureRegion1, bg1x, bg1y, 480, 852);batch.draw(bgTextureRegion2, bg2x, bg2y, 480, 852);batch.draw(planeTexture, 120 + touchedX, touchedY,120,120);//touchedX之所以要加120是为了矫正位置//batch.draw(planeTexture, beginTouchedX, beginTouchedY,120,120);batch.end();}@Overridepublic void resize(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void resume() {// TODO Auto-generated method stub}@Overridepublic void show() {batch = new SpriteBatch();bgTexture1 = new Texture(Gdx.files.internal("background1.png"));bgTexture2 = new Texture(Gdx.files.internal("background2.png"));bgTextureRegion1 = new TextureRegion(bgTexture1,0,0,480,852);bgTextureRegion2 = new TextureRegion(bgTexture2,0,0,480,852); bg1x = bg2x = 0;bg1y = 0;bg2y = bg1y + bgTextureRegion1.getRegionHeight();planeTexture = new Texture(Gdx.files.internal("plane.png"));}/** * 背景移动 */public void logic(){bg1y -= 3;bg2y -= 3;float RH1 = bgTextureRegion1.getRegionHeight();float RH2 = bgTextureRegion2.getRegionHeight();if(bg1y < -RH1){bg1y = bg2y + bgTextureRegion2.getRegionHeight();}if(bg2y < -RH2){bg2y = bg1y + bgTextureRegion1.getRegionHeight();}}/** * 移动飞机 */public void touch(){if(Gdx.input.justTouched()){beginTouchedX = Gdx.input.getX(0);beginTouchedY = Gdx.input.getY(0);}if(Gdx.input.isTouched()){endTouchedX = Gdx.input.getX(0);endTouchedY = Gdx.input.getY(0);}touchedX = endTouchedX - beginTouchedX;touchedY = -(endTouchedY - beginTouchedY);//这里要取反。否则上下划的时候运动会相反}}
三、效果图
四、源码下载
http://download.csdn.net/detail/caihongshijie6/7010971
0 0
- (libgdx小结)背景移动(1)
- (libgdx小结)图形绘制
- (libgdx小结)自定义动画
- (libgdx小结)游戏地图
- (libgdx小结)碰撞检测
- (libgdx小结)粒子编辑器
- (libgdx小结)照相机
- (libgdx小结)游戏摇杆
- (libgdx小结)游戏对话框
- 知识点小结(一)--libgdx
- LibGdx--PrismaticJoint移动关节
- libgdx 控件的移动
- (libgdx小结)切换游戏界面
- (libgdx小结)资源加载器
- libgdx的移动和旋转
- (libgdx小结)字体的绘制(特别是中文字体)
- (libgdx小结)常见UI的使用
- (libgdx小结)演员类的使用
- D3D的D3DPRESENT_PARAMETERS参数介绍
- 嵌入式Linux和WinCE应用线程时间片分析比较
- java中的Math
- 黑马程序员-java反射笔记
- 问题集
- (libgdx小结)背景移动(1)
- 在Mac OS X中配置Apache+php
- Android--JAVA.FILE
- file结构体
- childNodes属性使用
- 算法学习之博弈论(一)
- K-SVD简述——字典学习,稀疏编码
- <<OCM实验选讲>> 第三课 网络配置 实验
- HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴士博弈)