奇妙に見える最初の部分は、あなたがシンボルインスタンスにではなく、メインの範囲に関連するように見えるこれらの性質を持っていることです:
:
int symbolY = 748-2*6-89-180;
int symbolX = 200;
int symbolPos;
boolean firstLoop = true;
int xSpeed;
おそらくあなたは、このような何かを意味し
int numSymbols = 100;
int symbolXPos;
int i;
Symbol[] symbols = new Symbol[numSymbols];
void setup() {
for (int i = 0; i < numSymbols; i++) {
symbols[i] = new Symbol();
}
size(748, 1024);
}
void draw() {
background(255, 255, 255);
i++;
if (i > 10) {
symbols[1].addSymbol(i);
}
if (i > 100) {
symbols[2].iaddSymbol(i);
}
if (i > 200) {
symbols[3].addSymbol(i);
}
}
class Symbol {
int symbolY = 748-2*6-89-180;
int symbolX = 200;
int symbolPos;
boolean firstLoop = true;
int xSpeed;
void addSymbol(int xSpeed) {
if (firstLoop == true) {
symbolXPos = xSpeed;
firstLoop = false;
} else {
xSpeed = symbolX + (xSpeed - symbolXPos);
fill(0, 0, 0, 20);
noStroke();
rect(xSpeed, symbolY, 36, 36, 18);
}
}
}
それでも、コードはもっと複雑で、クラスやオブジェクト/インスタンスに関する混乱があるように感じます。
単純にシンボルを水平方向に移動しようとしているとしましょう。あなたはこのような単純なクラスを使用することができます。
class Symbol{
//position
float x;
float y;
//speed
float speedX;
void updateAndDraw(){
//update position
x += speedX;
//reset to 0 if out of bounds
if(x > width) x = 0;
//draw
rect(x, y, 8, 8, 18);
}
}
これは、x、y、および今のちょうどspeedX
を持っています。 xプロパティは速度だけインクリメントされ、更新された位置はシンボルを画面上に表示するために使用されます。
ここで上記のクラスを使用して、基本的なスケッチです:
int numSymbols = 100;
Symbol[] symbols = new Symbol[numSymbols];
void setup(){
size(748, 1024);
fill(0, 0, 0, 64);
noStroke();
for (int i = 0; i < numSymbols; i++) {
symbols[i] = new Symbol();
//use different speeds to easily tell the symbols appart
symbols[i].speedX = 0.01 * (i+1);
//increment y position so symbols don't overlap
symbols[i].y = 10 * i;
}
}
void draw(){
background(255);
for (int i = 0; i < numSymbols; i++) {
symbols[i].updateAndDraw();
}
}
class Symbol{
//position
float x;
float y;
//speed
float speedX;
void updateAndDraw(){
//update position
x += speedX;
//reset to 0 if out of bounds
if(x > width) x = 0;
//draw
rect(x, y, 8, 8, 18);
}
}
キーポイントは次のとおりでない外、クラス内のシンボルに関連するプロパティを使用して
- (グローバルスコープを意味しています)
- 異なる位置を使用するため、シンボルインスタンスは重複しません。
Daniel Shiffman's Objects tutorialを必ずチェックしてください。オブジェクト指向プログラミングの素敵で簡単な紹介を提供します