Przeciąganie figur przy przyciśnięciu myszy.

0

Witam, mam program, który przeciąga figury na ekranie jeśli kliknie się myszką w miejscu, gdzie ta figura jest i się ją przeciągnie. Mam podany kod z programu z wykładu, gdzie jest prostokąt i elipsa, u siebie mam dynamiczną tablicę prostokątów, zastanawiam się czemu w programie na wykładzie działa wszystko jak powinno, np. jak prostokąt i elipsa mają punkty wspólne, ale ja wezmę jakiś punkt z ich różnicy symetrycznej to przeciągnie się jedna figura, a w moim programie przeciągają się wszystkie figury, które są zlepione. Jeśli coś jest niejasne to proszę pisać.

Kod z wykładu:

private void doMove(MouseEvent e) {
            
            int dx = e.getX() - x;
            int dy = e.getY() - y;

            if (zrect.isHit(x, y)) {
                
                zrect.addX(dx);
                zrect.addY(dy);
                repaint();
            }

            if (zell.isHit(x, y)) {
                
                zell.addX(dx);
                zell.addY(dy);
                repaint();
            }

            x += dx;
            y += dy;            
        }

Kod mój:

private void doMove(MouseEvent e) {
           
        	int dx = e.getX() - x;
            int dy = e.getY() - y;

            for(ZRectangle a: shapes){
            	if (a.isHit(x, y)) {
	                
	            	a.addX(dx);
	            	a.addY(dy);
	            	repaint();
	            }
            	
            	
            }
            
        	
           	x += dx;
           	y += dy;
           
        }
0

Bo w pętli aktualizujesz stan wszystkich figur. Oj chyba nie ty pisałeś ten kod kłamczuszku :)

0

W sensie zrobiłem kopiuj-wklej tamtego kodu z góry i dostosowywałem :D Ale naprawdę, nie wiem jak to zmienić, mi się wydaje, że jeśli dana figura w którejś iteracji nie jest kliknięta, to isHit = false i nie wchodzi do tego if'a wtedy

0

Teraz zauważyłem że mając nawet coś takiego

private void doMove(MouseEvent e) {
            
            int dx = e.getX() - x;
            int dy = e.getY() - y;

            if (shapes.get(0).isHit(x, y)) {
                
                shapes.get(0).addX(dx);
                shapes.get(0).addY(dy);
                repaint();
            }

           

            x += dx;
            y += dy;            
        }

Robi mi źle, ponieważ gdy kliknę i przeciągnę w miejscu gdzie nie ma tej figury to ona mi się tam nagle pojawia, a kod jest dokładnie identyczny jak w przykładzie. Dlaczego to nie działa jak powinno?

1 użytkowników online, w tym zalogowanych: 0, gości: 1