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);
}
}
Libgdx 简易汽车仪表盘
最新推荐文章于 2021-06-01 08:07:32 发布