Libgdx 简易汽车仪表盘

package us.eibox.gdx;

import android.os.Bundle;
import android.util.Log;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Repeat;
import com.badlogic.gdx.scenes.scene2d.actions.RotateBy;
import com.badlogic.gdx.scenes.scene2d.actors.Image;

public class MyGdxActivity extends  AndroidApplication{
	
	public static final String TAG = "MyGdxActivity";
	
	class TestSprite implements ApplicationListener {
		// 准备绘图用SpriteBatch
		SpriteBatch bg_SpriteBatch;
		// 准备游戏精灵
		Sprite bg_Sprite;
		// 背景图片加载用Texture
		Texture bg_Texture;
		Texture pt_Texture;
		
		// 准备舞台
		Stage stage;
		
		@Override
		public void create() {
			Log.d(TAG, "create method starts.........");
			// 初始化舞台
			stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);
			pt_Texture = new Texture(Gdx.files.internal("data/pointer.png"));
			pt_Texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
			
			Image pointer = new Image("pointer", pt_Texture);
			pointer.x = 78;
			pointer.y = 78;
			
			pointer.originX = 1;	// 设置旋转圆心,坐标系原点从图片的左下角开始(这点需要特别注意)
			pointer.originY = 0;
			
			// 旋转动作
			Action rotate_act = Repeat.$(RotateBy.$(-300, 4), 100);
			pointer.action(rotate_act);
			stage.addActor(pointer);
			
			// 构建SpritBatch
			bg_SpriteBatch = new SpriteBatch();
			// 构建Texture,图像宽与高大小都必须为2的整数次幂,否则报异常
			// PS:在android环境使用Libgdx的internal加载时文件必须位于assets目录下
			bg_Texture = new Texture(Gdx.files.internal("data/dashboard.jpg"));
			
			// 以指定Texture构建Sprite
			bg_Sprite = new Sprite(bg_Texture);
			
			// 定位到0, 0(Libgdx使用标准笛卡尔坐标系,自左下0,0起)
			bg_Sprite.setPosition(0, 0);
			
			// 动态设置图片大小
			int mWidth = Gdx.graphics.getWidth();	// 获取屏幕尺寸
			int mHeight = Gdx.graphics.getHeight();
			
			int imgWidth = bg_Texture.getWidth();	// 获取图片尺寸
			int imgHeight = bg_Texture.getHeight();
			
			int display_W = 0;
			int display_H = 0;
			// 获取屏幕重力方向
			int mOrientation = getWindowManager().getDefaultDisplay().getOrientation();
			
			switch(mOrientation){
			case 0:
				// 竖屏状态下
				display_W = mWidth;
				display_H = (int)(display_W * imgHeight/imgWidth);
				
				break;
			case 1:
				// 横屏状态下
				display_H = mHeight;
				display_W = (int)(display_H * imgWidth/imgHeight);
				
				break;
			}
			bg_Sprite.setSize(display_W/2, display_H/2);
			Gdx.input.setInputProcessor(stage);
		}

		@Override
		public void dispose() {
			Log.d(TAG, "dispose method starts.........");
			// 释放占用的资源
			bg_SpriteBatch.dispose();
			bg_Texture.dispose();
			pt_Texture.dispose();
			stage.dispose();
		}

		@Override
		public void pause() {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void render() {
			Log.d(TAG, "render method starts.........");
			// 清屏
			Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
			// 初始化绘图调用
			bg_SpriteBatch.begin();
			// 绘制精灵到游戏屏幕
			bg_Sprite.draw(bg_SpriteBatch);
			// 结束绘图调用
			bg_SpriteBatch.end();
			stage.act(Gdx.graphics.getDeltaTime());
			stage.draw();
		}

		@Override
		public void resize(int arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void resume() {
			// TODO Auto-generated method stub
			
		}
		
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		initialize(new TestSprite(), true);
	}
	
	
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值