首页 \ 问答 \ 在带有Scene2D的LibGDX中,如何在按下按钮时连续向右走?(In LibGDX with Scene2D, how can I continuously walk to the right when a button is pressed?)

在带有Scene2D的LibGDX中,如何在按下按钮时连续向右走?(In LibGDX with Scene2D, how can I continuously walk to the right when a button is pressed?)

我在InputAdapter有以下代码:

...
@Override
public boolean keyDown (int keycode) {
    if (keycode == Keybindings.KEY_RIGHT) this.player.right();
    return super.keyDown(keycode);
}

@Override
public boolean keyUp (int keycode) {
    if (keycode == Keybindings.KEY_RIGHT) this.player.stopMovingRight();
    return super.keyUp(keycode);
}
...

我的PlayerActor类负责right()stopMovingRight()

...
public void right () {
    this.right = true;
    this.setX(this.getX() + 1f);
}

public void stopMovingRight () {
    this.right = false;
}
...

现在,当我运行应用程序时,当我按下KEY_RIGHT键(键盘上的“D”键)时,我的PlayerActor只移动了1个单位。 问题是我想要在按下键的同时连续移动PlayerActor

现在的情况:

  • 按住键 - >向右移动(仅)1个单位
  • 放开钥匙 - >没有任何反应

期望的情况:

  • 按住键 - >连续向右移动1个单元
  • 放开键 - >停止向右移动

我很想听听你对此事的看法,欢呼!


I have the following piece of code in my InputAdapter:

...
@Override
public boolean keyDown (int keycode) {
    if (keycode == Keybindings.KEY_RIGHT) this.player.right();
    return super.keyDown(keycode);
}

@Override
public boolean keyUp (int keycode) {
    if (keycode == Keybindings.KEY_RIGHT) this.player.stopMovingRight();
    return super.keyUp(keycode);
}
...

And my PlayerActor class is responsible for right() and stopMovingRight():

...
public void right () {
    this.right = true;
    this.setX(this.getX() + 1f);
}

public void stopMovingRight () {
    this.right = false;
}
...

Now, when I run the application, my PlayerActor moves just 1 unit when I press the KEY_RIGHT key (the 'D' key on the keyboard). The problem is that I instead want to continuously move the PlayerActor while I am pressing down the key.

Situation now:

  • Hold down key -> move (just) 1 unit to the right
  • Let go of key -> nothing happens

Desired situation:

  • Hold down key -> move 1 unit to the right continuously
  • Let go of key -> stop moving to the right

I would love to hear your thoughts on this matter, cheers!


原文:https://stackoverflow.com/questions/37561889
更新时间:2019-12-13 07:37

最满意答案

你在这里遇到的问题是, keyDown()只被调用一次,因此你的玩家ID只移动了1个单位。 你需要做的是,创建一些变量,例如isMovingRight并在每次游戏更新时检查它。

游戏类:

public final void render(float delta) {
...
   player.update();
...
}

玩家类:

public void update() {
   if(isMovingRight) {
      this.setX(this.getX() + 1f);
   }
}

The problem you encourted here is, that keyDown() is called only once, therefore your player id moved only by 1 unit. What you need to do is, create some variable, for example isMovingRight and check it every time the game is updated.

Game class:

public final void render(float delta) {
...
   player.update();
...
}

Player class:

public void update() {
   if(isMovingRight) {
      this.setX(this.getX() + 1f);
   }
}
2016-06-01

相关文章

更多

最新问答

更多
  • 这个listArray是如何填充的?(How is this listArray populated?)
  • iOS 7上的CTSubscriber(以及如何使用它)是什么?(What's CTSubscriber (and how to use it) on iOS 7?)
  • 手动创建VisualStudio 2012项目文件(Manually creating VisualStudio 2012 project file)
  • 删除不适用于JSP中使用for循环的每个id(Deletion not working for every id using for loop in JSP)
  • 如何从std :: filesystem :: path中删除引号(How to remove quotation marks from std::filesystem::path)
  • 验证多个控制器方法的URL路径(Validate URL path for several controller methods)
  • 如何在datarow []中的列中找到最大值?(How to find max value in a column in a datarow[] ?)
  • 如何使用预定义文本替换来自数据库的部分结果(How do I replace part of result coming from Database with predefined text)
  • Selenium Java注入了新的Javascript函数(Selenium Java inject new Javascript function)
  • 使用.on的多个下拉菜单选择文本仅适用于第一个下拉列表(Multiple Dropdowns Menu Selection text using .on works only on first dropdown)
  • 快速将黄土曲线添加到大型数据集图中的方法(Quick way to add loess curve to large data set graph)
  • FilteringSelect in mvc(FilteringSelect in mvc)
  • 在Delphi XE2中开发Mac或iOS应用程序需要哪些硬件/软件?(What hardware/software is necessary to develop Mac or iOS apps in Delphi XE2?)
  • 在原型的构造函数中初始化属性时获取“未定义”(Getting 'undefined' when a property is initialized in the constructor of a prototype)
  • 通过越狱加载的应用程序的Documents文件夹位置(Location of Documents folder for an app loaded via jailbreak)
  • 在OpenGL中使用可编程和固定管道功能(Using both programmable and fixed pipeline functionality in OpenGL)
  • 将任何用户输入重定向到单独的底层程序(redirect any user input to a separate underlying program)
  • 编辑文本不能正常工作android(Edit texts not working properly android)
  • “user_denied”Facebook应用页面上的Facebook用户区域设置(Facebook user locale on “user_denied” facebook app page)
  • 在大图像中找到小的部分透明图像的坐标(find coordinates of small partially-transparent image within a large image)
  • 我如何在cakephp 3.1中获得完整的相对路径?(How i can get full relative path of image in cakephp 3.1?)
  • 如何保存拖动标记的新本地化?(How to save new localization of dragged marker?)
  • MySQL UPDATE vs INSERT和DELETE(MySQL UPDATE vs INSERT and DELETE)
  • 在执行查询之前,在SQLAlchemy模型中将datetime转换为unix时间戳?(Convert datetime to unix timestamp in SQLAlchemy model before executing query?)
  • OpenCL与OpenGL互操作的优势(Advantage of OpenCL interoperability with OpenGL)
  • 如何解析用点和等分隔的数据然后添加到listview(How to parsing data from delimited with dot and equal then add to listview)
  • 带调试输出的X3解析器段错误(BOOST_SPIRIT_X3_DEBUG)(X3 parser segfaults with debug output (BOOST_SPIRIT_X3_DEBUG))
  • 将文件夹名称添加到fgrep结果(Add folder name to fgrep result)
  • 在MySQL中加载一个表是非常慢的(Loading one table in MySQL is ridiculously slow)
  • 如何将JSON放入PHP变量?(How do I put JSON into a PHP Variable?)