运行Processing代码仅显示一辆Car实例,求问题原因
问题原因
你定义的xloc、yloc、windshieldControl是全局变量,不属于Car类的成员变量。当创建第二个Car实例honda时,会覆盖这三个全局变量的值,导致第一个实例leafy的位置被替换成honda的位置,所以运行时看起来只有一辆车。
修复方案
把这三个变量移到Car类内部,作为每个实例独有的成员变量,这样每个Car对象会维护自己的位置和状态:
修正后的主代码
Car leafy; Car honda; void setup(){ size(1920, 1080); leafy=new Car(0,900); honda=new Car(400, 500); } void draw(){ background(#736FEA); leafy.display(); honda.display(); leafy.movement(); honda.movement(); }
修正后的Car类代码
class Car { // 将变量移到类内部,作为实例成员 int xloc; int yloc; boolean windshieldControl; Car(int x, int y){ windshieldControl=true; xloc=x; yloc=y; } void display() { fill(#FFA600); rect(xloc, yloc, 150, 100); fill(#0B0B0D); circle(xloc+35, yloc+100, 30); circle(xloc+125, yloc+100, 30); fill(#7AF7F0); windshield(); } void movement() { if (keyPressed) { if (key=='d' || key=='D') { windshieldControl=true; xloc=xloc+5; } if (key=='a' || key=='A') { xloc=xloc-5; windshieldControl=false; } } } void windshield() { if (windshieldControl) { arc(xloc+150, yloc+30, 100, 50, PI/2, 3*PI/2); } else { arc(xloc, yloc+30, 100, 50, 3*PI/2, 5*PI/2); } } }
修改后,两个Car实例会各自维护自己的位置和状态,运行时就能看到两辆分别在(0,900)和(400,500)的车了。
内容的提问来源于stack exchange,提问作者jlrw
相关产品推荐
相关产品推荐

