如何解决如何在处理中创建一个简单的对象动画
问题
我正在尝试在 Processing 中创建一个简单的对象“汽车”动画。 我的代码是:
Car car;
void setup(){
size(800,600);
background(#818B95);
frameRate(30);
car = new Car(10,10);
}
void draw(){
//refresh background
background(#818B95);
print("-");
car.drawCar();
}
void mouseClicked() {
car.run();
}
public class Car implements Runnable{
private int pos_x,pos_y;
public Car(int pos_x,int pos_y){
this.pos_x = pos_x;
this.pos_y = pos_y;
}
public void drawCar(){
rect(pos_x,pos_y,10,10);
}
public void run(){
while(true){
pos_x += 10;
print("*");
delay(200);
}
}
}
当我点击鼠标按钮时,我希望看到汽车/矩形向右移动,但没有任何反应。
我添加了两个打印,以查看 draw 方法和我的 car.run 是否并行执行,显示一些 *
和 -
交替打印。
我看到的是一系列 -
,直到我点击,然后只打印 *
。
是否有可能启动一个新的对象线程会停止主绘制周期?
解决方案
这只是不使用线程的建议解决方案的变体(通过 Mady Daby)。
Car car;
void setup(){
size(800,10);
}
void draw(){
//refresh background
background(#818B95);
print("-");
car.drawCar();
}
void mouseClicked() {
car.moving = true;
}
public class Car{
private int pos_x,pos_y;
boolean moving = false;
public Car(int pos_x,10);
//animation
if(moving){
pos_x += 10;
print("*");
}
}
}
解决方法
您可以通过引入一个布尔变量来跟踪汽车是否应该向右移动 moving
,然后在 pos_x
为真时增加 moving
,从而使汽车向右移动。您还可以使用点击在移动和不移动之间切换。
Car car;
void setup() {
size(800,600);
background(#818B95);
frameRate(30);
car = new Car(10,10);
}
void draw() {
//refresh background
background(#818B95);
print("-");
car.drawCar();
}
void mouseClicked() {
car.toggleMoving();
}
public class Car implements Runnable {
private int pos_x,pos_y;
private boolean moving = false;
public Car(int pos_x,int pos_y) {
this.pos_x = pos_x;
this.pos_y = pos_y;
}
public void toggleMoving() {
moving = !moving;
}
public void drawCar() {
if (moving) {
this.run();
}
rect(pos_x,pos_y,10,10);
}
public void run() {
pos_x += 10;
print("*");
delay(200);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。