Anonymní profil Ni3mm4nd – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Ni3mm4nd – Programujte.comAnonymní profil Ni3mm4nd – Programujte.com

 

Příspěvky odeslané z IP adresy 88.146.162.–

Ni3mm4nd
Java › Pomalé překreslování
22. 11. 2012   #167388

#5 sleepy
Tyyyyyjo ten VolatileImage je fakt super :-D jakto, že jsem ho nikdy predtim nevidel? :-D Je to fakt super dík chlape :-)

Ni3mm4nd
Java › Pomalé překreslování
22. 11. 2012   #167381

#2 liborb
Však na Timer už to mám ... 

timer = new Timer(rychlost, this);
public void actionPerformed(ActionEvent e) {
        repaint();
    }

zkuste si to spustit a uvidíte :-)

Ni3mm4nd
Java › Pomalé překreslování
21. 11. 2012   #167337

Dobrý den,

potřeboval bych pomoci s objasněním a pokud možno vyřešením problému. Udělal jsem si fraktálový strom a chtěl bych ho rozpohybovat. Udělal jsem si Timer nějakou náhodu aby to simulovalo neurčitost větru a pomalu překresluji obraz. Narazil jsem na problém že repaint již namalované čáry nevymaže ale pouze přikreslí nové tudíž jsem musel po každém vykreslení stromu celou oblast vyplnit bíle a zase nakreslit strom ale zdá se, že je vyplňování strašlivě pomalé a když si program pustím téměř nic nevidím.

Zajímavé ovšem je, že když po okně jezdím myší tak se vše vykresluje krásně a plynule ale nesmím přestat jezdit ... Můžete mi tento problém objasnit a pokud možno navrhnout řešení? zde je zdrojový kód zkuste si ho pustit a řekněte, jeslti vám co také dělá já to testoval na 3 PC a dělá to všude.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;

/**
 *
 * @author kadlejan
 */
public class FractalTree extends JFrame implements ActionListener{
    Timer timer;
    public double uhel = -90;
    public String vyber = "01";
    Random r = new Random();
    int rychlost = 100;
    
    public FractalTree() {
        super("Fraktálový strom");
        setBounds(100, 100, 800, 600);
        setResizable(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        timer = new Timer(rychlost, this);
        timer.setInitialDelay(1000);
        timer.start();
    }
 
    private void drawTree(Graphics g, int x1, int y1, double uhel, int hloubka) {
        if (hloubka == 0) return;
        int x2 = x1 + (int) (Math.cos(Math.toRadians(uhel)) * hloubka * 10.0);
        int y2 = y1 + (int) (Math.sin(Math.toRadians(uhel)) * hloubka * 10.0);
        g.drawLine(x1, y1, x2, y2);
        drawTree(g, x2, y2, uhel - 20, hloubka - 1);
        drawTree(g, x2, y2, uhel + 20, hloubka - 1);              
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, 800, 800);
        g.setColor(Color.BLACK);
        g.drawString("Fraktálový strom", 100, 100);
        drawTree(g, 400, 500, uhel, 9);
        
        double nahoda = Math.random();
        if (nahoda < 0.2){
        uhel = uhel - 0.9;
        }
        if(nahoda >= 0.2 && nahoda >=0.8){
            uhel = uhel;
        }
        if(nahoda > 0.8){
            uhel = uhel +0.9;
        }     
    }

    @Override
    public void actionPerformed(ActionEvent e) { 
        repaint();
    }
}

Děkuji za pomoc.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý