首页 \ 问答 \ 在带有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

相关问答

更多

VHDL:concat inout std_logic into std_logic_vector signal(VHDL: Concat inout std_logic into std_logic_vector signal)

根据您的描述,我知道顶级端口和组件端口都是模式输入。 如果是这样,那么如果将组件端口直接连接到std_logic级别的外部inout端口,则可能会有所帮助,例如: componentPort(0) => inOutBit0, --Component use componentPort(1) => inOutBit1, --Component use componentPort(2) => inOutBit2, --Component use 那么不需要中间mySignal 。 但是,描述

获取默认设备UID时出错:'!obj'(Error getting default device UID: '!obj')

解: 进入系统首选项 - >声音 - >输出,看到设备设置为iPhoneSimulatorAudioDevice,我将其更改为“内部扬声器”,重启,一切顺利。 Solution: Went into System Preferences -> Sound -> Output, and saw the device was set to iPhoneSimulatorAudioDevice, I changed this to “Internal Speakers”, rebooted, and

Android OOM如何工作?(How does Android OOM work?)

Android对应用程序内存大小有限制,通常为16M 如今,设备将拥有更大的堆,与操作系统级别和屏幕分辨率相关联。 1)谁执行限制? 谁生成OOM并杀死应用程序? Dalvik VM。 2)16M是包括Java堆还是Native堆还是只包含Java堆? 它只是Java堆......有一个值得注意的例外。 在Android 1.x / 2.x上,位图在Dalvik堆中表示为一个小存根(大约8个字节),其余数据存储在本机内存中。 这些位图仍然计入您的堆预算,即使大部分内存在技术上都在堆之外。 And

Excel自动填充问题(Excel AutoFill problem)

http://support.microsoft.com/kb/166342 “在Excel 2003和早期版本的Excel中,单个工作表可能包含最多65,472个引用另一个工作表的数组公式。如果要使用更多公式,请将数据拆分为多个工作表,以便少于65,472个引用到一个工作表。“ http://support.microsoft.com/kb/166342 "In Excel 2003 and in earlier versions of Excel, a single worksheet ma

jsPlumb draggable element javascript函数(jsPlumb draggable element javascript function)

你错过了jsPlumb.setContainer($("body")); https://jsfiddle.net/mkaran/mLthybzo/ https://jsplumbtoolkit.com/community/doc/home 编辑:你的例子的小提琴https://jsfiddle.net/mkaran/aof6mq34/ You are missing the jsPlumb.setContainer($("body")); https://jsfiddle.net/mkaran

MVC4:ViewModel(带有radiobuttonlist)在HttpPost之后为空(MVC4: ViewModel (with radiobuttonlist) is empty after HttpPost)

我没有看到表单有如下ID的映射: @Html.HiddenFor(model => model.Id) 每个内部问题集合也应该具有Id,以便与表单一起发布。 因此,对于您可以拥有的每个问题,在表单的foreach循环中: @Html.HiddenFor(model => item.Question.Id) 该模型还具有MultipleChoiceQuestion类型的集合。 对于模型绑定到集合,集合元素的名称应具有带有序数字的name属性,如本文http://haacked.com/arch

如何在同一帐户上设置“Dev repo”(在prod和团队之间)(How to set up a “Dev repo” (between the prod and the team) on the same account)

在git中似乎存在一个基本的误解。 您有一个通过设置组织正确找到的回购。 那很棒。 你和你的开发人员在他们的回购中单独分工。 那也没关系。 现在,如果您是首席开发人员,并且想要了解人们的工作方式,那么您可以在GitHub上的中央组织中组织所有这些。 即开发者发送拉动请求并将它们拉入开发分支,您不必将它们拉入主控。 在您的开发分支中,您可以测试合并的代码,看它是否符合您的需求。 如果您不喜欢它,则不必将其与生产和/或主分支合并。 在git中,你使用分支机构来理清好事和坏事。 你批准的所有东西都合并

将动态字符串绑定到函数电子JS(Bind Dynamic String to Functions Electron JS)

好吧,我在互联网上搜索了很多找不到的东西,问我的朋友(他们帮我几个小时)仍然无法解决。 最后,我尝试了一些东西并且有效。 我的更新代码: var menu = []; for(index in file) { menu.push( { label: file[index]['name'], id: box[index]['path'], //**Added id parameter** click: function(c

相关文章

更多

最新问答

更多
  • jsPlumb draggable element javascript函数(jsPlumb draggable element javascript function)
  • MVC4:ViewModel(带有radiobuttonlist)在HttpPost之后为空(MVC4: ViewModel (with radiobuttonlist) is empty after HttpPost)
  • 如何在同一帐户上设置“Dev repo”(在prod和团队之间)(How to set up a “Dev repo” (between the prod and the team) on the same account)
  • 如何在tcl中将eth0配置为发送方udp端口(how to configure eth0 as a sender udp port in tcl)
  • 在main方法中进行更改后传递给构造函数的TreeMap实例的行为是什么(What is the behavior of a TreeMap instance passed into a constructor following changes in main method)
  • 在这个的一些属性不同的颜色(Different color in some properties of this)
  • CURL没有返回任何内容(CURL Not returning anything)
  • MVC5注入依赖于城堡windsor的视图(MVC5 injecting dependency on a view with castle windsor)
  • CakePHP AJAX-Call:发生错误:未定义(CakePHP AJAX-Call: An error occured: undefined)
  • 如何用.aidl扩展名创建文件?(how to create a file with .aidl extension?)
  • 无法获得全尺寸动态WordPress灯箱图像显示(Cannot get full size dynamic WordPress lightbox image to display)
  • 使用Jsoup删除元素不起作用(Removing Element with Jsoup doesn't work)
  • 交叉编译ARM的MongoDB C ++驱动程序。(Cross compiling MongoDB C++ driver for ARM. Cannot find Boost Libraries)
  • ProgressDialog没有关闭(ProgressDialog not closing)
  • 单元测试DB中的JPA插入(Unit testing JPA insertion in the DB)
  • 点击谷歌服务对话框中的更新按钮(Click on update button in check google service dialog)
  • 适用于PhoneGap Build的iOS“缺少必需的57x57图标”(“Missing required 57x57 icon” for iOS on PhoneGap Build)
  • MVC ckeditor post编辑器值内联(MVC ckeditor post editor value inline)
  • Angular 2 Pipe - 无法读取未定义的属性'toString'(Angular 2 Pipe - Cannot read property 'toString' of undefined)
  • 安装引导加载程序(Installing bootloaders)
  • 用于确定最终如何包含头文件的工具(Tool to figure out how a header file is eventually being included)
  • 在将字符串转换为int [duplicate]之前检查字符串是否不是数字(Check if string is not a number before converting it to a int [duplicate])
  • 从脚本构建db2数据库以进行构建验证的工具?(Tools to build db2 database from scripts for build verification?)
  • 在偏移之后向FileOutputStream写一个数字(Write a number to FileOutputStream after an offset)
  • Javascript RegEx仅限数字(无特殊字符)(Javascript RegEx for Numbers Only (no special characters))
  • 我可以在PHP的Linux服务器上运行新的COM(“WScript.Shell”)(Can I run new COM(“WScript.Shell”) on linux servers in PHP)
  • 在Backbone.js中放置与视图不直接相关的代码(例如广告,分析等)的位置?(Where to place code not directly related to a view (such as ads, analytics etc) in Backbone.js?)
  • 适用于Mac和PC的一般开发人员必备软件综合列表[关闭](Comprehensive List of Essential Software for General Developers on Mac and PC [closed])
  • 将语言文本转换为模型(Transformation Language Text to Model)
  • 在控制器中的两个方法之间共享变量?(Sharing variables between two methods in a controller?)