首页 > 其他分享 >【libGDX】初识libGDX

【libGDX】初识libGDX

时间:2024-02-21 21:36:31浏览次数:30  
标签:badlogic gdx libGDX bucket 初识 new import com

1 前言

​ libGDX 是一个开源且跨平台的 Java 游戏开发框架,于 2010 年 3 月 11 日推出 0.1 版本,它通过 OpenGL ES 2.0/3.0 渲染图像,支持 Windows、Linux、macOS、Android、iOS、Web 等平台,提供了统一的 API,用户只需要写一套代码就可以在多个平台上运行,官方介绍见 → Features

​ libGDX 相关链接如下:

2 libGDX 环境搭建

1)下载 gdx-setup

​ 官方下载链接:gdx-setup.jar,如果网速较慢,用户也可以从这里下载:libGDX全套工具包

2)生成项目

​ 双击 gdx-setup.jar 文件,填写 Project name、Package name、Game Class、Output folder、Android SDK、Supported Platforms 等信息,点击 Generate 生成项目。官方介绍见 → Generate a Project

img

​ 注意:JDK 最低版为 11,见官方说明 → Set Up a Dev Environment

3)打开项目

​ 使用 Android Studio 打开生成的 Drop 项目,等待自动下载依赖,项目结构如下。

img

​ 注意:如果选择了 Android 启动,需要在 gradle.properties 文件中添加 AndroidX 支持,如下。

android.useAndroidX=true

​ DesktopLauncher.java

package com.zhyan8.drop;

import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;

public class DesktopLauncher {
	public static void main (String[] arg) {
		Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
		config.setForegroundFPS(60);
		config.setTitle("Drop");
		new Lwjgl3Application(new Drop(), config);
	}
}

​ AndroidLauncher.java

package com.zhyan8.drop;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class AndroidLauncher extends AndroidApplication {
	@Override
	protected void onCreate (Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
		initialize(new Drop(), config);
	}
}

​ Drop.java

package com.zhyan8.drop;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.ScreenUtils;

public class Drop extends ApplicationAdapter {
	SpriteBatch batch;
	Texture img;

	@Override
	public void create () {
		batch = new SpriteBatch();
		img = new Texture("badlogic.jpg");
	}

	@Override
	public void render () {
		ScreenUtils.clear(1, 0, 0, 1);
		batch.begin();
		batch.draw(img, 0, 0);
		batch.end();
	}

	@Override
	public void dispose () {
		batch.dispose();
		img.dispose();
	}
}

4)运行项目(点击操作)

​ Desktop:

img

​ Android:

img

​ 运行效果如下。

img

5)运行项目(通过命令)

​ 可以通过在 Terminal 中运行以下命令来运行项目,见官方介绍 → Importing & Running

​ Desktop:

./gradlew desktop:run

​ Android:

./gradlew android:installDebug android:run

​ iOS:

./gradlew ios:launchIPhoneSimulator

​ HTML:

./gradlew html:superDev

3 libGDX 官方案例

​ 官方接水游戏见 → A Simple Game,本节完整代码资源见 → 基于libGDX实现接水游戏

​ 在第二节的基础上,修改 Drop.java,如下。

​ Drop.java

package com.zhyan8.drop;

import java.util.Iterator;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.TimeUtils;

public class Drop extends ApplicationAdapter {
	private Texture dropImage;
	private Texture bucketImage;
	private Sound dropSound;
	private Music rainMusic;
	private SpriteBatch batch;
	private OrthographicCamera camera;
	private Rectangle bucket;
	private Array<Rectangle> raindrops;
	private long lastDropTime;

	@Override
	public void create() {
		// load the images for the droplet and the bucket, 64x64 pixels each
		dropImage = new Texture(Gdx.files.internal("droplet.png"));
		bucketImage = new Texture(Gdx.files.internal("bucket.png"));

		// load the drop sound effect and the rain background "music"
		dropSound = Gdx.audio.newSound(Gdx.files.internal("drop.mp3"));
		rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));

		// start the playback of the background music immediately
		rainMusic.setLooping(true);
		rainMusic.play();

		// create the camera and the SpriteBatch
		camera = new OrthographicCamera();
		camera.setToOrtho(false, 800, 480);
		batch = new SpriteBatch();

		// create a Rectangle to logically represent the bucket
		bucket = new Rectangle();
		bucket.x = 800 / 2 - 64 / 2; // center the bucket horizontally
		bucket.y = 20; // bottom left corner of the bucket is 20 pixels above the bottom screen edge
		bucket.width = 64;
		bucket.height = 64;

		// create the raindrops array and spawn the first raindrop
		raindrops = new Array<Rectangle>();
		spawnRaindrop();
	}

	private void spawnRaindrop() {
		Rectangle raindrop = new Rectangle();
		raindrop.x = MathUtils.random(0, 800-64);
		raindrop.y = 480;
		raindrop.width = 64;
		raindrop.height = 64;
		raindrops.add(raindrop);
		lastDropTime = TimeUtils.nanoTime();
	}

	@Override
	public void render() {
		// clear the screen with a dark blue color. The
		// arguments to clear are the red, green
		// blue and alpha component in the range [0,1]
		// of the color to be used to clear the screen.
		ScreenUtils.clear(0, 0, 0.2f, 1);

		// tell the camera to update its matrices.
		camera.update();

		// tell the SpriteBatch to render in the
		// coordinate system specified by the camera.
		batch.setProjectionMatrix(camera.combined);

		// begin a new batch and draw the bucket and
		// all drops
		batch.begin();
		batch.draw(bucketImage, bucket.x, bucket.y);
		for(Rectangle raindrop: raindrops) {
			batch.draw(dropImage, raindrop.x, raindrop.y);
		}
		batch.end();

		// process user input
		if(Gdx.input.isTouched()) {
			Vector3 touchPos = new Vector3();
			touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
			camera.unproject(touchPos);
			bucket.x = touchPos.x - 64 / 2;
		}
		if(Gdx.input.isKeyPressed(Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime();
		if(Gdx.input.isKeyPressed(Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime();

		// make sure the bucket stays within the screen bounds
		if(bucket.x < 0) bucket.x = 0;
		if(bucket.x > 800 - 64) bucket.x = 800 - 64;

		// check if we need to create a new raindrop
		if(TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnRaindrop();

		// move the raindrops, remove any that are beneath the bottom edge of
		// the screen or that hit the bucket. In the latter case we play back
		// a sound effect as well.
		for (Iterator<Rectangle> iter = raindrops.iterator(); iter.hasNext(); ) {
			Rectangle raindrop = iter.next();
			raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
			if(raindrop.y + 64 < 0) iter.remove();
			if(raindrop.overlaps(bucket)) {
				dropSound.play();
				iter.remove();
			}
		}
	}

	@Override
	public void dispose() {
		// dispose of all the native resources
		dropImage.dispose();
		bucketImage.dispose();
		dropSound.dispose();
		rainMusic.dispose();
		batch.dispose();
	}
}

​ 音频和图片资源放在 assets 目录下面,如下。

img

​ Desktop 运行效果如下:

img

​ Android 运行效果如下:

img

​ 声明:本文转自【libGDX】初识libGDX

标签:badlogic,gdx,libGDX,bucket,初识,new,import,com
From: https://www.cnblogs.com/zhyan8/p/18024331

相关文章

  • 【libGDX】ApplicationAdapter生命周期
    1前言​libGDX中,用户自定义的渲染窗口需要继承ApplicationAdapter类,ApplicationAdapter实现了ApplicationListener接口,但实现的方法都是空方法,方法释义如下。publicinterfaceApplicationListener{ //应用首次创建时调用一次 publicvoidcreate(); //窗口尺......
  • 02. 初识HAL库
    一、初识HAL库  STM32开发中常说的HAL库开发,指的是利用HAL库固件包里封装好的C语言编写的驱动文件,来实现对STM32内部和外围电器元件的控制的过程。但只有HAL库还不能直接驱动一个STM32的芯片,其它的组件已经由ARM与众多芯片硬件、软件厂商制定的通用的软件开发标......
  • 初识flowable
    三个月前开始做flowable的项目,刚刚了解一些又中断了,乘着重新开始之前,赶快恶补一下。相信大家在之前已经了解很多关于flowable的知识了,但是很乱,我也是这样。1、对于一个流程来说,你肯定要开启流程。当提交人提交的那一瞬间,流程被开启。这个开启方法需要我们自己去写,并且可以携带......
  • 01. 初识STM32
    一、什么是STM32  STM32,从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器。  STM32主要分两大块,MCU和MPU,MCU就是我们常见的STM32微控制器,不能跑Linux,而MPU则是ST在19年才推出的微......
  • 初识st表-P2880
    首先讲讲st表。这个东西呢,就是一种利用了倍增思想的预处理数据从而达到快速查询的功能。for(inti=1;i<=n;++i)scanf("%d",&f[i][0]);for(inti=1;i<21;++i){intt1=1<<i-1,t2;t2=t1<<1;for(intj......
  • 一、计算机初识
    一、计算机(电脑)的定义:可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。程序自动化:可以将预先编好的程序组纳入计算机内存,在程序控制下,计算机可以连续、自动地工作,不需要人的干预。高速:每秒万亿次,普通每秒亿次。二、计算机的发展过程1、古时:算盘、帕斯卡、莱布尼兹(八卦......
  • Python文本转语音库:pyttsx3 初识
    1.安装pipinstallpyttsx32.示例#coding=utf-8importpyttsx3text="""在这个例子中,使用三引号可以创建多行字符串,换行符会自动包含在字符串中。请注意,在这些方法中,字符串的换行拼接可以根据需要进行布局,以增强代码的可读性和可维护性。"""engine=pyttsx3.init()......
  • 【揭秘OAuth协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略OAuth协议的
    背景介绍在现代的网站中,我们经常会遇到需要用户登录的情况。然而,直接要求用户注册可能会显得繁琐,导致用户的流失。为了解决这个问题,网站可以采用OAuth授权机制。通过与像GitHub或其他第三方网站的认证授权合作,网站可以获取用户的相关信息,避免了繁琐的注册过程。在从第三方网站授权......
  • 01. 初识Git
    一、什么是Git  Git是免费的、开源的分布式版本控制软件,可以快速高效地处理从小型到大型各种项目。版本控制是一种记录文件内容变化,以便将来查阅特定版本的修订情况的系统。版本控件最重要的就是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。  集中......
  • 第一章:初识数据库
    第一章:初识数据库本章主要讲解数据库安装和数据库基本介绍,考虑易用性及普及度,本课程采取mysql进行教学。1.1初识数据库数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database,DB)。用来管理数据库的计算机系统称为数据库管......