[java] annimatie met Thread en JPanel?

Pagina: 1
Acties:

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
Vraag: Ik teken in 4 threads steeds een toren en een muur (1 toren en 1 muur van de speler en 1 toren en 1 muur van de tegestander (speler Of computer).

Mijn probleem is dat bij 3 van deze threads de plaatjes van de ene stand naar de andere springen (van beginstand direct naar de eindstand) ik wil graag dat deze 3 het net als de eerste in stapjes naar het eindpunt gaat. (moet dus lijken of hij schuift). Volgens mij heb ik de laatste 3 hetzelfde geprogrammeerd als de eerste maar de laatste 3 doen dus niet de tussenstapjes.

heeft iemand enig idee waardoor dit komt (heeft waarschijnlijk iets te maken met JPanel of paintComponent(Graphics g) maar weet het niet zeker.

Hieronder volgt de code.

Deze werkt wel!!!!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package arcomage;

import javax.swing.*;

public class TowerThread extends Thread implements Runnable
{
    CardPanel tower;
    JLayeredPane BT;
    Arcomage eenPotjeArcomage;
    int Tower = 30;
    private final Integer TOWERLAYER = new Integer(-4);

  public TowerThread(CardPanel tower, JLayeredPane BT, Arcomage eenPotjeArcomage)
  {
    this.tower = tower;
    this.eenPotjeArcomage = eenPotjeArcomage;
    this.BT = BT;
  }

  public void run()
  {
  while(true){
   drawTower();}
  }

  public void drawTower()
  {
     int a = eenPotjeArcomage.getTower();    // hoe hoog de toren/muur moet worden getekend

    if(a>=100)
    a=105;

    //if(tower !=null)
    try{
      BT.remove(tower);
    }
    catch(ArrayIndexOutOfBoundsException e){System.out.print(e.toString());}

    tower.setBounds(140,185-Tower,46,131);
    try{
      BT.add(tower,TOWERLAYER);
    }
    catch(ArrayIndexOutOfBoundsException e){System.out.print(e.toString());}


    if(Tower < a)
    Tower++;
    else if(Tower > a)
    Tower--;

    try{
    Thread.sleep(1000);
    }catch(InterruptedException e){}
  }
}

en deze werken niet :'(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import javax.swing.*;

public class ETowerThread extends Thread implements Runnable
{
    CardPanel eTower;
    JLayeredPane BT;
    Arcomage eenPotjeArcomage;
    int currentHeight = 30;
    private final Integer TOWERLAYER = new Integer(-4);

  public ETowerThread(CardPanel eTower, JLayeredPane BT, Arcomage eenPotjeArcomage)
  {
    this.eenPotjeArcomage = eenPotjeArcomage;
    this.BT = BT;
    this.eTower = eTower;
  }

  public void run()
  {
    while(true)
    { drawETower();}

  }

  public void drawETower()
  {
     int a = eenPotjeArcomage.getETower();
    if(a>=100)
    a=105;

    //if(eTower != null)
    try{
      BT.remove(eTower);
    }
    catch(ArrayIndexOutOfBoundsException e){}

    eTower.setBounds(440,185-a,85,131);
    try{
      BT.add(eTower, TOWERLAYER);
    }
    catch(ArrayIndexOutOfBoundsException e){System.out.print(e.toString());}

    if(currentHeight < a)
    currentHeight++;
    else if(currentHeight > a)
    currentHeight--;

     try{
    Thread.sleep(1000);
    }catch(InterruptedException e){}
  }

}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import javax.swing.*;

public class WallThread extends Thread implements Runnable
{
    CardPanel wall;
    JLayeredPane BT;
    Arcomage eenPotjeArcomage;
    int Wall = 15;
    private final Integer TOWERLAYER = new Integer(-4);

  public WallThread(CardPanel wall, JLayeredPane BT, Arcomage eenPotjeArcomage)
  {
    this.wall =wall;
    this.BT = BT;
    this.eenPotjeArcomage = eenPotjeArcomage;
  }

  public void run()
  {
    while(true)
    {drawWall();}
  }

  public void drawWall()
  {
    int a = eenPotjeArcomage.getWall();
    if(a>100)
    a=100;

    //if(wall != null)
    try{
      BT.remove(wall);
    }
    catch(ArrayIndexOutOfBoundsException e){}


    wall.setBounds(190,210-a,22,111);
    try{
      BT.add(wall,TOWERLAYER);
    }
    catch(ArrayIndexOutOfBoundsException e){System.out.print(e.toString());}


    if(Wall < a)
      Wall++;
    else if(Wall > a)
      Wall--;

     try{
    Thread.sleep(1000);
    }catch(InterruptedException e){}
  }
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import javax.swing.*;

public class EWallThread extends Thread implements Runnable
{
    CardPanel eWall;
    JLayeredPane BT;
    Arcomage eenPotjeArcomage;
    int EWall = 15;

    private final Integer TOWERLAYER = new Integer(-4);

  public EWallThread(CardPanel eWall, JLayeredPane BT, Arcomage eenPotjeArcomage)
  {
    this.eWall = eWall;
    this.eenPotjeArcomage = eenPotjeArcomage;
    this.BT = BT;
  }

  public void run()
  {
    while(true)
    {drawEWall();}
  }

  public void drawEWall()
  {
    int a = eenPotjeArcomage.getEWall();
    if(a>100)
      a=100;

    //if(eWall != null)
    try{
      BT.remove(eWall);
    }
    catch(ArrayIndexOutOfBoundsException e){}

    eWall.setBounds(450,210-a,22,111);
    try{
      BT.add(eWall,TOWERLAYER);
    }
    catch(ArrayIndexOutOfBoundsException e){System.out.println(e.toString());}

     if(EWall < a)
     EWall++;
    else if(EWall > a)
     EWall--;

     try{
    Thread.sleep(1000);
    }catch(InterruptedException e){}
  }
}

heb ook in het volgende topic gekeken maar daar kon ik het antwoord ook niet echt vinden. Dit probleem lijkt wel heel erg op de mijne maar ik teken dus een JPanel in plaats van een label
[topic=511311/1/25]

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zie hier twee paren van klassen die vrijwel gelijk zijn.... Het lijkt mij toch vanzelfsprekend dat je zulk copy-paste werkt wilt voorkomen en zoekt naar een desig waarin je mooi de specifieke functionaliteit van de beide varianten kunt verwerken, maar toch geen duplicatie van code hebt? Naar deze copy-paste oplossing zal je over een paar jaar echt met afschuw terug kijken ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
Op maandag 24 juni 2002 20:00 schreef mbravenboer het volgende:
Ik zie hier twee paren van klassen die vrijwel gelijk zijn.... Het lijkt mij toch vanzelfsprekend dat je zulk copy-paste werkt wilt voorkomen en zoekt naar een desig waarin je mooi de specifieke functionaliteit van de beide varianten kunt verwerken, maar toch geen duplicatie van code hebt? Naar deze copy-paste oplossing zal je over een paar jaar echt met afschuw terug kijken ;) .
je bedoeld dat als ik het Panel nou eens een algmene naam geef en de setbounds meegeef en ook de int meegeef dan kan ik met een class af. ja daar zit wat in. maar dat mag het probleem niet zijn. maar zal het even proberen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Weet je wat het voordeel is van gemeenschappelijke code voor beide klassen? Als het mis gaat, gaat het ook goed mis :+ .

Er is niets vervelender dan bugs die maar in 1 klasse of situatie voorkomen: als je een probleem hebt, kan je maar beter dat probleem op zoveel mogelijk plekken tegenkomen. Als je het probleem voor hebt opgelost, heb je het gelijk overal opgelost.

Stel dat je nog iets vergeten bent in een bepaalde klasse: je past het aan in 1 van de varianten, maar dus niet in de andere... Je stuit er wellicht niet op dat je het in de andere klasse ook aan had moeten passen -> verstopte bug....

Als je code hebt die maar in hele specifieke situaties wordt gebruikt is het lastig debuggen: beter kan je code hebben die heel intensief wordt gebruikt: als daar iets mis mee is, merk je het vrijwel meteen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
mbravenboer. nog bedankt voor de tip. moeten we over het algemeen voor school ook op die manier programmeeren maar had het even snel in elkaar geklooit (moet je natuurlijk ook nooit doen). zal toch wel een foutje in de andere classes hebben gezeten. heb de werkende namelijk omgeschreven en die werkt nu bij allemaal wel
(teminste in zoverre dat ie alles annimeert. het enige probleem is dat ie alles op dezelfde hoogte wil tekenen maar dat is ongetwijfeld mijn fout) zal dus nog ff verder debuggen. als het niet help post ik hier wel weer maar niet binnen een uur want voyager is er op. dus tot zo

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

nerd ;)

*is ook ff voyager kijken* :P


aaaarrgghhh.. een 2 delige aflevering... :(
Pagina: 1