我正在为我正在制作的课程构建游戏,我需要绘制一些圆形和矩形。我的问题是根据用户输入,每个圆圈和矩形都会有未知数量。例如,如果用户说5
,则会有25
个圈子。我想做的是创建一个圆类和矩形类,这样我就可以使用循环来改变x和y坐标。
是否可以使用参数化构造函数(x和y坐标)创建这样的类"circle"
和类"rectangle"
来实现此目的?
仅供参考 - 这是一个pegboard游戏,你将球放在顶部,球从钉子上弹起,直到被长方形支架夹住。我相信这个游戏的真名叫pachinko。与此图像类似,但只是一个矩形而不是三角形设置。
https://i.ytimg.com/vi/b3B8qiXyTJ8/maxresdefault.jpg
最后,我必须只使用swing
和/或javafx
(我不熟悉)
答案 0 :(得分:1)
实际上,您可以为Rectangle和Circle创建类,每个类都有各自的x和y坐标。这样的类可能看起来像这样:
public class Rectangle
{
int x;
int y;
public Rectangle(int x, int y)
{
this.x = x;
this.y = y;
}
}
如果要创建此类的新实例,只需使用:
Rectangle myRect = new Rectangle(0,25);
上面的代码将创建一个Rectangle
的实例,其x和y坐标分别设置为0和25。
希望这有帮助。
编辑1
你的循环可以做这样的事情来按照你的建议在循环中启动你的矩形:
Rectangle[] myRectangles = new Rectangle[25];
int x = 0;
int y = 0;
for (int i = 0; i < 25; i++)
{
x = x+25;
y = y+20;
myRectangles[i] = new Rectangle(x,y);
}
答案 1 :(得分:0)
好的伙计们,我想出了这个。对于我想做的事情,我只需要在另一个类中使用paintComponent()方法,然后让我的另一个类Ball()通过在我的paintBall()方法参数中请求一个Graphics对象来使用这个paintComponent() ,然后使用此图形对象绘制我的Ball类对象。我的回答似乎很冗长,但看看下面的Ball类,你就可以得到它。
package main;
import java.awt.Graphics;
public class Ball{
private int x = 5;
private int y = 30;
// This method will help to animate the current object,
// The xPos and yPos will change, then frame will be repainted
public void setPos(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
public void drawBall(Graphics g)
{
g.setColor(Color.GREEN);
g.fillOval(x, y, 30, 30);
}
}
所以基本上,我只需要在我的主类中创建一个Ball实例,就像这样:
Ball myBall = new Ball();
myBall.drawBall(克); //其中g是主类中paintComponent()的图形对象。
答案 2 :(得分:0)
不,你永远不会错过使用paintComponent(); 玩弄这个。 包宠物;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import javax.swing.*;
public class pet extends JPanel implements MouseListener{
public static JFrame frame = new JFrame("frame");
public pet() throws IOException{
setPreferredSize(new Dimension(870, 675)); //configuring panel
addMouseListener(this);
}
public static void main(String[] args) throws IOException{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new pet();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
frame.addMouseListener(new pet());
}
public void paintRectangleAtPoint(Graphics g, int x, int y, String shoutout){
g.setColor(Color.BLACK);
g.drawRect(x, y, 100,100);
System.out.println("See, you can send variables in, too "+ shoutout");
}
public void paintStuff(Graphics g, int x, int y){
g.setColor(Color.BLACK);
g.drawOval(x, y, 100,100);
}
@Override
public void mouseClicked(MouseEvent e) {
paintStuff(frame.getGraphics(),e.getX(), e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
PaintRectangleAtPoint(frame.getGraphics(),100, e.getY(), "entered");
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}