libgdx实例分析小记(一)

 

SuperJumper
public class SuperJumperAndroid extends AndroidApplication {
 /** Called when the activity is first created. */
 @Override
 public void onCreate (Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  initialize(new SuperJumper(), false);
 }
}

public class SuperJumper extends Game {
 boolean firstTimeCreate = true;

 @Override
 public Screen getStartScreen () {
  return new MainMenuScreen(this);
 }

 @Override
 public void create () {
  Settings.load();
  Assets.load();
  super.create();
 }
}

public abstract class Game implements ApplicationListener
Game还是个ApplicationListener  多了一个方法
 public abstract Screen getStartScreen ();

并且把逻辑规范化
 @Override
 public void render () {
  screen.update(Gdx.graphics.getDeltaTime());  //处理逻辑部分
  screen.present(Gdx.graphics.getDeltaTime()); //处理渲染部分
 }

MainMenuScreen启动画面,逻辑
 @Override
 public void update (float deltaTime) {
  if (Gdx.input.justTouched()) {   //点击
   guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));

   if (OverlapTester.pointInRectangle(playBounds, touchPoint.x, touchPoint.y)) {
    Assets.playSound(Assets.clickSound);  //点击的音效
    game.setScreen(new GameScreen(game));  //跳转
    return;
   }
   if (OverlapTester.pointInRectangle(highscoresBounds, touchPoint.x, touchPoint.y)) {
    Assets.playSound(Assets.clickSound);
    game.setScreen(new HighscoresScreen(game));
    return;
   }
   if (OverlapTester.pointInRectangle(helpBounds, touchPoint.x, touchPoint.y)) {
    Assets.playSound(Assets.clickSound);
    game.setScreen(new HelpScreen(game));
    return;
   }
   if (OverlapTester.pointInRectangle(soundBounds, touchPoint.x, touchPoint.y)) {
    Assets.playSound(Assets.clickSound);
    Settings.soundEnabled = !Settings.soundEnabled;
    if (Settings.soundEnabled)
     Assets.music.play();
    else
     Assets.music.pause();
   }
  }
 }

 public MainMenuScreen (Game game) {
  super(game);
  guiCam = new OrthographicCamera(320, 480);   //正交投影,投影的大小320 480
  guiCam.position.set(320 / 2, 480 / 2, 0);    //观察点坐标,正中间的位置
  batcher = new SpriteBatch();
  soundBounds = new Rectangle(0, 0, 64, 64);  //声音按钮的位置在左下角
  playBounds = new Rectangle(160 - 150, 200 + 18, 300, 36); 
  highscoresBounds = new Rectangle(160 - 150, 200 - 18, 300, 36); //高分按钮的位置
  helpBounds = new Rectangle(160 - 150, 200 - 18 - 36, 300, 36); //帮助按钮的位置
  touchPoint = new Vector3();
 }

//渲染
 @Override
 public void present (float deltaTime) {
  GLCommon gl = Gdx.gl;
  gl.glClearColor(1, 0, 0, 1);
  gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  guiCam.update();
  batcher.setProjectionMatrix(guiCam.combined);

  batcher.disableBlending();
  batcher.begin();
  batcher.draw(Assets.backgroundRegion, 0, 0, 320, 480);  //画背景
  batcher.end();

  batcher.enableBlending();
  batcher.begin();
  batcher.draw(Assets.logo, 160 - 274 / 2, 480 - 10 - 142, 274, 142); //绘制logo
  batcher.draw(Assets.mainMenu, 10, (int)(200 - 110 / 2), 300, 110);  //绘制主菜单
  batcher.draw(Settings.soundEnabled ? Assets.soundOn : Assets.soundOff, 0, 0, 64, 64);
  batcher.end();
 }


OverlapTester检测是否在范围内
public class OverlapTester {
 public static boolean overlapRectangles (Rectangle r1, Rectangle r2) {
  if (r1.x < r2.x + r2.width && r1.x + r1.width > r2.x && r1.y < r2.y + r2.height && r1.y + r1.height > r2.y)
   return true;
  else
   return false;
 }

 public static boolean pointInRectangle (Rectangle r, Vector2 p) {
  return r.x <= p.x && r.x + r.width >= p.x && r.y <= p.y && r.y + r.height >= p.y;
 }

 public static boolean pointInRectangle (Rectangle r, float x, float y) {
  return r.x <= x && r.x + r.width >= x && r.y <= y && r.y + r.height >= y;
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值