diff --git a/legend/野外_任务_L16,759.png b/legend/野外_任务_L16,759.png new file mode 100644 index 0000000..f2af0a4 Binary files /dev/null and b/legend/野外_任务_L16,759.png differ diff --git a/legend/野外_搜索.png b/legend/野外_搜索.png deleted file mode 100644 index 10615e1..0000000 Binary files a/legend/野外_搜索.png and /dev/null differ diff --git a/src/main/java/com/example/jmacro/wjdr/JMacro.java b/src/main/java/com/example/jmacro/wjdr/JMacro.java index 11f892c..be68cba 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMacro.java +++ b/src/main/java/com/example/jmacro/wjdr/JMacro.java @@ -456,7 +456,7 @@ public class JMacro { if (!legendName.endsWith(".png")) { legendName = legendName + ".png"; } - return waitAndMatchPic(rect, new File(legend, legendName), minSimilar, time, unit); + return waitAndFindPic(rect, new File(legend, legendName), minSimilar, time, unit); } /** @@ -531,7 +531,6 @@ public class JMacro { public ViewRect waitAndMatchPic(ViewRect rect, File file, double minSimilar, long time, TimeUnit unit) { return TaskUtil.timeTask(() -> { while (true) { - delayTap(); ViewRect matchPic = matchPic(rect, file, minSimilar); if (matchPic != null) { return matchPic; @@ -568,10 +567,7 @@ public class JMacro { viewRect.setBottom(viewRect.getTop() + image.getHeight()); ViewRect pic = findPic(viewRect, image, minSimilar); - if (pic == null && Logger.isDebug) { - ImageUtil.show(viewRect); - } - + ImageUtil.show(viewRect); return pic; } diff --git a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java index 47dc888..5158272 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java +++ b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java @@ -20,6 +20,7 @@ import javafx.stage.Stage; public class JMainApplication extends Application { public static Stage primaryStage; + public static JMainController mainController; @Override public void start(Stage stage) throws Exception { @@ -29,6 +30,7 @@ public class JMainApplication extends Application { stage.setMinWidth(400); stage.setMinHeight(300); FXMLLoader mainLoader = FXMLUtil.load("main.fxml"); + mainController = mainLoader.getController(); stage.setScene(new Scene(mainLoader.getRoot())); stage.centerOnScreen(); stage.show(); diff --git a/src/main/java/com/example/jmacro/wjdr/JMainController.java b/src/main/java/com/example/jmacro/wjdr/JMainController.java index 334122f..83436b3 100644 --- a/src/main/java/com/example/jmacro/wjdr/JMainController.java +++ b/src/main/java/com/example/jmacro/wjdr/JMainController.java @@ -5,6 +5,7 @@ import com.example.jmacro.wjdr.util.Capture; import com.example.jmacro.wjdr.util.Dialog; import javafx.fxml.FXML; import javafx.scene.control.Button; +import javafx.scene.image.ImageView; import java.awt.*; import java.io.File; @@ -24,6 +25,8 @@ public class JMainController { private Button stop; @FXML private Button capture; + @FXML + private ImageView preview; /** * 截图 @@ -62,4 +65,8 @@ public class JMainController { this.start.setDisable(!stop); this.stop.setDisable(stop); } + + public ImageView getPreview() { + return preview; + } } diff --git a/src/main/java/com/example/jmacro/wjdr/demo/DemoThread.java b/src/main/java/com/example/jmacro/wjdr/demo/DemoThread.java index 6b2aade..955a4d3 100644 --- a/src/main/java/com/example/jmacro/wjdr/demo/DemoThread.java +++ b/src/main/java/com/example/jmacro/wjdr/demo/DemoThread.java @@ -70,7 +70,7 @@ public class DemoThread extends JMacroThread { Logger.info("任务线程ID={}", Thread.currentThread().getId()); // 获取启动图标 Logger.info("定位启动图标"); - ViewRect launch = macro.waitAndFindPic(viewRect, "启动图标", 0.9, 5, TimeUnit.SECONDS); + ViewRect launch = macro.waitAndFindPic(viewRect, "启动图标", 0.9, 10, TimeUnit.SECONDS); if (launch != null) { Logger.info("启动图标坐标:", launch.toString()); Logger.info("启动程序"); diff --git a/src/main/java/com/example/jmacro/wjdr/demo/task/BaseTask.java b/src/main/java/com/example/jmacro/wjdr/demo/task/BaseTask.java index 381bed5..0e99d29 100644 --- a/src/main/java/com/example/jmacro/wjdr/demo/task/BaseTask.java +++ b/src/main/java/com/example/jmacro/wjdr/demo/task/BaseTask.java @@ -7,7 +7,7 @@ import com.example.jmacro.wjdr.util.Logger; /** * 基础任务类 */ -public abstract class BaseTask implements Runnable { +public abstract class BaseTask { /** * 脚本持有对象 @@ -24,8 +24,8 @@ public abstract class BaseTask implements Runnable { this.viewRect = viewRect; } - @Override public void run() { + Logger.info("守护线程ID={}", Thread.currentThread().getId()); if (Thread.currentThread().isInterrupted()) { return; } diff --git a/src/main/java/com/example/jmacro/wjdr/demo/task/Task_自动采矿.java b/src/main/java/com/example/jmacro/wjdr/demo/task/Task_自动采矿.java index cb86df9..9a0d47a 100644 --- a/src/main/java/com/example/jmacro/wjdr/demo/task/Task_自动采矿.java +++ b/src/main/java/com/example/jmacro/wjdr/demo/task/Task_自动采矿.java @@ -35,11 +35,13 @@ public class Task_自动采矿 extends BaseTask { } Logger.info("定位资源搜索按钮"); - ViewRect 野外搜索 = macro.waitAndMatchPic(this.viewRect, "野外_搜索_L33,636", 0.5); - if (野外搜索 == null) { + // 因为搜索按钮透明,不好比对,通过定位其下面的任务图标定位 + ViewRect 野外_任务 = macro.waitAndMatchPic(this.viewRect, "野外_任务_L16,759", 0.9); + if (野外_任务 == null) { Logger.error("未检测到【资源搜索按钮】,采矿终止"); return; } + ViewPoint 野外搜索 = new ViewPoint(野外_任务.getCenter()[0], 野外_任务.getCenter()[1] - 125); Logger.info("定位资源搜索按钮成功:{}", 野外搜索.toString()); macro.mouseLeftClick(野外搜索); @@ -55,8 +57,8 @@ public class Task_自动采矿 extends BaseTask { } // 检测是否是搜索界面 - ViewRect 搜索 = macro.waitAndMatchPic(this.viewRect, "野外_搜索_L18,633", 9); - if (搜索 != null) { + ViewRect 野外_任务2 = macro.waitAndMatchPic(this.viewRect, "野外_任务_L16,759", 9); + if (野外_任务2 != null) { Logger.info("退出资源搜索界面"); macro.mouseLeftClick(this.viewRect); } diff --git a/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java b/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java index aa27d9a..b582c81 100644 --- a/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java +++ b/src/main/java/com/example/jmacro/wjdr/util/ImageUtil.java @@ -2,13 +2,18 @@ package com.example.jmacro.wjdr.util; import cn.hutool.core.img.ImgUtil; import cn.hutool.core.thread.ThreadUtil; +import com.example.jmacro.wjdr.JMainApplication; import com.example.jmacro.wjdr.base.ViewRect; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.util.ArrayList; import java.util.HashMap; @@ -135,18 +140,14 @@ public class ImageUtil { } } + /** * 终端程序并展示图片 * * @param image 图片 */ public static void show(BufferedImage image) { - JFrame frame = new JFrame(); - BufferedImage read = ImgUtil.read("icon.png"); - frame.setIconImage(read); - - int viewSize = 500; - + int viewSize = 100; Image showImage = image; // 图片太大时进行缩放显示 if (image.getWidth() > viewSize || image.getHeight() > viewSize) { @@ -156,28 +157,9 @@ public class ImageUtil { showImage = ImgUtil.scale(showImage, 1.0f * viewSize / image.getHeight()); } } - ImageIcon imageIcon = new ImageIcon(showImage); - JLabel jLabel = new JLabel(imageIcon); - frame.add(jLabel); - frame.setSize(viewSize, viewSize); - frame.setVisible(true); - - boolean[] wait = new boolean[]{true}; - frame.addKeyListener(new KeyAdapter() { - @Override - public void keyReleased(KeyEvent e) { - switch (e.getKeyCode()) { - case KeyEvent.VK_ENTER: - case KeyEvent.VK_ESCAPE: { - wait[0] = false; - frame.setVisible(false); - } - break; - } - } - }); - while (wait[0]) { - ThreadUtil.sleep(300); - } + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ImgUtil.write(showImage,"PNG",outputStream); + javafx.scene.image.Image image1 = new javafx.scene.image.Image(new ByteArrayInputStream(outputStream.toByteArray())); + JMainApplication.mainController.getPreview().setImage(image1); } } diff --git a/src/main/resources/main.fxml b/src/main/resources/main.fxml index 9876161..2fd1206 100644 --- a/src/main/resources/main.fxml +++ b/src/main/resources/main.fxml @@ -2,52 +2,68 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +