Canvas em WTK

2 respostas
D

Por Favor, alguém pode me ajudar???

Preciso fazer um efeito sinuca usando canvas, assim: colocar dois circulos na tela, um em movimento e outro parado, quando o que está em movimento tocar o que estiver parado, o que estava parado inicia um movimento e o que estava em movimento pára.Para isso utilizei 3 arquivos:Circulo.java, ex.java e MCanvas.java.Consegui fazer um círculo tocar no outro e parar, mas não consegui fazer o que estava parado entrar em movimento. Defini um método “mover” que somente determina o movimento do primeiro circulo, mas não consigo implementar dentro do mesmo método um código que faça o segundo circulo que estava parado se movimentar.
O que devo fazer??será que posso implementar um outro código dentro do mesmo método “mover” para um outro circulo diferente???

HELP!!!PLEASE!!! :frowning: :cry:

2 Respostas

D

kara…ateh quero te ajudar…mas naum entendi nada do que vc falou, achu que eh o sono…4:30 da manhã…hehe

posta o código ai pra gnt dar uma olhada, ajuda!!!

Flw!!

D

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.
; :wink: :wink:

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.<em>;

import javax.microedition.midlet.</em>;

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!!!

Criado 1 de dezembro de 2007
Ultima resposta 2 de dez. de 2007
Respostas 2
Participantes 2