libGDX跨平台游戏开发框架入门:开发一个小游戏之加载资源

目录

前言

加载资源

libGDX资源目录说明

配置各个平台启动器

desktop模块启动器设置

Android模块启动器设置

加速度计和指南针

html模块启动器设置

编写加载资产代码

1. 加载图像资源

2. 加载音效资源


前言

在前面两章中(libGDX跨平台游戏开发框架入门:搭建开发环境和生成libGDX项目_汤姆猫不是猫的博客-CSDN博客_libgdx框架),(libGDX跨平台游戏开发框架入门:运行libGDX项目_汤姆猫不是猫的博客-CSDN博客)我们简单介绍了如何搭建libGDX开发环境和如何运行项目,以及项目中的模块作用等情况,我们对libGDX的项目有了初步认识,那么接下来我们通过一个简单的小游戏来初步了解一下libGDX中的几个重要API。

为了更加清楚的描述每个api作用,我们将使用大量的代码和描述,来阐述每个api的作用和用途,所以我们将开发小游戏分为四个部分讲解,由于篇幅限制,我们分为三章讲解各个部分主要内容,最后一篇进行汇总: 1. 加载资源 2. 渲染和清屏 3. 鼠标键盘输入和精灵移动 4. 小游戏完整版汇总篇

本篇为资源加载篇

加载资源

为了让游戏可以使用这些资源,我们必须将它们放在 Androidassets文件夹中。我将这4 个文件命名为:drop.wav、rain.mp3、droplet.png和bucket.png并将它们放入android/assets/. 我们只需要存储一次资源,因为桌面和 HTML5 项目都被配置为通过不同的方式“查看”这个文件夹。

libGDX资源目录说明

在没有安卓平台上开发时,assets目录在core目录中,如果包含Android项目,那么所有资源都会放在Android项目的assets目录中,并共享给其他模块使用。

配置各个平台启动器

desktop模块启动器设置

```java

package com.badlogic.drop.desktop;

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.badlogic.drop.Drop;

public class DesktopLauncher {
   public static void main (String[] arg) {
      LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
      config.title = "Drop";
      config.width = 800;
      config.height = 480;
      new LwjglApplication(new Drop(), config);
   }
}

``` 如果只对桌面开发感兴趣,下面其余其他平台的部分可以跳过。

Android模块启动器设置

AndroidManifest.xml在android(或drop-android)根目录中进行修改

```xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.badlogic.drop.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/GdxTheme" >
        <activity
            android:name="com.badlogic.drop.android.AndroidLauncher"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

```

android:screenOrientation设置为(landscape)横向,除非你想要(portrait)纵向也可以设置。

加速度计和指南针

如果希望节省电池电量并禁用加速度计和指南针,则在启动器代码中设置useAccelerometer和useCompass为false即可。如下面代码所示:

```java

package com.badlogic.drop.android;

import android.os.Bundle;

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

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

```

我们无法定义 的分辨率Activity,因为它是由 Android 操作系统设置的。

因此这里我们将简单地将 800x480 分辨率缩放到设备的任何分辨率

html模块启动器设置

在html5项目里同样设置800x480分辨率用于渲染图像。

package com.badlogic.drop.client;

import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.backends.gwt.GwtApplication; import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration; import com.badlogic.drop.Drop;

public class HtmlLauncher extends GwtApplication { @Override public GwtApplicationConfiguration getConfig () { return new GwtApplicationConfiguration(800, 480); }

@Override public ApplicationListener createApplicationListener () { return new Drop(); } }

现在所有平台的启动类现在都已正确配置,让我们继续实现游戏逻辑代码部分。

编写加载资产代码

为了简单和方便其他平台复用,我们把所有的游戏代码都放在core模块中。

我们的第一个任务是加载资产并存储对它们的引用。资产通常在ApplicationAdapter.create()方法中加载,所以让我们这样做: ```java package com.badlogic.drop;



import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture;

public class Drop extends ApplicationAdapter {
   private Texture dropImage;
   private Texture bucketImage;
   private Sound dropSound;
   private Music rainMusic;

   @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.wav"));
      rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));

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

      // ... more to come ...
   }

   // rest of class omitted for clarity

```

对于我们的每个资产,我们在Drop类中都有一个字段,以便我们在其他地方引用它们。

1. 加载图像资源

create()方法中的前两行加载雨滴和水桶的图像。Texture表示存储在视频内存中的加载图像。通常不能绘制到纹理。Texture通过将FileHandle传递给构造函数来实现资产文件加载。 FileHandle实例只能通过Gdx.files来获得。 我们用到了不同类型的资产文件,在这里我们用“内部”文件类型来指代我们的资产。 内部文件位于assetsAndroid 项目的目录中,desktop和HTML5项目引用相同的目录。

接下来我们加载音效和背景音乐。音乐通常太大而无法完全保存在内存中,因此存在差异。libGDX 区分存储在内存中的音效和从存储流式音乐。根据经验,如果音效样本短于 10 秒,您应该使用一个实例,并Music为更长的音频片段使用一个实例。

2. 加载音效资源

一个SoundorMusic实例的加载是通过Gdx.audio.newSound()和Gdx.audio.newMusic()来完成的。就像Texture构造函数一样,这两种方法都采用FileHandle。

在create()方法结束时,我们还告诉Music实例循环并立即开始播放。如果运行该应用程序,就可以看到漂亮的粉红色背景并且能听到下雨的声音。

到这里我们的小游戏所需要的资源都加载到游戏中来了,我们可以在代码任何地方调用这个资源。

下一章我们将讲解如何渲染物体(精灵)到屏幕上。

如果觉得博主写得还不错,欢迎“关注、点赞、收藏” 一键三连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤姆猫不是猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值