- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我明白这是一个框架;更是一个开源的跨平台游戏开发库。我去了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
,这为您提供了一些默认行为。所以我建议使用它。 Game
或 ApplicationListener
现在让您可以对某些应用程序事件使用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()
: 调用,当你设置这个时 Screen
如 Game
s Screen
与 MyGdxGame.setScreen()
. hide()
: 调用,当另一个 Screen
设置为 Game
s Screen
. Screen
是
MenuScreen
然后我按
Play Game
按钮,
show()
为
PlayScreen
被称为和
hide()
为
MenuScreen
叫做。
Screen
也有方法
pause()
,
resume()
和
resize()
, 如果
Game
中的方法相同,则调用它们被调用(总是只针对当前屏幕)。如果您实现
ApplicationListener
您必须自己编写此默认行为。
dispose()
为
Screen
不会自动调用。
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 end()
每个渲染循环仅一次,因为它会消耗一些性能。 draw()
在开始结束块之外。 camera
.它可以帮助你计算你的 Action ......以你自己的世界单位而不是像素。您也可以使用它通过四处移动来显示游戏世界的不同部分。
camera = new OrthographicCamera(16, 9);
`SpriteBatch.setProjectionMatrix(cam.combined)`
SpriteBatch
渲染你的相机正在看的东西。
batch.draw(yourTexture, 0, 0);
batch.draw(yourTexture, 16 / 2, 9 / 2);
cam.translate(16/2, 9/2);
cam.update()
改变位置后!
关于java - 了解 libgdx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295329/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!