Avatar billede morteeart Nybegynder
06. januar 2005 - 11:54 Der er 6 kommentarer og
1 løsning

Animation i java

hey,

Vil gerne lave en animation i java ?

Har lavet: http://www.thedeathart.dk/paste/index.php?p=38

Skal have draw_car() til at ændre værdi f.eks. via et loop, men den resetter ikke baggrunden, og derfor bliver resultatet ødelagt.

Hvordan gør jeg dette, så det ser rigtigt ud ?
Avatar billede jakoba Nybegynder
06. januar 2005 - 12:21 #1
en del af animation er at huske hvor dit tegnede billede er. i din kode benytter du to konstanter:
    public void paint(Graphics g) {
        draw_car(100,100,g);          //  100,100  er placeringen
    }
og der gælder det om at udskifte kontanterne med variable. fx ved at opretter et pat variable i din klasse:
public class grafiksjov extends JFrame
{
    int xPos = 100;
    int yPos = 100;          // 2 variable i klassen
...
og bruge de variable til at styre hvor draw_car tegner:
    public void paint(Graphics g) {
        draw_car(xPos,yPos,g);          //  xPos,yPos  er placeringen
    }

sidste skridt er så at sørge for at de variable ændres lid for hvert kald til paint, sådan at billedet flytter sig
    public void paint(Graphics g) {
        xPos = xPos+2;                  // flyt en smule
        yPos = yPos+2;                  // før vi gentegner
        draw_car(xPos,yPos,g);          //  xPos,yPos  er placeringen
    }

men der kommer en masse ander ting der skal fixes, indtil videre tegner vi jo blot ovenpå, hvergang billedet 'flyttes' skal det også fjernes (slettes) fra der det var tegnet før.
Avatar billede jakoba Nybegynder
06. januar 2005 - 12:29 #2
det kan d fx gøre ved at gentegne med en fave der svarer til vaggrundsfarven:
    public void paint(Graphics g) {
        // sæt tegnefarven til at være lig med baggrundsfarve
        draw_car(xPos,yPos,g);          // tegner billedet usynligt.
        // sæt tegnefarven til at være lig med tegnefarve igen.
        xPos = xPos+2;                  // flyt en smule
        yPos = yPos+2;                  // før vi gentegner
        draw_car(xPos,yPos,g);          //  xPos,yPos  er placeringen
    }

det med at ændre ternefarven gør du med
    g.setColor( nyFarve )
men jeg har aldrig prøvet så det må du selv lege med.
Avatar billede morteeart Nybegynder
06. januar 2005 - 13:14 #3
Fik et forslag om at sætte et Jpanel på, og så opdatere det.

Kan du evt. give et eksempel på hvordan man adder paint(Graphics g) til et JPanel ?
og også gerne hvordan man resetter det.

Har prøvet det med at replace med anden farve, og det virker fint den ene vej, men hvis objektet kører den anden vej fejler det.
Avatar billede jakoba Nybegynder
06. januar 2005 - 13:52 #4
Nej, så velkendt med Java er jeg ikke.

På den anden side kan jeg heller ikke rigtig se behovet. Metoden 'paint' bliver automatisk kaldt i en applet når skærmen refreshes (ca 20-50 gange i sekundet). Jeg ser ingen grund til at involvere andre API faciliteter som du så også skal sætte dig grundigt ind i for at kunne bruge dem fornuftigt. Een ting ad gangen er som regel den bedste måde at lære, bagefter kan du så lære at gøre programmeringen nemmere ved at genbruge eksisterende automatikker der gør en større af arbejdet for dig :-))
Avatar billede morteeart Nybegynder
06. januar 2005 - 14:00 #5
har fået det løst, læste lidt på webcafe.dk's tutorials

Final kode:

import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class grafiksjov extends JFrame
{

    int xPos = 400;
    int yPos = 400;

    public grafiksjov(String str)
    {
      super(str);
    }

    public void draw_car(int x, int y,Graphics g)
    {
      g.drawLine(x,y,x+100,y);
      g.drawLine(x+100,y,x+130,y+30);
      g.drawLine(x+130,y+30,x+160,y+30);
      g.drawLine(x,y,x-30,y+30);
      g.drawLine(x-30,y+30,x-60,y+30);
      g.drawLine(x-60,y+30,x-60,y+60);
      g.drawLine(x+160,y+30,x+160,y+60);
      g.drawLine(x-60,y+60,x-20,y+60);
      g.drawLine(x+160,y+60,x+120,y+60);
      g.drawLine(x+20,y+60,x+80,y+60);
      g.fillOval(x-20,y+50,40,40);
      g.fillOval(x+80,y+50,40,40);
    }

    public void update(Graphics g)
    {
      xPos = xPos-1;
      yPos = yPos;

      g.setColor(Color.white);
      g.fillRect(0,0,600,600);

      g.setColor(Color.black);
      draw_car(xPos,yPos,g);

      repaint();

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

    public void paint(Graphics g)
    {
      update(g);
    }


    public static void main(String[] args)
    {
      grafiksjov frame = new grafiksjov(" Kørende Bil ");
      frame.setSize(600,600);
      frame.show();
    }

}

Men du kom med bevægelses løsningen, og derfor skal du have halvdelen af pointene.
Avatar billede snoop_one Nybegynder
06. januar 2005 - 14:23 #6
Du kan evt. kigge i understående link:
http://duke.csc.villanova.edu/jss1/examples/examples08.zip

Og tage et kig ind i rebound.java og reboundPanel.java filerne hvor der bliver lavet en lille animation.
Avatar billede morteeart Nybegynder
07. januar 2005 - 18:20 #7
jakoba ville du ikke have halvdelen af points ?

snoop_one nej tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester