2017-01-25 3 views
-1

программа обработки, которая рисует прямоугольник в верхнем левом углу окна и перемещает его прямо до тех пор, пока он не окажется на правом краю экрана. Затем переместите его вниз, пока он не окажется внизу. Затем переместите его влево. Наконец, верните его в верхнем левом углу и начните.Как нарисовать анимированный прямоугольник, который реализует некоторые анимации, используя «Обработка»

Вот мой незаконченный код, я не знаю, как позволить ему двигаться влево, когда она попадает в нижней строке:

void setup(){ 
size(500,500); 
} 
int x=0; 
int y=0; 
int dy=2; 
int dx=2; 
void draw(){ 


    x+=dx; 


    if(x>=(width-50)){ 
    dx=0; 
    y+=dy; 
    } 
    if(y>=(height-50)){ 
    dy=0; 
    x+=(-dx); 
    } 
    rect(x, y, 50,50, 7); 
} 
+0

Недостаточно двух переменных. Вам также понадобятся левые и правые. – Mistalis

+0

Смотрите также: http://learningprocessing.com/examples/chp05/example-05-08-edgespath – rnso

ответ

1

Это решение:

void setup(){ 
size(500,500); 
} 

int direction = 0; 
int x = 0; 
int y = 0; 

void draw(){ 

    switch (direction) 
    { 
    case 0: //Right 
     x += 1;   
     if (x+50 >= width) direction = 1; 
    break; 

    case 1: //Down 
     y += 1;   
     if (y+50 >= height) direction = 2; 
    break; 

    case 2: //Left 
     x -= 1;   
     if (x <= 0) direction = 3; 
    break; 

    case 3: //Up 
     y -= 1;   
     if (y <= 0) direction = 0; 
    break; 
    } 

    rect(x, y, 50,50, 7); 
} 

Я не тестировал его, но надеюсь, что общая идея понятна.

+0

большое спасибо. Оно работает! – zhmm

+0

Добро пожаловать! Не забудьте отметить ответ, что большинство ответов на ваш вопрос, так что другие пользователи могут видеть, что проблема была решена. – Titulum

+0

Незначительная ошибка: x = 0 должно быть «int x = 0»; то же самое для y = 0. – rnso

1

В дополнение к ответу @ Titulum я также рекомендую вам использовать объекты, поскольку это делает жизнь намного легче, чем иметь дело с точками так, как вы.

Rectangle rect; 
int direction; 
int speed; 

void checkDirections(){ 
switch (direction) 
    { 
    case 0: //Right 
     rect.x += speed;   
     if (rect.x+rect.x1 >= width) direction = 1; 
    break; 

    case 1: //Down 
     rect.y += speed;   
     if (rect.y+rect.y1 >= height) direction = 2; 
    break; 

    case 2: //Left 
     rect.x -= speed;   
     if (rect.x <= 0) direction = 3; 
    break; 

    case 3: //Up 
     rect.y -= speed;   
     if (rect.y <= 0) direction = 0; 
    break; 
    } 
} 


void setup(){ 
    size(500,500); 
    direction = 0; 
    speed = 5; 
    rect = new Rectangle(0, 0, 50, 50); 
} 

void draw(){ 
    background(255); 
    checkDirections(); 
    rect.drawRect(); 
} 

class Rectangle{ 
    float x,y,x1,y1; 
    Rectangle(float x, float y, float x1, float y1){ 
    this.x = x; 
    this.y = y; 
    this.x1 = x1; 
    this.y1 = y1; 
    } 
    void drawRect(){ 
    fill(0); 
    rect(x,y,x1,y1); 
    } 
} 
Смежные вопросы