【问题标题】:Processing draw() method use not working处理 draw() 方法使用不工作
【发布时间】:2013-02-27 10:08:55
【问题描述】:

我有代码可以更改 PShape 的颜色和不透明度,我正在调试它,我 99% 确定所有方法都有效。我做了一个延迟方法,因为处理不再有一个内置的延迟方法。当我调试它时,我注意到它只会在所有延迟调用完成后绘制它应该绘制的内容(当没有更多延迟时,它会绘制最新版本的 PShape)。所以我查看了我的延迟方法,我弄乱了它,但仍然没有正确的结果。有人可以向我解释为什么 PShape 没有更新吗?

EDIT* 我收到了一个告诉我使用 noLoop() 的答案,我用谷歌搜索了如何使用它,但似乎找不到正确的放置位置。我已经在设置中尝试了 flash 方法的第一行(但后来我意识到我有没有更新的实时按钮)

下面的代码使 PShape 闪烁两次:

    noLoop();      
root.setVal(newVal);
root.highlight(0,255,0);
root.setopacity(200);
redraw();
try {Thread.sleep((long)1500);} 
catch (InterruptedException ex) {println("Error!");}
root.setopacity(0);
redraw();
try {Thread.sleep((long)1500);} 
catch (InterruptedException ex) {println("Error!");}
root.setopacity(200);
root.clearHL();//just to make sure I repeated these methods
root.highlight(0,255,0);
redraw();
try {Thread.sleep((long)1500);} 
catch (InterruptedException ex) {println("Error!");}
root.clearHL();
redraw();
loop();
return root;

【问题讨论】:

    标签: java processing


    【解决方案1】:

    您需要显示更多代码(例如setup 函数),
    但是,您的问题似乎源于您在尝试手动重绘对象之前可能没有调用noLoop();

    这将导致对象在被处理自动重绘覆盖之前闪烁一帧。

    顺便说一句,如果您愿意,可以使用Timer 处理延迟等问题。

    或者使用Sleep:

    import java.lang.Thread.*;
    
    noLoop();
    root.setVal(newVal);
    root.highlight(0,255,0);
    root.setopacity(200);
    redraw();
    Thread.sleep(1500);;
    root.setopacity(0);
    redraw();
    Thread.sleep(1500);
    root.setopacity(200);
    root.clearHL();//just to make sure I repeated these methods
    root.highlight(0,255,0);
    redraw();
    Thread.sleep(1500);
    root.clearHL();
    redraw();
    

    【讨论】:

    • 所以我应该放 noLoop();就在所有 redraw() 函数和结束后的调用 loop() 之前?
    • @Runeony1 不,如果您运行noloop,则不应再次运行loop,除非您想清除所有自定义抽奖。
    • 好的,我把 noLoop() 放在方法的第一行,其他任何地方都没有 loop() 或 noLoop() 调用...不起作用
    • 我已为您的延迟方法添加了替换项。看看这是否适合你。
    • 我尝试离开并退出 redraw() 调用,但仍然没有显示任何内容
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多