2014-05-09 4 views
-1

Я пытаюсь добавить анимацию в свой код. Я до сих пор являюсь объектом, который можно изменить, нажав кнопку. Поэтому каждый раз, когда вы нажимаете кнопку, объект изменяется (это дерево, и я меняю его ветви). Можно ли добавить какую-то анимацию, такую ​​как снег? Проблема в том, что я должен поместить его внутри метода draw, поэтому он будет вызван автоматически и заставит нас думать, что это анимация. Таким образом, я также должен постоянно добавлять фона/кнопку и все. Но я не могу сделать это с моим основным объектом (деревом), поскольку я хочу изменить его только при нажатии кнопки.Изменить объект, нажав кнопку при показе анимации

Есть ли какое-либо решение?

Заранее спасибо

+0

Я уже закодировал анимацию. Но, как я уже сказал, я сделал это внутри метода draw (который выполняется автоматически все время). Таким образом я создаю новые фон/кнопки и все элементы снова и снова (и, следовательно, дерево скрыто за ними) – shieldcy

+0

Вы можете отредактировать свой вопрос или удалить его, если хотите. Просто попробуйте что-то конкретное, например «Как рисовать эллипс с помощью Win32/C++?», Хорошие вопросы касаются этих строк. – sashoalm

+1

Пожалуйста, разместите часть своего кода и добавьте некоторые конкретные вопросы или проблемы, которые у вас есть. Вот так хорошо с удовольствием помогаем вам. –

ответ

1

Чтобы сохранить некоторые объекты при обновлении других, вы либо:

  1. Обновить только часть экрана. Например, нарисуйте фигуру (прямоугольник или что-то еще) с фоновым цветом, удаляющим только часть экрана

  2. Условно-выбор выделенных объектов. Используйте флаги для выборочного розыгрыша, что вам нужно, каждую ничью и используйте background(), чтобы очистить весь экран за каждый цикл розыгрыша.

  3. Использовать слои. Удалите один слой, а не другой, как вам нужно, отобразите все их в режиме рисования. Обычно это делается с объектами PGraphics. Поиск обработки + слоев для просмотра образцов. Здесь и/или в processing forum.

EDIT: Вот некоторые простые примеры каждого подхода:

1.

/** 
* A very simple example of erasing just part of the screen to 
* selective persist draws 
**/ 


void setup() { 
    size(400, 400); 
    background(0); 
    noStroke(); 
} 

void draw() { 
    fill(0); 
    rect(0, 0, width/2, height); 

    fill(120); 
    ellipse(width/4, frameCount%width, 100, 100); 
} 

void mouseMoved() { 
    fill(255); 
    ellipse(mouseX, mouseY, 10, 10); 
} 

2.

/** 
* A very simple example of conditionally draw stuf 
* to selective persist draws 
**/ 

ArrayList <PVector> points = new ArrayList <PVector>(); 
boolean showBalls = true; // any key to toogle 

void setup() { 
    size(400, 400); 
    background(0); 
    noStroke(); 
} 

void draw() { 
    background(0); 
    fill(30); 
    rect(frameCount%width, 100, 200, 200); 

    fill(120); 
    ellipse(width/2, frameCount%width, 150, 150); 

    fill(255); 
    if (showBalls) { 
    for (PVector p : points) { 
     ellipse(p.x, p.y, 10, 10); 
    } 
    } 
    if (points.size() > 500) { 
    points.clear(); 
    } 
} 

void mouseMoved() { 
    ellipse(mouseX, mouseY, 10, 10); 
    points.add(new PVector(mouseX, mouseY)); 
} 

void keyPressed() { 
    showBalls = !showBalls; 
} 

3.

/** 
* A very simple example of using PGraphics as layers 
* to selective persist draws 
**/ 

PGraphics layer; 

void setup() { 
    size(400, 400); 
    layer = createGraphics(width, height); 
    layer.beginDraw(); 
    layer.fill(255); 
    layer.endDraw(); 
    background(0); 
    noStroke(); 
} 

void draw() { 
    background(0); 
    fill(30); 
    rect(frameCount%width, 100, 200, 200); 

    fill(120); 
    ellipse(width/2, frameCount%width, 150, 150); 
    image(layer, 0, 0); 
} 

void mouseMoved() { 

    layer.beginDraw(); 
    layer.ellipse(mouseX, mouseY, 10, 10); 
    layer.endDraw(); 
} 
Смежные вопросы