我想重新创建一个用Python制作的游戏,在学习了Swing的基础知识后,我开始绘制图形。现在我被卡住了。我创建了一个黑色方块,并希望将其坐标向右移动10。我想要的是能够通过移动方块来制作动画并能够响应用户的动作。现在我想要的只是在创建窗口时(现在),在运行时将正方形重绘为右边10个像素。
在Python Tkinter中,这很简单:
square = myCanvas.create_rectangle(10, 10, 20, 20)
然后在代码中,我会这样做:
x = 10
while True:
x = x + 10
myCanvas.coords(square, x, y, x+10, y+20)
time.sleep(0.1)
myMainWindow.update()
它会将广场向右移动。
这是我的Java代码:
package tutorial2;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Tutorial2 {
public static void main(String[] args) {
make_gui();
}
static void make_gui(){
JFrame f = new JFrame("My Window");
f.getContentPane().setPreferredSize(new Dimension(500, 300));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
}
class MyRectangle extends Rectangle{
Rectangle self;
int x;
int y;
public MyRectangle(int x, int y){
this.x = x;
this.y = y;
this.self = new Rectangle(this.x, this.y, this.x+10, this.y+10);
}
}
class MyPanel extends JPanel{
MyRectangle user = new MyRectangle(10, 10);
Rectangle user2 = new Rectangle(30, 30, 40, 40);
public MyPanel(){
};
public void paintComponent(Graphics g){
Graphics2D graphics2d = (Graphics2D) g;
//graphics2d.fill(user2);
graphics2d.fill(user.self);
}
}
我如何在这里完成?
答案 0 :(得分:0)
只需使用:
g.drawRect(x1,y1,width,height);
或者:
g.fillRect(x1,y1,width,height);
您不需要Rectangle
个对象或您自己的MyRectangle
个对象。
您可以存储坐标并每帧更新它们。
答案 1 :(得分:0)
更新:现在通过IDE。该课程应该是可编辑的
当然有一个Rectangle类,但包括绘制和移动方法。
class MyRectangle {
int x;
int y;
int width;
int height;
public MyRectangle(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
}
public void draw(Graphics g) {
g.drawRect(x, y, width, height);
}
public void makeBigger(int value) {
width = width + value;
height = height + value;
}
}
您只需创建对象,然后从面板或其他组件(如画布)循环调用它。
例如,您可以覆盖面板中的paintComponent(..)方法,并使用线程或计时器在循环中创建动画。
class myPanel extends JPanel{
MyRectangle r = new MyRectangle(10,10,10,10);
@Override
protected void paintComponent(Graphics g) {
r.makeBigger(10);
r.draw(g);
}
}
此面板必须在计时器操作中重新绘制,或者可以添加到按钮操作中。动作代码看起来像是:
public void actionPerformed(ActionEvent e) {
myPanel.repaint();
}
答案 2 :(得分:-2)
最好还是使用图形库为您完成此操作。如果你想制作你的游戏,你应该观看youtube视频,了解游戏应用程序的基础知识,你就可以轻松搞定。