gpt4 book ai didi

java - 了解 libgdx

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:49 25 4
gpt4 key购买 nike

我明白这是一个框架;更是一个开源的跨平台游戏开发库。我去了libgdx homepage并按照视频教程中的说明进行操作。正确设置我的项目后,我能够在多个支持的平台上运行默认的 my-gdx-game 项目。很棒,很好,很花花公子……现在怎么办?

我一直在搜索论坛、wiki、javadoc 和更多网站,寻找体面的、直接的操作方法。不幸的是,我找不到任何帮助,那里的大部分帮助都假设您对这个库有一些基本的了解。

我觉得视频教程向我展示了如何正确设置项目,有效地弄湿我的脚,然后假设我知道如何游泳,然后让我离开了 300 英里的海里什么的。我在消化这个库时遇到了麻烦,因为我昨天才开始使用它,所以说到 libgdx,我是一个全新的人。

我想将我现有的项目转移到 libgdx,但我已经习惯了 BufferedImages、JFrames 和类似的东西。有经验的退伍军人的任何帮助都会很好。

顺便说一下,我在下面发布了我的核心项目,所以你们可以带我了解这里到底发生了什么......

<code>
package com.me.mygdxgame;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
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.graphics.g2d.TextureRegion;

public class MyGdxGame implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture texture;
private Sprite sprite;

@Override
public void create() {

float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();

camera = new OrthographicCamera(1, h/w);
batch = new SpriteBatch();

texture = new Texture(Gdx.files.internal("data/libgdx.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);

sprite = new Sprite(region);
sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());
sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2);

}

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

@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

batch.setProjectionMatrix(camera.combined);
batch.begin();
sprite.draw(batch);
batch.end();
}

@Override
public void resize(int width, int height) {
}

@Override
public void pause() {
}

@Override
public void resume() {
}
}
</code>

最佳答案

如果你想移植你的 javax.swing游戏到 libgdx 你必须知道你是如何制作你的游戏的。你把逻辑和 View 分开了吗?如果是,那很好,你只需要重写 View 。如果没有,那么从头开始可能更好。
首先要了解的基础知识:游戏的入口点是 ApplicationListener界面。如果您不需要其中的每个方法,请扩展 Game ,这为您提供了一些默认行为。所以我建议使用它。 GameApplicationListener现在让您可以对某些应用程序事件使用react:

  • create() : 应用启动时调用
  • dispose() :当您的游戏关闭时调用(未崩溃:P)
  • pause() :在android上调用,当来电/主页按钮被按下时。在桌面上最小化窗口/游戏失去焦点时。
  • resume() : 在暂停状态后返回时调用。
  • resize() : 当您调整窗口大小和在 android 上,当屏幕旋转时调用(您必须在 list 文件中允许它)
  • render() : 调用每个游戏循环(如果启用),用于更新游戏中的对象,然后将它们绘制到屏幕上。
  • Game 中的默认 render() 实现类调用为您当前的渲染 Screen .

    屏幕?那是什么?
    想想一个普通的游戏。你启动它,它会显示一个菜单,有一些按钮,比如 Start Game , Settings ... 这是菜单屏幕。所以 Screen s 是游戏中具有不同逻辑和 View 的部分,因此它们必须位于不同的类中。 Screen s 实现 Screen接口(interface),它再次为您提供了一些有用的方法:
  • show() : 调用,当你设置这个时 ScreenGame s ScreenMyGdxGame.setScreen() .
  • hide() : 调用,当另一个 Screen设置为 Game s Screen .

  • 所以如果当前 ScreenMenuScreen然后我按 Play Game按钮, show()PlayScreen被称为和 hide()MenuScreen叫做。 Screen也有方法 pause() , resume()resize() , 如果 Game 中的方法相同,则调用它们被调用(总是只针对当前屏幕)。如果您实现 ApplicationListener您必须自己编写此默认行为。
    请注意, dispose()Screen不会自动调用。

    接下来就是画图了。对于在 2d 中绘制,有:
  • ShapeRenderer ,大多数时候仅用于调试。它可以渲染简单的形状,如圆形、正方形...
  • SpriteBatch , 用于渲染 Texture s Sprite s...

  • 所以大多数时候你会使用 SpriteBatch 渲染.你在一个块中渲染:
  • SpriteBatch.begin() , 启动 SpriteBatch。在此调用之前设置他的视口(viewport)、矩阵...
  • SpriteBatch.draw() , 将你给它的东西作为参数(有很多不同的 draw() 方法,看 API)绘制到一个 Buffer 中,然后 flush()一旦 GPU 已满或 SpriteBatch.end()叫做。
  • SpriteBatch.end() , flush()缓冲区到 GPU,所以一切都绘制在屏幕上。

  • 笔记:
  • 在他们的 begin 中从来没有 2 个 SpriteBatch立即声明。所以之前begin()调用 SpriteBatch end()在另一个正在运行的 SpriteBatch
  • 如果可能,只使用 1 个 SpriteBatch 并尝试拨打 end()每个渲染循环仅一次,因为它会消耗一些性能。
  • 不要打电话draw()在开始结束块之外。

  • 最后但并非最不重要的是本“教程”: camera .它可以帮助你计算你的 Action ......以你自己的世界单位而不是像素。您也可以使用它通过四处移动来显示游戏世界的不同部分。
    首先:在构造函数中设置你的相机视口(viewport):
    camera = new OrthographicCamera(16, 9);

    这将设置一个 16 宽和 9 高的视口(viewport)。所以你的物理屏幕/显示器现在是 16 个单位宽度和 9 个单位高度。将此相机应用于您的 SpriteBatch 调用:
    `SpriteBatch.setProjectionMatrix(cam.combined)`

    通过这样做 SpriteBatch渲染你的相机正在看的东西。
    默认情况下,相机 0,0 点位于其中间。所以现在要在中间画一些东西,请使用:
    batch.draw(yourTexture, 0, 0);

    要在右上角绘制,请使用:
     batch.draw(yourTexture, 16 / 2, 9 / 2);

    要移动您的相机,请使用:
    cam.translate(16/2, 9/2);

    请务必拨打 cam.update()改变位置后!

    现在相机的右上角是 16,9 而不是 16/2, 9/2。 0,0 点是左下角。

    我希望这在开始时不会太复杂。一些帮助我学习的教程:
  • StarAssault
  • Steigert's blog
  • 关于java - 了解 libgdx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295329/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com