当前位置: 首页 > 知识库问答 >
问题:

OOP播放器实现libgdx

龚盛
2023-03-14

我想对播放器的实现对象提出一些建议。播放器可以有2个纹理,根据按下的按钮选择,例如,右箭头将在左侧显示一个纹理,而另一个纹理。

我已经在播放器类中实现了接口输入处理器,但我不知道为什么它看起来不是很公平和非常动态,所以我想从你那里得到一些建议

谢谢

代码:

public class Player  implements InputProcessor {

    private Texture up;
    private Texture down;
    private Sprite player;

    public Player(Texture one,Texture two){

        this.up=one;
        this.down=two;
        player=new Sprite(one);
    }


    @Override
    public boolean keyDown(int keycode) {
        // TODO Auto-generated method stub
        player.setTexture(this.down);
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        // TODO Auto-generated method stub
        player.setTexture(this.up);
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        // TODO Auto-generated method stub
        return false;
    }

}

我以这种方式实现了玩家类,但我想要一些最佳实现的建议。

共有2个答案

伏砚
2023-03-14

几个小时后回家,我会用例子更新我的答案。

在播放器类中监听键似乎不是一个好习惯。前段时间我在游戏中实现了一个玩家类,是这样的:

  • 在游戏类的渲染方法中,您实现了调用player.up()或player.down()或例如player.jump()的关键侦听器。
  • 在玩家类中,在这些方法中,例如在跳转()中,您可以设置纹理/动画。

我将发布代码示例。

public class Player {
float x;
float y;
float xSpeed;
float ySpeed;
private Animation playerRun;
private Animation playerJump;
private Animation playerStand;
private Animation current;
private Rectangle bounds;

public Player(){
    playerRun = new Animation(1/10f, Assets.atlas.findRegions("run"));
    playerRun.setPlayMode(Animation.PlayMode.LOOP);

    //set other animations in similar way

    current = playerStand;

    this.x = Gdx.graphics.getWidth()/2;
    this.y = Gdx.graphics.getHeight()/2;

    bounds = new Rectangle(x, y, 100, 100);
}

public Rectangle getBounds(){
    return bounds;
}

public void setPos(float x, float y){
    this.x = x;
    this.y = y;
    bounds.x = x;
    bounds.y = y;
}

public void changePos(float x, float y){
    this.x +=x;
    this.y +=y;
    bounds.x += x;
    bounds.y += y;
}

public void move(){
    changePos(xSpeed, ySpeed);
}

public Animation animate(){
    return current;
}

public void run(){
    current = playerRun;
    ySpeed = 0;
}

public void jump(){
    current = playerJump;
    ySpeed = 10;
}

而我的游戏类中的渲染方法只调用玩家方法:

if (Gdx.input.isTouched()){
                player.jump();
            }

哎呀,忘了最重要的部分:

batch.draw(player.animate().getKeyFrame(time += delta), player.x, player.y);
伯君浩
2023-03-14

我建议你子类化非常有用的< code>Sprite类,并使用TextureAtlas来包含播放器纹理。下面是实现的存根:

 public class Player extends Sprite {

    TextureAtlas textureAtlas;

    public Player(TextureAtlas atlas) {
        super(atlas.getRegions().get(0));
        textureAtlas = atlas;
    }

    public void setTexture(String textureName) {
        setRegion(textureAtlas.findRegion(textureName)));
    }

}

这里有一个非常好的教程,解释如何使用TextureAtlas

此外,不要实现整个< code>InputProcessor,而是使用< code>InputAdapter来提供此接口的空实现。这样就清楚多了。它可以是< code>Player类中的一个字段:

   private InputProcessor inputProcessor = new InputAdapter() {
   // Override only methods you need here
   };

当然,不要忘记注册这个InputProcessor:

Gdx.input.setInputProcessor(inputProcessor);
 类似资料:
  • 这一节的任务是实现一个播放器的内核,主要就是实现:播放列表,暂停/播放、上一曲、下一曲,音量调节等功能。 播放器设计 为了实现这些功能,我们可以先创建一个结构体来存储播放器的信息及其当前的状态,例如:播放列表、当前的播放状态、音量大小等,如下所示:播放状态只有两种状态,正在播放和播放停止;PLAYER_SONG_NUM_MAX 默认定义为 10 首。 enum PLAYER_STATUS {

  • 本文向大家介绍Python实现在线音乐播放器,包括了Python实现在线音乐播放器的使用技巧和注意事项,需要的朋友参考一下 最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过requests模块,get请求将数据获得,使用Json模块进行数据的解

  • 本文向大家介绍android实现简单音乐播放器,包括了android实现简单音乐播放器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下 话不多说先上效果 前言 写这个音乐播放器实在是迫不得已。因为我们Andoird课程要求写一个音乐播放器。所以就有了此项目。这个项目比较简单,实现了最基本的音乐播放功能,然后界面是仿照着网易云

  • 本文向大家介绍python实现媒体播放器功能,包括了python实现媒体播放器功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现媒体播放器功能的具体代码,供大家参考,具体内容如下 playMP3.py mediaList.py SaveLog.py 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍Android音乐播放器制作 点击歌曲实现播放(二),包括了Android音乐播放器制作 点击歌曲实现播放(二)的使用技巧和注意事项,需要的朋友参考一下 上次我们实现了把手机里的音频扫描到,然后放在list集合里面,用ListView展示在手机界面上,如果没有看过的可以去看看本人的博客:Android音乐播放器制作(一)扫描本地音乐显示在手机上 这次是在上一次的基础上直接继续写代码,

  • 本文向大家介绍Android实现简单音乐播放器(MediaPlayer),包括了Android实现简单音乐播放器(MediaPlayer)的使用技巧和注意事项,需要的朋友参考一下 Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要