如何在处理中创建一个类的多个实例

问题描述 投票:0回答:1

当我运行此代码时,我只看到一辆车 主要代码如下:

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();
}

这是汽车对象代码:

int xloc;
int yloc;
boolean windshieldControl;
class Car{
   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);

    }
  }
}

当我运行它时,我只看到绘制了一辆车 - 只出现了第二辆车。有人知道发生了什么事吗? 感谢您的帮助。

我原本希望在不同的地点看到两辆不同的汽车,但我只看到了一辆车。不知道为什么...,

object processing instance multiple-instances
1个回答
0
投票

您已成功创建两个 Car 实例。您只能看到一辆车,因为它们共享相同的 x 和 y 坐标,因此会重叠绘制。当您创建汽车时,当前您只需重新分配全局

xloc
yloc
变量。

因此,当您创建第一辆车时,您为

xloc
yloc
分配值
0, 900
- 当您创建第二辆汽车时,您将这些相同的值重新分配给
400, 500

您的

int xloc
和 int
yloc
是在类之外定义的,因此它们并不像您期望的那样真正属于该类。

如果您查看 p5 的 class 文档,您会发现您想要使用

this.<varname>' inside the 
constructor` 来定义属于您的类的特定实例的属性。

class Frog { 

   constructor(x, y, size) 
   { 
      // This code runs once when an instance is created. 
      this.x = x; 
      this.y = y; 
      this.size = size; 
   }
}

这样,frag 的每个实例都有单独的 x 和 y 值,现在您只需在两个类实例中使用位于类外部的变量。

© www.soinside.com 2019 - 2024. All rights reserved.