我知道这是一个框架;更是一个开源的跨平台游戏开发库。我去了libgdx homepage并按照视频教程中的说明进行操作。在正确设置我的项目后,我能够在多个支持的平台上运行默认的my-gdx-game项目。伟大,精致和花花公子...现在怎么样?
我一直在搜索论坛,wiki,javadocs以及许多寻找体面直白操作方法的网站。不幸的是我找不到任何东西,大部分的帮助都假定你对这个库有一些基本的了解。
我觉得视频教程向我展示了如何正确设置项目,有效地让我的脚湿透,然后假设我知道如何游泳,并让我离开了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>
答案 0 :(得分:21)
如果您想将javax.swing
游戏移植到libgdx,您必须知道如何制作游戏。你把逻辑和视图分开了吗?如果是,很好,你只需要重写视图。如果不是,那么从头开始可能会更好。
首先要了解的基础知识:游戏的入口点是ApplicationListener
界面。如果你不需要其中的每个方法,请扩展Game
,这会给你一些deffault行为。所以我建议使用它。 Game
或ApplicationListener
现在可以对某些应用程序事件做出反应:
create()
:在您的应用启动时调用dispose()
:当你的游戏关闭时调用(不会崩溃:P)pause()
:呼叫android,当呼叫是传入/主页按钮被按下时。在桌面上最小化窗口时/游戏失去焦点时。resume()
:在暂停状态后回来时调用。resize()
:当你调整窗口大小并在android上调用时,屏幕旋转时调用(你必须在清单文件中允许它)render()
:调用每个游戏循环(如果启用),用于更新游戏中的对象,然后将它们绘制到屏幕上。 Game
类calles中的默认render()实现呈现当前的Screen
。
屏幕?那是什么?
好好想想一场正常比赛吧。你启动它并显示一个菜单,有一些按钮,如Start Game
,Settings
...这是菜单屏幕。所以Screen
是游戏的一部分,具有不同的逻辑和视图,因此它们必须位于sepparate类中。 Screen
实现了Screen
接口,它再次为您提供了一些有用的方法:
show()
:当您使用Screen
将此Game
设置为Screen
s MyGdxGame.setScreen()
时,系统已调用。hide()
:当另一个Screen
设置为Game
s Screen
时,系统会调用。因此,如果当前Screen
是MenuScreen
而我按下Play Game
按钮,show()
会调用PlayScreen
并hide()
调用MenuScreen
。
Screen
还有方法pause()
,resume()
和resize()
,如果调用Game
中的相同方法,则会调用这些方法(始终仅用于当前屏幕) )。如果您实施ApplicationListener
,则必须自己编写此默认行为
请注意,dispose()
的{{1}}不会自动调用。
接下来是绘图。对于2d中的绘图,有:
Screen
,大部分时间仅用于调试。它可以渲染简单的形状,如圆形,方形...... ShapeRenderer
,用于呈现SpriteBatch
s Texture
s ... 所以大多数时候你会使用Sprite
进行渲染。您在以下块中渲染:
SpriteBatch
,启动SpriteBatch。在此调用之前设置他的viewPort,Matrices ...... SpriteBatch.begin()
,将你给它的东西作为参数绘制(有许多不同的draw()方法,看一下API)到一个缓冲区,然后SpriteBatch.draw()
将它们一起渲染到GPU已满或已调用flush()
。SpriteBatch.end()
,SpriteBatch.end()
缓冲区到GPU,所以一切都在屏幕上绘制。注意:
flush()
状态下拥有2个SpriteBatches。所以在begin
在另一个正在运行的SpriteBatch上调用begin()
之前调用{{1} end()
,因为它会花费一些性能。end()
。最后但并非最不重要的是这个“教程”:
draw()
。camera
。它可以帮助您计算您的动作...在您自己的世界中而不是像素。此外,您可以通过移动它来使用它来显示游戏世界的不同部分。
首先:在construcotr中设置你的camerasviewport:
camera = new OrthographicCamera(16, 9);
这将设置16宽度和9高度的视口。因此,您的物理屏幕/显示器现在是16个单位宽度和9个单位高度。要将此相机应用于SpriteBatch调用:
`SpriteBatch.setProjectionMatrix(cam.combined)`
通过执行此操作,SpriteBatch
会呈现您的相机正在查看的内容。
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点是左下角。
我希望这对于开始并不复杂。一些教程,帮助我学习: