|
[ voxi @ 23.12.2006. 22:03 ] @
| Treba mi malo da mi samo razjasnite jednu nejasnocu!!!
Pravim neku jednostavnu igricu i tu koristim niti ali nista slozeno medjutim javlja mi se problem kada pozovem f-ju repaint() iz run() metode nece da je pozve ne javi gresku kompajlira i radi aplet ali jednostavno nece da odradi repaint a drugi problem je da vrednosti promenljivih y1 i y2 nece da promeni u metodi run() cak sam pokusao da prosledim argumente u drugu f-ju pa tamo da dodelim vrednosti ali ni to nije islo
Igrica se zasniva na tom da dole ima mali top kojim se za F1 treba pucati a sa streslicama pomerati levo i desno e sada kod mene kordinate y1 i y2 bi trebale da budu kordinate metka koje menjam medjutima javlja mi se gore navedeni problem a ja nikako ne mogu da uocim gresku sobzirmo da su promenljive y1 i y2 protected tipa po defoultu pa svi u jednoj kalasi imaju pravo na pristp i menjanje ali ovde to ne radi.
Napomena: ja aplete radim u javi 1.4 posto tamo ima poseban dio za aplete to mi je lakse tako da ne moram stalno da iz dosa kompajliram
Ako mognete samo da mi odgonetnete ovaj problem kako bi nastavio sa zapocetom igricom
Code: /*
* Pucacina.java
*
* Created on Subota, 2006, Decembar 23, 20.09
*/
package Pucacina;
import java.awt.Event;
import java.awt.*;
import java.lang.*;
/**
*
* @author xx
*/
public class Pucacina extends java.applet.Applet implements Runnable {
/** Initialization method that will be called after the applet is loaded
* into the browser.
*/
int left=250,right=250, x=250;
public int y1,y2;
public void init() {
}
public void run(){
//System.out.print ("Pocinje RUN ");
int pomY1,pomY2;
for(int i=45;i>0;i--){
y1=i*10;
y2=(i-1)*10;
repaint();
System.out.println("y1="+y1+"y2="+y2);
try{
Thread.sleep(500);
}
catch(Exception e){}
}
}
public boolean keyDown(Event dogadjaj, int dirka){
//System.out.println("dirak="+dirka);
switch(dirka){
case Event.LEFT:
if(x>5)
x-=5;
break;
case Event.RIGHT:
if(x<480)
x+=5;
break;
case Event.F1:
Pucacina p = new Pucacina();
Thread t = new Thread(p);
t.start();
break;
}
// System.out.println("x="+x);
repaint();
return true;
}
public void paint (Graphics g){
this.setSize(500,500);
setBackground(Color.blue);
g.setColor(Color.black);
//g.drawRect(x,480,20,20);
g.fillRect(x,480,20,20);
g.fillRect(x+7,475,6,5);
g.setColor(Color.yellow);
System.out.println("Ovde se treba izcrtati: y1="+y1+"y2="+y2+" x="+x);
g.drawLine(x+8,y1,x+8,y2);
System.out.println("Crta");
}
}
HVALA |
[ igisar @ 24.12.2006. 08:21 ] @
Probaj da das neke pocetne vrednosti
znaci na primer x1=1; y1=1;
tako bi trebalo da radi
[ igisar @ 24.12.2006. 08:44 ] @
i jos jedan savet ako napises
Code:
try{
Thread.sleep(500);
}
catch(Exception e){}
}
ceo program ce ti se "blokirati"
[ djalfirevic @ 24.12.2006. 08:55 ] @
Citat: igisar: Probaj da das neke pocetne vrednosti
znaci na primer x1=1; y1=1;
tako bi trebalo da radi
Probao sam ja da stavim pocetne vrednosti ali bezuspesno. Ne kapiram uopste u cemu je stvar...
[ voxi @ 24.12.2006. 10:43 ] @
Nece se program blokirati zbog Thread.sleep(500) a zadavenje pocetnih
vrednosti nije potrebno posto su promenljive definisane u okviru klase a ne
u okviru neke f-ije i samim tim dobijaju pocetne vrednosti 0 po defoultu ali
pokusao sam ja i sa zadavnjem vrednosti.
Ajd ako neko skonta neka javi ali totalno je nelogican problem
[ Toxter @ 24.12.2006. 11:52 ] @
Umesto:
Code: case Event.F1:
Pucacina p = new Pucacina();
Thread t = new Thread(p);
t.start();
break;
stavi:
Code: case Event.F1:
Thread t = new Thread(this);
t.start();
break;
Stalno si instancirao novi objekat i novi thread (Thread t ...) je pozivao njegov paint().
pozzzzzz
[ igisar @ 25.12.2006. 11:46 ] @
Citat: voxi: Nece se program blokirati zbog Thread.sleep(500) a zadavenje pocetnih
vrednosti nije potrebno posto su promenljive definisane u okviru klase a ne
u okviru neke f-ije i samim tim dobijaju pocetne vrednosti 0 po defoultu ali
pokusao sam ja i sa zadavnjem vrednosti.
Ajd ako neko skonta neka javi ali totalno je nelogican problem
da u pravu si nisam imao puno vremena pa sam na brizinu odgovorio    
[ Java Beograd @ 27.12.2006. 12:45 ] @
Metoda paint(Graphics g) je ASINHRONA, u samoj virtuelnoj masini. Dakle, ti je pozoveš, a Java VM, kaže "OK, kad ne bude bilo pametnijeg posla, odradiću ovo, tj. nacrtaću na ekran".
Nema načina da ovo zaobiđeš. Neka poboljšanja možeš da postigneš ako crtaš u off screen graphics, naprimer, ali opet imaš paint, kad off screen image hoćeš da nacrtaš na ekran.
[ SluX @ 27.12.2006. 22:19 ] @
Izvini kolega, ali i nisi bas u pravu.
1) Poziv na repaint metodu ima veze sa time sto spominjes-odmah se vrati izlaz pozivajucoj metodi, a zahtev se smesti u red za cekanje
2) Naravno da mozes da koristis aktivni render i prilikom koriscenja paint metode-samo pokupi graphics objekat tvog prozora/componete preko metoda getGraphics...
U principu to sto si rekao ima smisla, samo si izneo netacne cinjenice.
Opet, ko god zeli da zna vise o ovome neka kuca u googlu nesto tipa java active rendering.
[ voxi @ 28.12.2006. 18:08 ] @
Hvala moci za ovo ali ajd ko ce mi sada ovo reci radim neku jednostvnu
aplikaciju bezano za TCP/Ip to jest soket programiranje e sad ja
Unesem BufferedReader inFromUser = new BufferedReader(new
InputStreamReader(System.in));
E zasto ja sada kada dodje ovo System.in program se ne zaustavi pa da ja
iz konzolnog prozora preko tastature unesem neki string ili tako nesto
ajd mi to pomozite ako mozete posto trebam da posaljem neki strin na
server aplikaciju
[ djalfirevic @ 28.12.2006. 19:31 ] @
Citat: voxi: Hvala moci za ovo ali ajd ko ce mi sada ovo reci radim neku jednostvnu
aplikaciju bezano za TCP/Ip to jest soket programiranje e sad ja
Unesem BufferedReader inFromUser = new BufferedReader(new
InputStreamReader(System.in));
E zasto ja sada kada dodje ovo System.in program se ne zaustavi pa da ja
iz konzolnog prozora preko tastature unesem neki string ili tako nesto
ajd mi to pomozite ako mozete posto trebam da posaljem neki strin na
server aplikaciju
Zato sto posle ovog:
Code:
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
, verovatno nisi stavio:
Code:
inFromUser.read(); //ili inFromUser.readLine()
, nakon cega se u stvari zablokira ulaz i ceka se da korisnik unese nesto.
[ voxi @ 28.12.2006. 23:23 ] @
Hvala to sam bio uradio ali sama na jednom mjestu izostavio "" kod "n"
tako da nije ni radilo onda
[ voxi @ 02.01.2007. 20:07 ] @
Evo jos jedno pitanje vezano za prvi problem (oko apleta) imama sledeci kod
Code:
/*
* Pucacina.java
*
* Created on Subota, 2006, Decembar 23, 20.09
*/
package Pucacina;
import java.awt.Event;
import java.awt.*;
import java.lang.*;
/**
*
* @author xx
*/
public class Pucacina extends java.applet.Applet implements Runnable {
/** Initialization method that will be called after the applet is loaded
* into the browser.
*/
int left=5,right=250, x=250;
public int y1,y2,xMet;
Meteori mt=new Meteori();
Thread thMt=new Thread(mt);
public void init( ) {
setBackground(Color.blue);
thMt.start();
}
public void run(){
//System.out.print ("Pocinje RUN ");
xMet=x;
for(int i=45;i>0;i--){
y1=i*10;
y2=(i-1)*10;
xMet=xMet;
// init();
repaint();
left--;
//System.out.println("y1="+y1+"y2="+y2+" left="+left);
try{
Thread.sleep(5);
}
catch(Exception e){}
}
}
public boolean keyDown(Event dogadjaj, int dirka){
//System.out.println("dirak="+dirka);
switch(dirka){
case Event.LEFT:
if(x>5)
x-=10;
break;
case Event.RIGHT:
if(x<480)
x+=10;
break;
case Event.F1:
// Pucacina p = new Pucacina();
Thread t = new Thread(this);
t.start();
break;
}
// System.out.println("x="+x);
repaint();
return true;
}
public void precrtaj(){
System.out.println("Precrtava");
repaint();
}
public void paint (Graphics g){
this.setSize(500,500);
g.setColor(Color.black);
//g.drawRect(x,480,20,20);
g.fillRect(x,480,20,20);
g.fillRect(x+7,475,6,5);
g.setColor(Color.yellow);
//System.out.println("Ovde se treba izcrtati: y1="+y1+"y2="+y2+" x="+x+" left="+left);
g.drawLine(xMet+8,y1,xMet+8,y2);
System.out.println("x= " +mt.getXm()+" y="+mt.getYm());
g.drawOval(mt.getXm(),mt.getYm(),35,35);
//System.out.println("Crta");
}
}
class Meteori implements Runnable{
int xm=45,ym;
public void run() {
Pucacina pc=new Pucacina();
for(int i=0;i<30;i++){
setYm(i*10);
System.out.println("ym->"+ym);
pc.precrtaj();
try{
Thread.sleep(100);
}
catch(Exception e){}
}
}
public void setXm(int xm){
this.xm=xm;
}
public int getXm(){
return this.xm;
}
public void setYm(int ym){
this.ym=ym;
}
public int getYm(){
return this.ym;
}
}
E sad mene zanima kako da iz klase Meteori pozovem Paint metodu koja se nalazi u klasi Pucacina. Inace klasa Meteri racuna i odredjuje koorditnate meteora ili bolje receno u mom slucaju jednog kruga koji pada odozkog. Meni se javlja problem sto ne izcrta novo mjesto kruga dok ne pritisnem F1 ako ko moze da mi pomogne bio bi mu zahvalan puno
[ Toxter @ 02.01.2007. 21:27 ] @
Probaj ovako:
Code:
import java.awt.Color;
import java.awt.Event;
import java.awt.Graphics;
public class Pucacina extends java.applet.Applet implements Runnable {
/** Initialization method that will be called after the applet is loaded
* into the browser.
*/
int left=5,right=250, x=250;
public int y1,y2,xMet;
Meteori mt=new Meteori();
Thread thMt=new Thread(mt);
public void init( ) {
mt.setPucacina(this);
setBackground(Color.blue);
thMt.start();
}
public void run(){
//System.out.print ("Pocinje RUN ");
xMet=x;
for(int i=45;i>0;i--){
y1=i*10;
y2=(i-1)*10;
xMet=xMet;
// init();
repaint();
left--;
//System.out.println("y1="+y1+"y2="+y2+" left="+left);
try{
Thread.sleep(5);
}
catch(Exception e){}
}
}
public boolean keyDown(Event dogadjaj, int dirka){
//System.out.println("dirak="+dirka);
switch(dirka){
case Event.LEFT:
if(x>5)
x-=10;
break;
case Event.RIGHT:
if(x<480)
x+=10;
break;
case Event.F1:
// Pucacina p = new Pucacina();
Thread t = new Thread(this);
t.start();
break;
}
// System.out.println("x="+x);
repaint();
return true;
}
public void precrtaj(){
System.out.println("Precrtava");
repaint();
}
public void paint (Graphics g){
this.setSize(500,500);
g.setColor(Color.black);
//g.drawRect(x,480,20,20);
g.fillRect(x,480,20,20);
g.fillRect(x+7,475,6,5);
g.setColor(Color.yellow);
//System.out.println("Ovde se treba izcrtati: y1="+y1+"y2="+y2+" x="+x+" left="+left);
g.drawLine(xMet+8,y1,xMet+8,y2);
System.out.println("x= " +mt.getXm()+" y="+mt.getYm());
g.drawOval(mt.getXm(),mt.getYm(),35,35);
//System.out.println("Crta");
}
}
class Meteori implements Runnable{
int xm=45,ym;
Pucacina pc=null;
public void run() {
for(int i=0;i<30;i++){
setYm(i*10);
System.out.println("ym->"+ym);
pc.precrtaj();
try{
Thread.sleep(100);
}
catch(Exception e){}
}
}
public void setPucacina(Pucacina pucacina) {
this.pc = pucacina;
}
public void setXm(int xm){
this.xm=xm;
}
public int getXm(){
return this.xm;
}
public void setYm(int ym){
this.ym=ym;
}
public int getYm(){
return this.ym;
}
}
Slicno je resenje kao i prosli put. Razmisli :)
Pozzz
edit: Mali savet: Trudi se da ti se svaka klasa nalazi u posebnom fajlu i razdvoji thread klase
od main klase appleta.
[ voxi @ 02.01.2007. 22:40 ] @
E svaka cast eliko HVALA skonto sam sta je to jest bilo mi je jasno i pre da nije isti objekat to jest nid od potrebnog objekta ali nisam skonto kako da resim tako da mi je ovo puno pomoglo jos jednom veliko HVALA
I jos jednom amlo pitanje kod appleta main klas to jest f-ja je sta init ili paint il sta vec koliko sam primetio prov se izvrsi citava init f-ja a onda paint
Svako dobro Toxter
[ djalfirevic @ 03.01.2007. 19:00 ] @
Citat: voxi: E svaka cast eliko HVALA skonto sam sta je to jest bilo mi je jasno i pre da nije isti objekat to jest nid od potrebnog objekta ali nisam skonto kako da resim tako da mi je ovo puno pomoglo jos jednom veliko HVALA
I jos jednom amlo pitanje kod appleta main klas to jest f-ja je sta init ili paint il sta vec koliko sam primetio prov se izvrsi citava init f-ja a onda paint
Svako dobro Toxter
init() metodu poziva Web citac prilikom ucitavanja apleta u JVM Web citaca.
paint() metodu poziva Web citac kada je potrebno da aplet iscrta svoj sadrzaj.
Uvek se prvo init() poziva pa onda paint().
[ voxi @ 06.01.2007. 18:24 ] @
Upomocc !
Zasto nece da upise u fajl ovaj kod dole zanli neko ziv!
void upisUFajl(){
System.out.println("Pocinenje upis");
try{
BufferedWriter out = new BufferedWriter(new
FileWriter("Upisi.txt",true));
out.write("Nece da upisee");
out.flush();
out.close();
}
catch(IOException e){System.out.println("greska");}
[ voxi @ 06.01.2007. 19:07 ] @
Skonto sam sada radi
pozz
[ voxi @ 07.01.2007. 12:19 ] @
Zasto kada stvim BufferedWriter out = new BufferedWriter(new
FileWriter("Upisi.txt",true)); nece da kreira fajl ako ne navedem tacnu
putnju treba mi to hitno
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|