所以Processing曾经有一个"框架"允许一些多功能的类。我试图在屏幕上获取PApplet窗口的位置,但没有"框架"上课,我似乎无法做到。
旧方式:
int fX = frame.getX();
or
int fX = frame.getLocationOnScreen().x;
整个事情应该是动态的,因此在Processings setup()中设置窗口位置不是一种选择。
希望有人能提供帮助,
问候! 乙
答案 0 :(得分:1)
您最好只使用旧的frame
变量。
对于大多数此类内容,您应该使用surface
类型的新PSurface
变量。您可以查看PSurface
here的来源。仔细阅读,我们发现surface
变量不允许我们访问框架的位置。
由于您无法从surface
变量到达该位置,因此您必须更深入并获得原生组件(在默认情况下,为{ {1}}扩展了一个awt SmoothCanvas
)。我通过查看Canvas
可用here的源代码来解决这个问题。
这个代码看起来有点粗,因为你必须做一些演员:
PSurfaceAWT
答案 1 :(得分:0)
除了凯文(Kevin)的出色答案之外,还有一个函数将其与P2D
,P3D
和FX2D
渲染器的等效项一起使用:
void setup(){
size(300,300,FX2D);
}
void draw(){
background(0);
text(getLocationOnScreen().toString(),10,15);
}
PVector getLocationOnScreen(){
PVector location = new PVector();
// JAVA2D
if(surface instanceof processing.awt.PSurfaceAWT){
java.awt.Frame frame = ( (processing.awt.PSurfaceAWT.SmoothCanvas) ((processing.awt.PSurfaceAWT)surface).getNative()).getFrame();
java.awt.Point point = frame.getLocationOnScreen();
location.set(point.x,point.y);
}
// P2D, P3D
else if(surface instanceof processing.opengl.PSurfaceJOGL){
com.jogamp.newt.opengl.GLWindow window = (com.jogamp.newt.opengl.GLWindow)(((PSurfaceJOGL)surface).getNative());
com.jogamp.nativewindow.util.Point point = window.getLocationOnScreen(new com.jogamp.nativewindow.util.Point());
location.set(point.getX(),point.getY());
}
// FX2D
else if(surface instanceof processing.javafx.PSurfaceFX){
javafx.scene.canvas.Canvas canvas = (javafx.scene.canvas.Canvas)((processing.javafx.PSurfaceFX)surface).getNative();
javafx.geometry.Point2D point = canvas.localToScreen(0,0);
location.set((float)point.getX(),(float)point.getY());
}
return location;
}
(使用导入,代码代码更为优雅,但由于我保留了完全合格的类名,因此可以更轻松地在新草图中复制/粘贴/测试该函数)