如何在java(libgdx)中使用键盘移动精灵
我正在为学校的动机制作一个游戏,我已经制作了精灵和背景(平铺地图)。我的问题是如何使用键盘使精灵左、右、后和下移动,请大家尽快帮助我这是我的代码:如何在java(libgdx)中使用键盘移动精灵,java,keyboard,libgdx,sprite,2d-games,Java,Keyboard,Libgdx,Sprite,2d Games,我正在为学校的动机制作一个游戏,我已经制作了精灵和背景(平铺地图)。我的问题是如何使用键盘使精灵左、右、后和下移动,请大家尽快帮助我这是我的代码: public class LEVEL1 implements ApplicationListener, Screen { private Music music; private SpriteBatch batch; private Texture Sprite; private Vector2 position; private TiledMap
public class LEVEL1 implements ApplicationListener, Screen {
private Music music;
private SpriteBatch batch;
private Texture Sprite;
private Vector2 position;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
private OrthographicCamera camera;
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
position.y = position.y - 5;
// player Controls
if(position.y < 0){
position.y = 0;
}
//..................................................
// renderer camera and map
camera.update();
renderer.setView(camera);
renderer.render();
//...................................................
//tells the computer when to start drawing textures
batch.begin();
batch.draw(Sprite, position.x, position.y, 50, 50);
batch.end();
//...................................................
camera = new OrthographicCamera();
camera.setToOrtho(true, 2920,950);
}
@Override
public void show() {
Sprite = new Texture("Sprite.png");
batch = new SpriteBatch();
position = new Vector2(650, Gdx.graphics.getHeight());
map = new TmxMapLoader().load("map1.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
camera = new OrthographicCamera();
music = Gdx.audio.newMusic((Gdx.files.internal("GameSound.mp3")));
music.setLooping(false);
music.setVolume(0.5f);
music.play();
}
@Override
public void create() {
}
@Override
public void resize(int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.position.set(width/2f, height/3f, 0); //by default camera position on (0,0,0)
camera.update();
}
@Override
public void render() {
if(Gdx.input.justTouched())
music.play();
}
@Override
public void dispose() {
map.dispose();
renderer.dispose();
music.dispose();
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
public类LEVEL1实现了ApplicationListener,Screen{
私人音乐;
专用SpriteBatch批次;
私人纹理精灵;
私有向量2位置;
私人平铺地图;
私有正交瓦片渲染器;
私人正交摄影机;
@凌驾
公共无效渲染(浮动增量){
glClearColor(1,0,0,0);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
位置y=位置y-5;
//玩家控制
如果(位置y<0){
位置y=0;
}
//..................................................
//渲染器摄影机和贴图
camera.update();
渲染器.setView(摄像机);
render.render();
//...................................................
//告诉计算机何时开始绘制纹理
batch.begin();
批量绘制(精灵,位置x,位置y,50,50);
batch.end();
//...................................................
摄影机=新的正交摄影机();
摄影机。设置为Toortho(正确,2920950);
}
@凌驾
public void show(){
雪碧=新纹理(“Sprite.png”);
批次=新的SpriteBatch();
position=newvector2(650,Gdx.graphics.getHeight());
map=newtmxmaploader().load(“map1.tmx”);
渲染器=新的正交平铺贴图渲染器(贴图);
摄影机=新的正交摄影机();
music=Gdx.audio.newMusic((Gdx.files.internal(“GameSound.mp3”));
音乐。设置循环(错误);
音乐。设置音量(0.5f);
音乐。播放();
}
@凌驾
公共void create(){
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
camera.viewportWidth=宽度;
camera.viewportHeight=高度;
camera.position.set(宽度/2f,高度/3f,0);//默认情况下相机位置在(0,0,0)上
camera.update();
}
@凌驾
公共无效呈现(){
if(Gdx.input.justTouched())
音乐。播放();
}
@凌驾
公共空间处置(){
map.dispose();
renderer.dispose();
音乐;
}
@凌驾
公共空间隐藏(){
//TODO自动生成的方法存根
}
@凌驾
公共空间暂停(){
//TODO自动生成的方法存根
}
@凌驾
公众简历(){
//TODO自动生成的方法存根
}
}对需要实施的输入事件作出反应。它具有方法
keyDown
(按键时调用)和keydup
(按键释放时调用)。这些方法有一个参数
keyCode
,用于定义按下/释放键的int代码。
所以你需要重写这两个方法,根据你得到的键码,你应该做些什么或者不做。
例如,要移动播放机,您可以保留一个成员速度
,这取决于按下/释放的键。在渲染
方法中,您需要根据经过的时间(增量
)和速度更新位置
要获取输入事件,您需要告诉libgdx,InputProcessor
应该是活动的。这是通过调用Gdx.input.setInputProcessor(您的InputProcessor)
完成的
另外,请务必阅读,您的许多问题都会在这里得到回答
编辑:
一些代码:
public class Level implements ApplicationListener, InputProcessor {
private int speedX; // Speed in x direction
private Vector2 position; // Position
private boolean keyDown(int keyCode) {
boolean result = false;
if (keyCode == Keys.D) {
result = true;
speed += 5;
}
else if (keyCode == Keys.A) {
result = true;
speed -= 5;
}
return result;
}
private boolean keyUp(int keyCode) {
boolean result = false;
if (keyCode == Keys.D) {
result = true;
speed -= 5;
}
else if (keyCode == Keys.A) {
result = true;
speed += 5;
}
return result;
}
public void render(float delta) {
position.x += speed*delta;
// Render here
}
}
在这里,我举了一个使用键(上、下、左、右)移动精灵的小例子
您应该在libgdxwiki中找到更多详细信息
public class Level1 implements ApplicationListener {
Sprite sprite;
SpriteBatch batch;
float spriteXposition;
float spriteYposition;
@Override
public void render() {
Gdx.gl.glClearColor(1, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//tells the computer when to start drawing textures
batch.begin();
sprite.setPosition(spriteXposition, spriteYposition);
sprite.draw(batch);
batch.end();
spriteControl();
}
public void spriteControl() {
if(Gdx.input.isKeyPressed(Keys.UP)) {
spriteYposition++;
}
if(Gdx.input.isKeyPressed(Keys.DOWN)) {
spriteYposition--;
}
if(Gdx.input.isKeyPressed(Keys.LEFT)) {
spriteXposition--;
}
if(Gdx.input.isKeyPressed(Keys.RIGHT)) {
spriteXposition++;
}
}
@Override
public void create() {
sprite = new Sprite(new Texture(Gdx.files.internal("sprite.png")));
batch = new SpriteBatch();
}
}
你绝对应该用谷歌搜索这个,这是libGDX中最基本的东西之一,所以网上有很多资源。例如,看看维基上的示例项目:嗨:)我已经搜索了所有地方,但我无法让我的精灵随着键盘移动,我也不擅长编程,如果你能帮助我,请帮助:)我在链接你的页面上一步一步地解释。非常感谢你男人:),你能告诉我在添加了所有这些东西之后我的代码会是什么样子吗,我是新制作的:)plsI编辑了我的答案。请不要只是复制粘贴代码,而是考虑一下。理解代码是很重要的,否则你将一事无成。