KLD*_*KLD 6 java android libgdx
我知道这是一个框架; 更是一个开源的跨平台游戏开发库.我去了libgdx主页并按照视频教程的说明进行操作.在正确设置我的项目后,我能够在多个支持的平台上运行默认的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>
Run Code Online (Sandbox Code Playgroud)
Spr*_*bua 21
如果你想将javax.swing游戏移植到libgdx,你必须知道你是如何制作游戏的.你把逻辑和视图分开了吗?如果是,很好,你只需要重写视图.如果不是,那么从头开始可能会更好.首先要了解的基础知识:游戏的入口点是ApplicationListener界面.如果你不需要其中的每个方法,那么扩展Game,这会给你一些deffault行为.所以我建议使用它.的Game或ApplicationListener现在为您提供了可能性,对一些应用程序的事件做出反应:
create():在您的应用启动时调用dispose():当你的游戏关闭时调用(不会崩溃:P)pause():调用android时,调用是传入/ home按钮被按下.在桌面上最小化窗口/游戏失去焦点时.resume():当你在暂停状态后回来时叫.resize():当您调整窗口大小时调用窗口和屏幕旋转时调用(您必须在清单文件中允许它)render():调用每个游戏循环(如果启用),用于更新游戏中的对象,然后将它们绘制到屏幕上.Game类calles中的默认render()实现呈现当前Screen.
屏幕?那是什么?好好想想一场正常比赛吧.你启动它,它showes菜单,与像一些按钮Start Game,Settings...这是菜单画面.所以Screen你的游戏中有不同的逻辑和视图,所以他们必须在sepparate类.Screen实现Screen接口,再次为您提供一些有用的方法:
show():叫,当此项设定Screen为Game小号Screen带MyGdxGame.setScreen().hide():当另一个Screen被设置为Games 时调用Screen.因此,如果当前Screen是MenuScreen和我按下Play Game按钮,show()为PlayScreen被调用,hide()对于MenuScreen被调用.该Screen也有方法pause(),resume()并且resize(),这是所谓的如果同样的方法Game(永远只有当前屏幕)被调用.如果您实现,ApplicationListener您必须自己编写此默认行为.
请注意,dispose()对于Screen未自动调用.
接下来是绘图.对于2D中的绘图,有:
ShapeRenderer,大多数时候只用于调试.它可以渲染简单的形状,如圆形,方形......SpriteBatch,用于呈现Texture小号Sprite小号...所以大多数时候你会使用SpriteBatch.您在以下块中渲染:
SpriteBatch.begin(),启动SpriteBatch.在此调用之前设置他的viewPort,Matrices ....SpriteBatch.draw(),绘制你给它作为参数的东西(有许多不同的draw()方法,查看API)到一个缓冲区,并在flush()它们满或被SpriteBatch.end()调用时立即到GPU .SpriteBatch.end(),flush()GPU的缓冲区,所以一切都在屏幕上绘制.笔记:
begin状态中有2个SpriteBatches .所以在begin()对end()另一个正在运行的SpriteBatch 进行SpriteBatch调用之前end()每个渲染循环只调用一次,因为它会花费一些性能.draw()在开始端块之外调用.最后但并非最不重要的是这个"教程":The camera.它可以帮助您计算您的动作...在您自己的世界中而不是像素.此外,您可以通过移动它来使用它来显示游戏世界的不同部分.首先:在construcotr中设置你的camerasviewport:
camera = new OrthographicCamera(16, 9);
Run Code Online (Sandbox Code Playgroud)
这将设置16宽度和9高度的视口.因此,您的物理屏幕/显示器现在是16个单位宽度和9个单位高度.要将此相机应用于SpriteBatch调用:
`SpriteBatch.setProjectionMatrix(cam.combined)`
Run Code Online (Sandbox Code Playgroud)
通过这样做,SpriteBatch渲染你的相机正在看的东西.0点指向的摄像头处于中间位置.所以现在在中间画一些东西:
batch.draw(yourTexture, 0, 0);
Run Code Online (Sandbox Code Playgroud)
要在右上角绘制,请使用:
batch.draw(yourTexture, 16 / 2, 9 / 2);
Run Code Online (Sandbox Code Playgroud)
要移动相机使用:
cam.translate(16/2, 9/2);
Run Code Online (Sandbox Code Playgroud)
确保cam.update()在改变位置后打电话!
现在你相机的右上角是16,9而不是16/2,9/2.而0,0点是左下角.
我希望这不是开头的复杂.一些教程,帮助我学习: