我正在为PC游戏做一个简单的叠加程序。它只是一个位于屏幕中央的透明矩形,但其大小由用户的鼠标滚轮控制。所以概念是简单地将透明矩形的大小与敌方玩家的大小匹配,来计算他的距离。
不幸的是,我不能用传统的鼠标监听器实现这一点,因为鼠标必须同时关注游戏和覆盖程序。我正在尝试JNativeHook,但无法更新我的矩形。有什么建议吗?
public class Main extends Application implements NativeMouseWheelListener {
Rectangle r = new Rectangle();
int y = 540;
int width = 75;
int height = 180;
int velocity = 10;
@Override
public void start(Stage stage) throws Exception {
AnchorPane root = new AnchorPane();
r = rect();
root.getChildren().add(r);
root.setStyle("-fx-background-color: rgba(0, 0, 0, 0);");
Scene scene = new Scene(root, 1920, 1080);
scene.setFill(null);
stage.initStyle(StageStyle.TRANSPARENT);
stage.setScene(scene);
stage.setX(0);
stage.setY(0);
stage.show();
stage.setAlwaysOnTop(true);
}
public void nativeMouseWheelMoved(NativeMouseWheelEvent e) {
int direction = e.getWheelRotation();
System.out.println("Mouse Wheel Moved: " + direction);
r.setY(r.getY() + direction);
}
public Rectangle rect() {
r.setWidth(width);
r.setHeight(height);
r.setX(960 - (width/2));
r.setY(540);
r.setFill(Color.TRANSPARENT);
r.setStroke(Color.BLACK);
return r;
}
public static void main(String[] args) {
go();
launch(args);
}
public static void go() {
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
ex.printStackTrace();
System.exit(1);
}
GlobalScreen.getInstance().addNativeMouseWheelListener(new Main());
}
}
我强烈建议采纳@vince-emigh的建议,通过使用AbstractExecutorService的自定义实现,在与ui环境相同的线程上运行JNativeHook,如下所示。
public class JavaFxDispatchService extends AbstractExecutorService {
private boolean running = false;
public JavaFxDispatchService() {
running = true;
}
public void shutdown() {
running = false;
}
public List<Runnable> shutdownNow() {
running = false;
return new ArrayList<Runnable>(0);
}
public boolean isShutdown() {
return !running;
}
public boolean isTerminated() {
return !running;
}
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
return true;
}
public void execute(Runnable r) {
Platform.runLater(r);
}
}
然后使用该类作为事件调度程序:
// Set the event dispatcher to a swing safe executor service.
GlobalScreen.setEventDispatcher(new JavaFxDispatchService());
// Initialize native hook.
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
ex.printStackTrace();
System.exit(1);
}
GlobalScreen.addNativeKeyListener(this);
有关更多信息,请参阅wiki中的线程安全文章
JNativeHook 为 Java 程序提供全局的键盘和鼠标事件侦听功能。你可以来处理程序外的键盘输入和鼠标动作。当然 JNativeHook 使用了 JNI 技术调用了系统的方法来实现该功能。 支持的事件包括: Key Press Events Key Release Events Key Typed Events Mouse Down Events Mouse Up Events Mouse
本文向大家介绍用python制作游戏外挂,包括了用python制作游戏外挂的使用技巧和注意事项,需要的朋友参考一下 玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂。。。。 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,
这个游戏的引导界面是简单的2+2=4,4+4=8,似乎和消除类游戏一样。玩第一次的时候,总是想着这样的加法,可要是这样的话,这个游戏玩起了很困难,其实就是简单的上下左右滑动,相同的会叠加,不要去想加法,我觉得可以修改为仅仅靠重力感应来玩的游戏。
本文向大家介绍javascript制作2048游戏,包括了javascript制作2048游戏的使用技巧和注意事项,需要的朋友参考一下 2048.html 2048.css 2048.js 以上所诉就是本文的全部内容了,希望大家能够喜欢。
上海知名度最高的旅游景点,应该是上海外滩,东方明珠电视塔,以及迪士尼乐园。 此外,豫园、南京路、人民广场、静安寺、新天地、陆家嘴、崇明岛、朱家角、滴水湖、淀山湖、枫泾古镇 等景点也是值得一去的好地方。这么多的景点?该如何规划呢?下面这份上海4日旅游攻略,或许可以帮助到你。
你将如何能够使用Pyplay创建多个屏幕和用户执行的事件? 例如,如果我有一个带有两个按钮(“开始”和“退出”)的菜单屏幕,并且用户单击了“开始”,一个新的屏幕将与游戏中的下一个按钮出现在同一个窗口中。在该屏幕上,用户可以点击另一个按钮,然后移动到另一个屏幕/返回菜单等。