Poxa, se puder me ajudar eu agradeceria muito…estou quebrando a cabeça p conseguir fazer isso, e de repente a solução é até simples, mas não t conseguindo vizualizar!!!
aí vai o código dos 3 arquivos java salvos no SRC de um projeto que abri no WTK.
O primeiro é o ex.java, que não sofre alterações no código, para qq programinha de canvas ele seria basicamente o mesmo , sem alterações.
import javax.microedition.lcdui.;
import javax.microedition.midlet.;

public class ex extends MIDlet implements CommandListener
{
private Display tela;
private MCanvas canvas;
private Command sair;
public void startApp()
{
tela = Display.getDisplay(this);
canvas = new MCanvas();
sair = new Command(“sair”, Command.EXIT, 1);
canvas.addCommand(sair);
canvas.setCommandListener(this);
tela.setCurrent(canvas);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command comando, Displayable displayable)
{
destroyApp(false);
notifyDestroyed();
}
}
Este é o Circulo.java, onde tem o método ‘mover’ que é quem determina qual será o movimento do círculo e onde ele deve parar.
public class Circulo
{
private int x, y, a, b;
private boolean aux = true;
public void setX(int x)
{
this.x = x;
}
public void setY(int y)
{
this.y = y;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void mover(int tela)
{
int x = 140;
if (y <= tela && aux == true ) {
y++;
if (y == x) {
aux = false;
}
}
else
{
b–;
if (a == b) {
aux = true;
}
}
}
}
E este é o MCanvas.java
import javax.microedition.lcdui.;
import javax.microedition.midlet.;
import java.util.*;
public class MCanvas extends Canvas
{
private Timer relogio;
private TimerTask tarefa;
private Circulo[] q;
private int x, y, a, b;
public MCanvas()
{
x = 0;
y = 0;
a = 100;
b = 140;
q = new Circulo[1];
for (int i=0; i<1; i++)
{
q[i] = new Circulo();
q[i].setX(i*50 + 110); //o segundo numero de dentro do parenteses determina a posição horizontal da bolinha
q[i].setY(10); // O número entre parenteses determina onde a bolinha terá o inicio de seu movimento no campo vertical.
}
}
public void paint(Graphics g)
{
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(255, 0, 0);
g.fillArc(a, b, 20, 20, 0, 360);//define o circulo vermelho que está parado no centro da tela
synchronized(this) //Delimita uma região de execução em paralelo, parecido com o try. Para sincronizar o relógio.
{
g.setColor(0,0,255);
for(int i=0; i<1; i++)
{
g.fillArc(q[i].getX(), q[i].getY(), 20, 20, 0, 360);
}
}
}
public void showNotify()
{
relogio = new Timer();
tarefa = new TimerTask()
{
public void run() // Cérebro da animação, define a animação
{
for(int i=0; i<1; i++)
{
q[i].mover(getHeight());//Chama o método para mover o circulo
repaint();
}
}
};
long intervalo = 1000/260; //Define a velocidade, para aumentar a velocidade aumenta o denominador
relogio.schedule(tarefa, intervalo, intervalo); //tarefa (tarefa que será executada, três quadrados se movimentando), 1º intervalo (tempo de execução),
2º intervalo (fatia para cada execução)
// Método que executa os quadrados
}
public void hideNotify()
{
relogio.cancel();
}
}
Na Verdade issso é algoritmo puro, mas o problema é justamente esse, algoritmo!!!