Přesunutí objektů pomocí point – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přesunutí objektů pomocí point – Java – Fórum – Programujte.comPřesunutí objektů pomocí point – Java – Fórum – Programujte.com

 

Gustik
~ Anonymní uživatel
6 příspěvků
14. 10. 2012   #1
-
0
-

Zdravím. Potřeboval bych trochu poradit. Mám projekt v Javě a já bych potřeboval, aby  byla ty autíčka tak jak na obrázku. Zatím mám to jedno vpravo dole a prý to jde udělat pomocí point.

Kód, který kreslí autíčko je :

       //zde kreslím spodní čárku + celé přední kolo
          p.presunKurzor(1,3);
          p.cara(1,0);
          p.cara(1,1);
          p.cara(1,-1);
          p.cara(-1,-1);
          p.cara(-1,1);          
          p.presunKurzor(4,3);  //Zde kreslím spodek vozidla + celé zadní kolo
          p.cara(2,0);
          p.cara(1,1);
          p.cara(1,-1);
          p.cara(-1,-1);
          p.cara(-1,1);
          p.presunKurzor(8,3);  //Zde kreslím celou karoserii
          p.cara(1,0);
          p.cara(0,2);
          p.cara(-2,0); 
          p.cara(-1,1); 
          p.cara(-2,0); 
          p.cara(-1,-1); 
          p.cara(-2,-1); 
          p.cara(0,-1); 
          p.presunKurzor(5,6);
          p.cara(1,-1);
          p.presunKurzor(3,5);
          p.cara(4,0);
          p.presunKurzor(4,3);
          p.cara(0,2);
          p.presunKurzor(5,3);
          p.cara(1,2);        
Nahlásit jako SPAM
IP: 80.251.245.–
ingiraxo+15
Grafoman
14. 10. 2012   #2
-
0
-

ty chceš jenom nakopírovat celý auto na jiný pozice?

Vytvoř si objekt toho auta který kreslíš a potom jen nakopíruj ty objekty a změn pozice každýho bodu nebo v lepším případdě celý autičko kresli na rectangle a potom jen posun celej rectangle na jinou pozici

Point je objekt, kterej má proměnný X a Y (souřadnice)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gustik
~ Anonymní uživatel
6 příspěvků
14. 10. 2012   #3
-
0
-

Jen nevím, jak to nakreslit na rectangle. Můžu poslat zdrojové soubory v Bluej

Nahlásit jako SPAM
IP: 80.251.245.–
Gustik
~ Anonymní uživatel
6 příspěvků
14. 10. 2012   #4
-
0
-

#2 ingiraxo
To vím, ale bylo mi řečeno, že to mám nakreslit do pointu a tomu dát určité souřadnice

Nahlásit jako SPAM
IP: 80.251.245.–
ingiraxo+15
Grafoman
14. 10. 2012   #5
-
0
-

nebo si můžeš vytvořit speciální kreslící panel, kterej bude obsahovat pouze to auto, bude mít vlastně stejnou velikost jako šířka a výška auta a potom jen vykreslíš 3x ten panel vždy na jiným místě

to si asi špatně pochopil, nedovedu si představit, jak by si něco kreslil do pointu :)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gustik
~ Anonymní uživatel
6 příspěvků
14. 10. 2012   #6
-
0
-

Dostali jsme takovýto projekt v bluej a řekl nám, že pomocí pointů to tam máme dát 3x to autíčko tak jak je na obrázku výše http://leteckaposta.cz/351256029

Nahlásit jako SPAM
IP: 80.251.245.–
Gustik
~ Anonymní uživatel
6 příspěvků
14. 10. 2012   #7
-
0
-
Nahlásit jako SPAM
IP: 80.251.245.–
ingiraxo+15
Grafoman
14. 10. 2012   #8
-
0
-

pomocí pointu to spíš máte celý posunout, takže to znamená, že pravděpodobně to je jak jsem psal - celý kreslit do rectanglu nebo na panel a to celý pak jen posunout

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Gustik0
Duch
14. 10. 2012   #9
-
0
-

Je to možné že to má býti tak, a pomůžeš mi s tím?

Nahlásit jako SPAM
IP: 80.251.245.–
ingiraxo+15
Grafoman
14. 10. 2012   #10
-
0
-

však to máš hotový, jen to auto nakresli na novej panel a ten panel vykresli jenom na hlavní okno.. to sami pak uděláš u zbývajících 2 panelů

(tohle je jen jedna z možností - podmě mě ta nejsnažší)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
14. 10. 2012   #11
-
0
-

tak jsem měl čas a podíval se na to.. sice nedělám v Javě vůbec ale takto teda moje "garáž" vypadá:

Dělal jsem to tím jak jsem říkal.. prostě třída Auto, kde si vytvoříš jedno auto a potom pomocí offsetů jen posuneš podle pozice X a Y na jinou pozici celý auto

při vykreslení, jen upravuješ body o určitou pozici 

 Objekt Pera (strará se o čáry)

public class Pen {

    public static final int STEP = 20;
    private List<Line> lines = new ArrayList<>();
    private Point lastPos = new Point();

    public void newLine(int x1, int y1, int x2, int y2) {
        Line l = new Line(x1 * STEP, y1 * STEP, x2 * STEP, y2 * STEP);
        lines.add(l);
        lastPos = l.getEnd();
    }

    public void line(int x, int y) {
        Line l = new Line(lastPos.x, lastPos.y, x * STEP, y * STEP);
        lines.add(l);
        lastPos = l.getEnd();
    }

    public void draw(Graphics g, int offsetX, int offsetY) {
        for (Line line : lines) {
            line.draw(g, offsetX * STEP, offsetY * STEP);
        }
    }
}

Objekt jedné čáry 

public class Line {

    private Point begin;
    private Point end;

    public Line(int x1, int y1, int x2, int y2) {
        begin = new Point(x1, y1);
        end = new Point(x2, y2);
    }

    public Point getEnd() {
        return end;
    }

    public void draw(Graphics g, int offsetX, int offsetY) {
        g.drawLine(begin.x + offsetX, begin.y + offsetY, end.x + offsetX, end.y + offsetY);
    }
}

a objekt auta 

public class Car {

    private Pen pen = new Pen();
    private Point offset = new Point();

    public Car(int x, int y) {
        offset = new Point(x, y);
       
        // základní karoserie
        pen.newLine(1, 3, 0, 3);
        pen.line(0, 2);
        pen.line(2, 1);
        pen.line(8, 1);
        pen.line(8, 3);
        pen.line(7, 3);
        // pravé kolo
        pen.newLine(7, 3, 6, 4);
        pen.line(5, 3);
        pen.line(6, 2);
        pen.line(7, 3);
        // levé kolo
        pen.newLine(1, 3, 2, 2);
        pen.line(3, 3);
        pen.line(2, 4);
        pen.line(1, 3);
        // spojení mezi koly + čára na předním kole nahoru
        pen.newLine(5, 3, 3, 3);
        pen.line(3, 1);
        // čára ve středu karoserie a přes sklo
        pen.newLine(4, 3, 5, 1);
        pen.line(4, 0);
        // střecha
        pen.newLine(6, 1, 5, 0);
        pen.line(3, 0);
        pen.line(2, 1);
    }

    public void draw(Graphics g) {
        pen.draw(g, offset.x, offset.y);
    }
}

V mainu pak můžeš mí třeba toto: 

public class MainWindow extends JFrame {

    private List<Car> cars = new ArrayList<>();

    public MainWindow() {
        initComponents();
        createBufferStrategy(2);

        cars.add(new Car(1, 1));
        cars.add(new Car(10, 1));
        cars.add(new Car(1, 5));
        cars.add(new Car(10, 5));
        cars.add(new Car(1, 9));
        cars.add(new Car(10, 9));
    }

    private void drawGrid(Graphics g) {

        final int size = (gPanel.getWidth() > gPanel.getHeight()) ? gPanel.getWidth() : gPanel.getHeight();
        int n = Pen.STEP;
       
        for (int i = 0; i < size; i += Pen.STEP) {
            g.drawLine(0, n, gPanel.getWidth(), n);
            g.drawLine(n, 0, n, gPanel.getHeight());
            n += Pen.STEP;
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics gp = gPanel.getGraphics();
       
        gp.setColor(new Color(220, 220, 220));
        drawGrid(gp);
        gp.setColor(Color.black);

        for (Car car : cars) {
            car.draw(gp);
        }
    }
    // Generated code...
}

Kdyby bylo něco nejasný, tak comment... nemam to dělaný zrovna nejlepším řešením, ale pro ty učely více aut to funguje =D

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
sleepy0
Stálý člen
14. 10. 2012   #12
-
0
-

Sak si nakresli auto vytvor z neho Shape a ten potom budes presuvat pomocou AffineTransform. K tomu Shapu: http://docs.oracle.com/javase/tutorial/2d/geometry/index.html .

A na presuvanie pouzivas:

// kod
Shape auto = // nieco
AffineTransform af;
// dalsi kod
af = af.move(dx, dy); // o aky kusok sa ma posunut a ktorym smerom
auto = af.createTransformedShape(auto);
// teraz uz iba prekreslis


Nahlásit jako SPAM
IP: 158.195.195.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

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