我的问题涉及创建一系列移动物体。目标是让每个人都创造出#34;符号"在创建时从x = 200开始,然后沿x轴移动。这可以通过创建单个对象来实现,但是当我尝试使它们出现在一个数组中时,它们只是出现在彼此的顶部(使球透明,这样你就可以看到它们堆叠)。有没有办法创建单个数组对象的数组,这样就不会发生。
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].addSymbol(i);
}
if(i > 200){
symbols[3].addSymbol(i);
}
}
int symbolY = 748-2*6-89-180;
int symbolX = 200;
int symbolPos;
boolean firstLoop = true;
int xSpeed;
class Symbol{
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);
}
}
}
答案 0 :(得分:0)
看起来很奇怪的第一部分是你有这些看似与Symbol实例相关的属性,而不是主要的范围:
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,它为面向对象的编程提供了一个很好的简单介绍