- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我遇到了一些类型不匹配的奇怪情况。总体想法是我正在创建一个游戏,玩家可以在其中定义自己的移动键绑定(bind)、按钮等。
我从一个标准的键事件监听器开始,然后将其馈送到键处理程序中
import javafx.event.EventHandler;
import javafx.scene.input.KeyEvent;
// Key event single key
scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
public void handle(KeyEvent key) {
btnHand.keyPressHandler(key.getCode());
}
});
import javafx.scene.input.KeyCode;
public void keyPressHandler(KeyCode keyCode) {
switch (keyCode) {
case GameOptions.getMoveNorth(): //method call break;
case GameOptions.getMoveSouth(): //method call break;
case GameOptions.getMoveWest(): //method call break;
case GameOptions.getMoveEast(): //method call break;
default: System.out.println("key : " + keyCode + " was pressed, yet has no handler");
}
}
我计划将键绑定(bind)存储在一个名为 GameOptions 的选项类中,该类保存我的键绑定(bind)并使用 getter 提取我需要的键信息
import javafx.scene.input.KeyCode;
public class GameOptions {
private static KeyCode moveNorth;
private static KeyCode moveEast;
private static KeyCode moveSouth;
private static KeyCode moveWest;
public GameOptions() {}
public static KeyCode getMoveNorth() {
return moveNorth;
}
但我现在不知道为什么它会导致类型不匹配,因为在我看来它们是同一类型。引导我朝着正确方向前进的指针会很好
最佳答案
注意:我确定这个答案确定了一个问题,但我完全不相信它是您确定的准确错误消息的来源,它与您收到的错误不匹配- 常量 case
标签。将更新说明,暂时将其保留在这里。
虽然错误相当隐蔽,但根本问题是 case
只接受 constant expressions and enum constant names ,方法调用和变量是 Not Acceptable 。在您当前的架构中工作,最直接的方法是简单地使用 if
,因为您没有理由必须使用switch
:
public void keyPressHandler(KeyCode keyCode) {
if (keyCode == GameOptions.getMoveNorth()) {
...
} else if (keyCode == GameOptions.getMoveSouth()) {
...
} else if (keyCode == GameOptions.getMoveWest()) {
...
} else if (keyCode == GameOptions.getMoveEast()) {
...
} else {
System.out.println("key : " + keyCode + " was pressed, yet has no handler");
}
}
为了完整起见,如果您确实坚持在那里使用开关
,则标签必须是常量,因此您唯一的选择是移动关键代码翻译其他地方,例如(选择让 Action
成为 GameOptions
的成员只是为了让这个例子简单):
class GameOptions {
enum Action {
MOVE_NORTH,
MOVE_SOUTH,
MOVE_WEST,
MOVE_EAST
};
// returns null if unmapped, or you could use an Action.NO_ACTION or something.
public static Action getActionFromKeyCode (KeyCode keyCode) {
...
}
}
然后你的处理程序变成:
public void keyPressHandler(KeyCode keyCode) {
switch (GameOptions.getActionFromKeyCode(keyCode)) {
case GameOptions.Action.MOVE_NORTH: ...; break;
case GameOptions.Action.MOVE_SOUTH: ...; break;
case GameOptions.Action.MOVE_WEST: ...; break;
case GameOptions.Action.MOVE_EAST: ...; break;
default: ...; break;
}
}
但是,该方法有一些注意事项:
GameOptions
必须知道所有 键绑定(bind),否则 keyPressHandler
会变得更加复杂。GameOptions
中,这在某些情况下在架构上很奇怪,并且在更复杂的情况下可能会出现问题。if
方法相比,它并没有给您带来太多好处,它更加冗长,在这里没有任何实际好处。无论如何,您仍然需要在 getActionFromKeyCode
中实现相同的大 if
,这与您的原始问题相同,只是移到了不同的地方。这对您来说不是最佳选择,但想将其作为一个概念提出来考虑。我会选择 if
。
关于java - 类型不匹配 : cannot convert from KeyCode to KeyCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42498416/
所以我遇到了一些类型不匹配的奇怪情况。总体想法是我正在创建一个游戏,玩家可以在其中定义自己的移动键绑定(bind)、按钮等。 我从一个标准的键事件监听器开始,然后将其馈送到键处理程序中 import
我已经在 SO 上检查了其他问题,但是他们没有回答我的问题。我只想捕获某些 keyCode 并将其替换为另一个。我正在处理字符,而不是空格,我不需要松散焦点等。 下面是我的代码。但是您可以用您的键码替
var keycode = window.event.keycode; game.keyDown(keycode); 此代码在 Chrome、IE、Safari 上运行良好,但当我在 Firefox
var key_code = 65; 结果应该是 character = "Esc"; 我想转换键盘上的所有按键。我的演示在这里: window.onload = function () { var
我目前正在学习 Java,并正在使用 Java FX 进行事件驱动编程。该程序制作一个圆圈,并通过几种不同的方法(按钮、鼠标按钮、向上和向下箭头)增加其大小。 按钮和鼠标单击工作正常,但向上和向下箭头
谁能告诉我如何在检查两个键码{shiftkey + e.keyCode = 37或38或39或40}的组合后在keyup上触发jQuery事件? 我想做一些像下面这样的事情:让我们有一个 p 标签,其
我制作了一个 onkeydown 函数,它水平运行 li 元素 block ,它运行完美,但我需要当第一个和最后一个 li block 处于焦点时,左右键应该被禁用。 有人能建议一个正确的方法吗?提前
我怀疑这是由于我对 keyCode 信息如何传递缺乏了解,但我不知道如何进行这项工作... 我需要从 keydown 事件中获取键码。我可以轻松地完成以下操作: document.getElement
在我的项目中,我尝试从发送 writeInt(e.getKeyCode()) 的另一台计算机接收 dataInputStream,即 readInt() 到这台计算机,但是当我收到 keyCode 时
KeyEvent.getKeyCode()可以返回多少个code? KeyEvent.getKeyCode()返回的代码范围是多少? javadoc for KeyEvent 上列出了 key 代码吗
首先,看我的例子:http://jsfiddle.net/Davood/gkeAM/ 我想在点击链接时获取 keyCode 。 我想发现当点击链接时,是否按下了 ctrl 键? 提前致谢 最佳答案 $
我需要能够读取一个字符并获取与其语言和键盘布局相关的键。 我知道如何看待文化背景和语言。但是我怎样才能用英文输入像'S'这样的字母并知道它在键盘上的键是什么?或者对于更难的问题,我怎样才能知道字母 '
无论键盘和操作系统的语言和文化如何,/(正斜杠)符号的 javascript 键码是什么?在英语键盘中,正斜杠位于与数字键分开的键中,其键码为 191。但是在西类牙语键盘中,该字符与数字 7 位于同一
我在 JavaScript 方面仍处于新手水平。我发现了一个困扰我的错误。 这就是 keyCode 似乎无法在移动设备(chrome)上工作的原因。我刚刚注意到移动设备不支持 keyCode。 我猜我
我需要在文本框中包含星号作为允许的条目。 无论键盘布局和语言如何,如何在 KeyDown 事件下测试此键? 忽略数字键盘,使用葡萄牙语 QWERTY 布局可以通过 Keys.Shift | 测试此键
虽然我知道由于 e.keyCode 与 e.charCode 而捕获键不是微不足道的,但我认为 jQuery 几乎能够规范化大部分那些不一致。 然而 answering this question我发
我以为这会在 Stack Overflow 上的某个地方得到解答,但我找不到。 如果我正在监听按键事件,我应该使用 .keyCode 还是 .which 来确定是否按下了 Enter 键? 我一直在做
$('body').keypress(function(event){ if(event.keyCode == 46){console.log('Delete Key Pressed')};
我有一个自动完成文本字段的ajax请求。结果被附加到div中。现在我需要做的是通过向上和向下箭头浏览结果。但是我没有从 keydown jquery 函数中获取向上和向下的键码。任何帮助都会受到赞赏。
我想知道如何更改KeyCode条件中的功能?我试图做某事,但无法进入 keyCode。 我的代码: $("body").keydown(function (e) { // left arrow
我是一名优秀的程序员,十分优秀!