[英]How to enlarge/move polygon in Java?
所以我有以下代碼:
import java.awt.*;
public class Triangle extends Point {
protected int size;
private int p1x, p2x, p3x, p1y, p2y, p3y;
//Create a new triangle
public Triangle()
{
super();
size = 100;
yPos = 100;
}
public void reSize(int newSize) {
size = size + newSize;
}
//Draw the triangle with current specifications on screen.
public void display(Graphics g) {
p1x = (size / 3);
p2x = (size / 2);
p3x = ((2 * size) / 3);
p1y = ((2 * size) / 3);
p2y = (size / 3);
p3y = ((2 * size) / 3);
int[] xPoints = { p1x, p2x, p3x };
int[] yPoints = { p1y, p2y, p3y };
int npoints = 3;
g.fillPolygon(xPoints, yPoints, npoints);
}
}
下面的代碼用於放大/縮小三角形:
if (e.getSource() == makeBigger) {
aShape.reSize(20);
}
else if (e.getSource() == makeSmaller) {
aShape.reSize(-20);
}
問題是,我還希望能夠使用以下代碼將其拖動:
this.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
shapeColor = Color.black;
repaint();
}
public void mouseDragged(MouseEvent me) {
shapeColor = Color.lightGray;
aShape.moveXY(me.getX(), me.getY());
repaint();
}
});
this.addMouseMotionListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
shapeColor = Color.black;
repaint();
}
public void mouseDragged(MouseEvent me) {
shapeColor = Color.lightGray;
aShape.moveXY(me.getX(), me.getY());
repaint();
}
});
我看到的唯一方法是我可以擁有一個或另一個。 如何將其組合在一起才能同時具有這兩個功能? 目前,它可以完美地調整大小,但是說我將x / y坐標中的變量大小更改為yPos / xPos,就可以拖動三角形但不能對其進行整形。
謝謝!
您需要添加xOffset
和yOffset
成員,並在計算拐角點時將其添加到其中:
public class Triangle extends Point {
protected int size;
private int p1x, p2x, p3x, p1y, p2y, p3y;
private int xOffset=0;
private int yOffset=0;
// ...
//Draw the triangle with current specifications on screen.
public void display(Graphics g) {
p1x = (size / 3) + xOffset;
p2x = (size / 2) + xOffset;
p3x = ((2 * size) / 3) + xOffset;
p1y = ((2 * size) / 3) + yOffset;
p2y = (size / 3) + yOffset;
p3y = ((2 * size) / 3) + yOffset;
int[] xPoints = { p1x, p2x, p3x };
int[] yPoints = { p1y, p2y, p3y };
int npoints = 3;
g.fillPolygon(xPoints, yPoints, npoints);
}
public void moveXY(int deltaX, int deltaY) {
xOffset += deltaX;
yOffset += deltaY;
}
}
這應該讓您平移多邊形。 但是請注意,上面提到的moveXY
方法要求參數包含與之前的差異 ,而不是絕對位置。 如果您想要一個絕對位置,那很容易實現,可以作為練習。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.