我在Processing中编写了一些代码,基本上我正在尝试做的是获得一个蓝色方块来“点亮”(变为较浅的阴影),然后再返回。我编写了一个超类和一个子类,在子类中有一个方法,用于实现这一点。这是代码:
超类
abstract class Squares {
color darkBlue = color(0, 0, 204);
color brightBlue = color(0, 0, 255);
Squares(float x, float y) {
_x = x;
_y = y;
}
float _x;
float _y;
color _c;
abstract void drawSquare();
abstract void brighten();
abstract void darken();
}
子类
class blueSquare extends Squares {
blueSquare(float x, float y) {
super(x, y);
_c = darkBlue;
}
void drawSquare() {
fill(_c);
rect(_x, _y, 240, 240);
}
void brighten() {
_c = brightBlue;
this.drawSquare();
}
void darken() {
_c = darkBlue;
this.drawSquare();
}
void onOff() {
this.brighten();
delay(500);
this.darken();
}
String toString() {
return ("Blue color is" + _c);
}
}
主要方法
blueSquare blueSquare = new blueSquare(310, 310);
void setup() {
background(50);
size(600, 600);
drawSquares();
}
void draw() {
blueSquare.onOff();
println(blueSquare);
}
void drawSquares() {
strokeWeight(5);
blueSquare.drawSquare();
}
onOff()
方法仅适用于println
中的setup()
的{{1}}的实际变化颜色(仅在delay()
的证据中),且仅在draw()
在它之前。如何在print('Sentence {} has a sentiment score of {}'.format(index,sentence_sentiment)
IndentationError:unexpected indent
中使其正常工作,以便在按下按钮,单击鼠标等时可以使其闪烁?感谢。
答案 0 :(得分:0)
不要在绘制中使用延迟,它将无法工作,因为绘制将绘制最后的颜色(在所有内容结束之前不会被调用)。我将使用一个线程和一个标志。线程可以等待500ms,然后更改标志。每次绘制矩形时,都会检查该标志并更改颜色填充。 您可以在参考中检查线程。
进行此更改,它将起作用(保持Squares不变):
超类:
blueSquare blue = new blueSquare(310, 310);
void setup() {
background(50);
size(600, 600);
}
void draw()
{
strokeWeight(5);
blue.drawSquare();
}
void mousePressed()
{
thread("onOff");
}
void onOff()
{
blue.flashing();
delay(500);
blue.noFlashing();
}
blueSquare
class blueSquare extends Squares
{
boolean _flashing;
blueSquare(float x, float y)
{
super(x, y);
this._c = darkBlue;
this._flashing=false;
}
void drawSquare()
{
if (this._flashing)
{
this._c=brightBlue;
}
else
{
this._c=darkBlue;
}
fill(_c);
rect(_x, _y, 240, 240);
}
void brighten()
{
this._c = brightBlue;
this.drawSquare();
}
void darken() {
_c = darkBlue;
this.drawSquare();
}
String toString()
{
return ("Blue color is" + _c);
}
void flashing()
{
this._flashing=true;
}
void noFlashing()
{
this._flashing=false;
}
}
答案 1 :(得分:0)
您不应在动画草图中使用delay()
功能。你也不应该使用单独的线程。
相反,请使用millis()
函数或frameCount
变量为动画添加时间。
这是一个简单的示例,显示了一个方块,您可以一次变为绿色1秒:
int startFrame;
int duration = 60;
boolean on = false;
void draw() {
if (on) {
background(0, 255, 0);
} else {
background(0, 0, 255);
}
if (startFrame + duration < frameCount) {
on = false;
}
}
void mousePressed() {
startFrame = frameCount;
on = true;
}
请注意,这只是一个示例,但您可以使用这些概念在动画中设置时间。