我想用JavaFx让我的角色跳跃。当我快速点击空格多次时,角色会迅速掉落并消失。当我多次单击空格,但速度较慢时,角色会按其应有的方式跳跃。
我不确定问题出在哪里,但我认为这与AnimationTimer及其帧有关。也许我用了一种错误的方式让我的角色跳跃,所以如果是这样,有人能给我正确的方式吗?我必须使用JavaFx<化身:我角色的形象。我用重力和AnimationTimer使曲线像跳跃一样。
int gravity = 0;
boolean left, right;
window.getScene().setOnKeyPressed(ePress -> {
KeyCode keycode = ePress.getCode();
if(keycode.equals(keycode.D)){
avatar.setTranslateX(avatar.getTranslateX() + 35);
right = true;
}
if(keycode.equals(keycode.A)){
avatar.setTranslateX(avatar.getTranslateX() - 35);
left = true;
}
if(keycode.equals(keycode.W)){
avatar.setTranslateY(avatar.getTranslateY() - 35);
}
if(keycode.equals(keycode.S)){
avatar.setTranslateY(avatar.getTranslateY() + 35);
}
if(keycode.equals(keycode.SPACE)){
double ypreviousPos = avatar.getTranslateY();
jumpTimer = new AnimationTimer(){
@Override
public void handle(long now) {
avatar.setTranslateY(avatar.getTranslateY() - 10 + gravity);
gravity = gravity + 1;
if(ypreviousPos == avatar.getTranslateY()){
jumpTimer.stop();
gravity = 0;
}
if(right == true ){
avatar.setTranslateX(avatar.getTranslateX() + 10);
avatar.setTranslateY(avatar.getTranslateY() - 10 + gravity);
gravity = gravity + 1;
if(ypreviousPos == avatar.getTranslateY()){
jumpTimer.stop();
gravity = 0;
}
}
if(left == true ){
avatar.setTranslateX(avatar.getTranslateX() - 10);
avatar.setTranslateY(avatar.getTranslateY() - 10 + gravity);
gravity = gravity + 1;
if(ypreviousPos == avatar.getTranslateY()){
jumpTimer.stop();
gravity = 0;
}
}
}
};
jumpTimer.start();
}
});
window.getScene().setOnKeyReleased(eRel -> {
KeyCode keycode = eRel.getCode();
if(keycode.equals(keycode.D)){
right = false;
}
if(keycode.equals(keycode.A)){
left = false;
}
});
});
如果已有一个AnimationTimer
正在运行,则需要避免启动新的AnimationTimer
:否则两个(或更多)的AnimationTimer将同时修改
translateY
属性和gravity
字段。因此,您可能会跳过开始位置,并且至少有一个动画计时器无法停止。
替换
if(keycode.equals(keycode.SPACE))
与
if(keycode.equals(keycode.SPACE) && gravity==0)
应该有用。
另请注意,测试浮点类型的相等性通常是个坏主意。由于浮点算术中可能存在舍入错误,您可能永远无法在您期望的地方获得精确的相等性。(在这种情况下,我认为它会起作用,因为您只是将整数值添加到您的
Double
中;但是,无论如何您都应该遵循最佳实践。)您可能还应该替换
if(ypreviousPos == avatar.getTranslateY())
具有
if(ypreviousPos <= avatar.getTranslateY())
最后,您可以考虑对其进行重构,以便只有一个
AnimationTimer
,持续运行,只需安排密钥处理程序更改导致计时器跳转的值即可。
您可以按照贵公司实际职责来设计角色,实现各司其职的安排。例如:如果贵公司设有财务专员这一职位专职负责支付,您可以设计一个充值专员的角色,为角色配置充值权限,从而实现专人专岗负责。
我在libgdx/java使用Box2d的RPG 2d中工作。 我有主角和其他三个追随者。我希望他们像蛇一样沿着主人公的路线走(与Master System/Phantasy Star和其他旧RPG一样),以免在发现狭窄的入口时搞砸。 在我的PlayScreen课程中,我分别调用所有角色。 在屏幕上 HandleInput(浮点dt)方法我只移动主字符 更新(浮点dt)方法 渲染(浮动增量)方法
问题内容: 我想使用Spring Security JSP标签库根据角色有条件地显示一些内容。但是在Spring Security 3.1.x中,仅检查一个角色。 我可以使用,但 ifAllGranted 已弃用。 有什么帮助吗? 问题答案: 春季安全性中有一个特殊的安全性表达: hasAnyRole(角色列表) -如果已授予用户指定的任何角色(以逗号分隔的字符串 列表形式) ,则为true。 我
我正在使用Spring Security 3.2.3。释放 这是我的WebSecurityConfigrerAdapter的代码 结果是:HTTP状态403-访问被拒绝 但是如果我评论这一行: 一切正常。这意味着(我猜)我的角色或HttpSecurity有问题。 所以我开始调试。我仔细检查我的用户详细信息是否有两个具有名称的授权:ADMIN、USER。 你知道是什么导致了这个问题吗?
本文向大家介绍ansible 使用角色,包括了ansible 使用角色的使用技巧和注意事项,需要的朋友参考一下 示例 Ansible使用角色的概念来更好地允许模块化代码并避免重复自己。 角色只是Ansible知道从何处加载vars文件,任务和处理程序的文件夹结构。一个例子可能看起来像这样: 然后,您可以将该角色用于基本的剧本,如下所示: 针对此剧本运行Ansible时,它将针对组中的所有主机并针对
我设置了一个日志频道,这样如果用户删除了一条消息,它就会被发送到该频道,这样我的版主和我自己就可以看到删除的消息。 我想这样做,这样就不会发送一个嵌入式显示什么我的版主或我自己删除,以避免混乱。有办法做到这一点吗?