From 7c2f32bf41577bc8d70d7c19153b68435bc9f73f Mon Sep 17 00:00:00 2001 From: Echigo reiki <e235738@ie.u-ryukyu.ac.jp> Date: Sat, 8 Feb 2025 09:50:10 +0900 Subject: [PATCH] 7.1 --- scripts/rep7/rep7.1/LowMouseTracker$1.class | Bin 0 -> 1445 bytes scripts/rep7/rep7.1/LowMouseTracker.class | Bin 0 -> 3552 bytes scripts/rep7/rep7.1/LowMouseTracker.java | 83 ++++++++++++++++++++ scripts/rep7/rep7.1/MouseTracker$1.class | Bin 0 -> 1430 bytes scripts/rep7/rep7.1/MouseTracker.class | Bin 0 -> 3534 bytes scripts/rep7/rep7.1/MouseTracker.java | 82 +++++++++++++++++++ 6 files changed, 165 insertions(+) create mode 100644 scripts/rep7/rep7.1/LowMouseTracker$1.class create mode 100644 scripts/rep7/rep7.1/LowMouseTracker.class create mode 100644 scripts/rep7/rep7.1/LowMouseTracker.java create mode 100644 scripts/rep7/rep7.1/MouseTracker$1.class create mode 100644 scripts/rep7/rep7.1/MouseTracker.class create mode 100644 scripts/rep7/rep7.1/MouseTracker.java diff --git a/scripts/rep7/rep7.1/LowMouseTracker$1.class b/scripts/rep7/rep7.1/LowMouseTracker$1.class new file mode 100644 index 0000000000000000000000000000000000000000..690f58a7146016906ff35706fb8ac7937e3bfd2e GIT binary patch literal 1445 zcmZuxOLH4V5dKD5d;OT$a;)GG2quY4Bst2)CSX8$A~}g%mThcfaKa<w)nv6{y{p<; zIfmj7aNs}{7s3fHRB<C^DHRSBXMPVC4p8*$nsQ{kCGGS~Kj!PNyZ4WOe*F!=Rfs{P zkTzj(^r4?&Y%zFL586tuhr<3$hPfGr{;27y+$F6%q%CXj0ggcok=c&$a*oX~wfIo% zhzGltvZXIATlhOdS+_&cYPz<n1b!rUqw)|qj+q$Y7)6F*a^FYz?zV{Bz_)JxC#}2N zGNkxdT;GkZF{JZ_jX@m8xQQ&s3B15CdI%W9u&Y*O%M+iwzQe%oYKM~?FX9yG!dO%D z8*-O)HLZJ@<1}7j7}?g@uLR1~AQVF;&c<p-u4gT}Dk=}-Rh%(#mg5|9<e-5cs2L39 zej#I&HEsGD$9d#w@5qSZM7~x?0(!!CtmUnT(vHd|iVWlTo>NqV_Le7!qzfpSxX59F z3XqBKiaiqphCwgzoekl&lPec=F0&l3YgWdZuG3rzrR^%pr5-e-*1o~<CgupZCsdSh zq!}h67W$|sfIo9o&@!%=xXN)2*BMUs6tpE=Ke8%;7f@BwtMgTcQ@tgB&Vo|7iFZv@ zII5UuIM);E=-yy3m5gq=p2u)He^lrd4WV4v(EQxyxPuy1wGnf6z(uwHMmA0e8bh69 z3Cj!v4=C<3^(x(xuhOHVr0^ccs_sKWML~<<?fn0Gy%)#P$O#gKs1Vb-CtY7IwYRrq zxGt!e)WJ>RH?&~n7qsEAwTOnSE?WEgp|zkL+L96{o9v;MzNm?#sPn$<QFr=IT}I8I z!SOLZVdztl2&um&4(N)6BQ3hYkuj=)C8?r2fg&Sb^L-gssQyYSYS9#pB9O{t^dJMY z(zigL(0>$bU|1*VJnhr^q&VFHD_-cpEI!5XFLcE4KE3;C1<ulY10N(#Y?MOkP*00{ zV0#$*4qqqIM6$f}43i8$;?e$gU-=AEDg2JYQmJpYi|IKdIiGoq@ySHIEVFp)+wW1P zt@#A+ba6vVr8L>!DjE8n#RC1hSkxYydzdipcM#t@*}>(XFqK5=LGlBoN7m^M#)@66 z=;Tsya<ef<Q+l8=M_gP-0h=ho#x%a9F8m55d_z<EGcMr?X3(V({E)myVEm0u69wZh h%%#r2ATJ&BF7DB4&^&&GPvev0xKHa45vO^l=U*HuQEdPK literal 0 HcmV?d00001 diff --git a/scripts/rep7/rep7.1/LowMouseTracker.class b/scripts/rep7/rep7.1/LowMouseTracker.class new file mode 100644 index 0000000000000000000000000000000000000000..dbb121a05b005a72f3d99a529e105d21271b7aab GIT binary patch literal 3552 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 IiGQK{KL!xLGynhq literal 0 HcmV?d00001 diff --git a/scripts/rep7/rep7.1/LowMouseTracker.java b/scripts/rep7/rep7.1/LowMouseTracker.java new file mode 100644 index 0000000..39acb89 --- /dev/null +++ b/scripts/rep7/rep7.1/LowMouseTracker.java @@ -0,0 +1,83 @@ +import javafx.animation.AnimationTimer; +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.stage.Stage; +import java.util.ArrayList; +import java.util.List; + +public class LowMouseTracker extends Application { + private final List<Double[]> mousePositions = new ArrayList<>(); + private boolean isRecording = false; + private boolean isReplaying = false; + private long lastReplayTime = 0; + private int replayIndex = 0; + private boolean highPrecisionMode = false; //鬮倡イセ蠎ヲ繝「繝シ繝�(true: CPU鬮倩イ�闕キ, false: CPU菴手イ�闕キ) + + @Override + public void start(Stage primaryStage) { + Canvas canvas = new Canvas(800, 600); + GraphicsContext gc = canvas.getGraphicsContext2D(); + gc.setFill(Color.BLACK); + gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); + + //繝槭え繧ケ縺ョ蜍輔″繧定ィ倬鹸縺吶k + canvas.setOnMouseMoved(event -> { + if (isRecording) { + mousePositions.add(new Double[]{event.getX(), event.getY(), (double) System.nanoTime()}); + } + }); + + AnimationTimer replayTimer = new AnimationTimer() { + @Override + public void handle(long now) { + if (isReplaying && replayIndex < mousePositions.size()) { + Double[] pos = mousePositions.get(replayIndex); + long timestamp = pos[2].longValue(); + + if (highPrecisionMode || now - lastReplayTime >= 16_000_000) { // 邏�16ms (60FPS逶ク蠖�) + gc.setFill(Color.RED); + gc.fillOval(pos[0], pos[1], 5, 5); + replayIndex++; + lastReplayTime = now; + } + } else if (replayIndex >= mousePositions.size()) { + isReplaying = false; + this.stop(); + } + } + }; + + //繧ッ繝ェ繝�け縺ァ險倬鹸繝サ蜀咲函繧貞�繧頑崛縺� + canvas.setOnMouseClicked(event -> { + if (!isRecording && !isReplaying) { + //險倬鹸髢句ァ� + mousePositions.clear(); + isRecording = true; + System.out.println("Recording started..."); + } else if (isRecording) { + //險倬鹸蛛懈ュ「&蜀咲函髢句ァ� + isRecording = false; + isReplaying = true; + replayIndex = 0; + System.out.println("Recording stopped. Replaying..."); + gc.setFill(Color.BLACK); + gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); + replayTimer.start(); + } + }); + + Scene scene = new Scene(new StackPane(canvas)); + primaryStage.setScene(scene); + primaryStage.setTitle("Mouse Tracker"); + primaryStage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} + diff --git a/scripts/rep7/rep7.1/MouseTracker$1.class b/scripts/rep7/rep7.1/MouseTracker$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ae81ebca36f21f6f09473d39b5b73a1a1c29a00a GIT binary patch literal 1430 zcmZuwOLH4V5dKD5d;OT$a_ry`2quY4Bst2)Cd3rV6Uj;Bl5AregA*PZuO_Pv>s{5( z${312z<~o*Tp%a7P{oaurBpajocTRmI6%>}YsylUx1^b#>BoHib@!kD{`Nb78xX@t zA#K9o7{DOISUqSfxfu%kGZ|**83v=KtFl)}Q|ncgwBHcNFh<B`Pk33!W|*x#5qskC zzNKvGOUoAio>11kP_&w^t;&HP$^ED_0*(_V#yG~2VVF7e5x%=CA~*1@JO4|Y?yd|e z{&m-PqnixrTz+d9CoySaisKYsV&J`~7)D*SE?b`X!u1^n_CQ;o=6D%rNEgPMs^5_N zq^oM(s~l(X8fCYu^Ii*-s}U%MOq`0<j$F^Gxhg7+;&q%eah~G>vgDvqAE_A(<$ft+ zh*fR+2FFF@=<LXd;Z&}gPXc<vcdXT&C(@2eCJGFb4|^1qpuOWsV(1czCN6VWAnG&m zTd`+iz%c9uzOyB~cJk!1&Sin)O-;!}({-9_p|o8^xzvM()Y`W=u3?dYdqPDCN19$D zVtIgC0r)FR)hyw<i5na@af{(}Uo~68^&_hscmb6py}ndoIMZM69t%q04&F6U=BQwa z;X+@i;~Rs)R5H5jdLF~s+;O4TG=x%qOY?J&<36fX)ke(O5f_!g+f#8u&=~3*D_CV1 zdQ5RwsZr^bT!lUzC587m)^!saDhgT**K++`-Vfq<*o24t%S1E7c+K_YN_%%lhMR&a zNxj<?enSgJZdn_i*obJh>Y{b1AK3`np)DzEvYF^@=F6Hg3c2Ll9`&W~)MeBR8XO<v z6NUj5iI6&L`iQ7VIMSl<j*KA<tw<H!4-^^ks_)CNOqEwsQFEqf0)bQ}qvsc(orYiE z(0?2oVAv$-BAwIvrZCq5D_rWpEIh~PuXM%mKCOea1LtYo!Uu^H8>f&u)bqjt*a0TK z$2W;IoouhXzzoAr`26sAsC<Fh6#hVdr8uzA#oVHi+|U1j$(cmFDyQ)FcTZ8GqxlT) zba7it#WdO9EgE{A!ZQ83sA-Sw156u_I*8w$>EP<mm`x(}A^DNgBkObr6NN6;baJUU zxrLacSv|^FBra|tk8KoSV-8<Y|9y=jzNPv61y}G4^XSs>eMsJ8F#f@|iM;VQ7E|Y7 dke81601s(5Xc9ldr}526JfeMsh||2&_aD*7OJo25 literal 0 HcmV?d00001 diff --git a/scripts/rep7/rep7.1/MouseTracker.class b/scripts/rep7/rep7.1/MouseTracker.class new file mode 100644 index 0000000000000000000000000000000000000000..259d31b630ec64f90c9bd0f1c3c88e637e4ff717 GIT binary patch literal 3534 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 HPjvkoth~4P literal 0 HcmV?d00001 diff --git a/scripts/rep7/rep7.1/MouseTracker.java b/scripts/rep7/rep7.1/MouseTracker.java new file mode 100644 index 0000000..8a6dc64 --- /dev/null +++ b/scripts/rep7/rep7.1/MouseTracker.java @@ -0,0 +1,82 @@ +import javafx.animation.AnimationTimer; +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.stage.Stage; +import java.util.ArrayList; +import java.util.List; + +public class MouseTracker extends Application { + private final List<Double[]> mousePositions = new ArrayList<>(); + private boolean isRecording = false; + private boolean isReplaying = false; + private long lastReplayTime = 0; + private int replayIndex = 0; + private boolean highPrecisionMode = true; //鬮倡イセ蠎ヲ繝「繝シ繝�(true: CPU鬮倩イ�闕キ, false: CPU菴手イ�闕キ) + + @Override + public void start(Stage primaryStage) { + Canvas canvas = new Canvas(800, 600); + GraphicsContext gc = canvas.getGraphicsContext2D(); + gc.setFill(Color.BLACK); + gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); + + //繝槭え繧ケ縺ョ蜍輔″繧定ィ倬鹸縺吶k + canvas.setOnMouseMoved(event -> { + if (isRecording) { + mousePositions.add(new Double[]{event.getX(), event.getY(), (double) System.nanoTime()}); + } + }); + + AnimationTimer replayTimer = new AnimationTimer() { + @Override + public void handle(long now) { + if (isReplaying && replayIndex < mousePositions.size()) { + Double[] pos = mousePositions.get(replayIndex); + long timestamp = pos[2].longValue(); + + if (highPrecisionMode || now - lastReplayTime >= 16_000_000) { // 邏�16ms (60FPS逶ク蠖�) + gc.setFill(Color.RED); + gc.fillOval(pos[0], pos[1], 5, 5); + replayIndex++; + lastReplayTime = now; + } + } else if (replayIndex >= mousePositions.size()) { + isReplaying = false; + this.stop(); + } + } + }; + + //繧ッ繝ェ繝�け縺ァ險倬鹸繝サ蜀咲函繧貞�繧頑崛縺� + canvas.setOnMouseClicked(event -> { + if (!isRecording && !isReplaying) { + //險倬鹸髢句ァ� + mousePositions.clear(); + isRecording = true; + System.out.println("Recording started..."); + } else if (isRecording) { + //險倬鹸蛛懈ュ「&蜀咲函髢句ァ� + isRecording = false; + isReplaying = true; + replayIndex = 0; + System.out.println("Recording stopped. Replaying..."); + gc.setFill(Color.BLACK); + gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); + replayTimer.start(); + } + }); + + Scene scene = new Scene(new StackPane(canvas)); + primaryStage.setScene(scene); + primaryStage.setTitle("Mouse Tracker"); + primaryStage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} -- GitLab