画面の両側に 2 つのパドルがあり、プレイヤーはボールを打たなければならないピンポンに似たゲームを作成しています。問題は、画像との衝突検出をどのように行うかです。長方形を使った簡単な方法があることは知っています。これが私のコードです。私のウィンドウクラス
import javax.swing.JFrame;
import java.awt.Rectangle;
public class window{
public static void main(String args[])
{
JFrame f = new JFrame();
second s = new second();
f.add(s);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(806,628);
f.setResizable(false);
f.setTitle("Pong!");
}
}
そして、このクラスで私は本当に助けが必要です! これは私の 2 番目のクラスです。
import javax.swing.*;
import java.awt.Rectangle;
import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.*;
import javax.swing.JFrame;
public class second extends JPanel implements ActionListener, KeyListener
{
Timer t = new Timer(5, this);
double x1 = 20, y1 = 250, velx1 = 0, vely1 = 0;
double x = 750, y = 250, velx = 0, vely = 0;
double xb = 384, yb = 290, velbx = 3.0, velby = 3.0;
boolean collision = false;
public second()
{
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.fill(new Rectangle2D.Double(x,y,40,40));
super.paintComponent(g);
ImageIcon i = new ImageIcon("C:\\Users\\gsjha\\workspace\\JFrame Pong\\bin\\pong1.png");
ImageIcon a = new ImageIcon("C:\\Users\\gsjha\\workspace\\JFrame Pong\\bin\\pong-bg.png");
ImageIcon b = new ImageIcon("C:\\Users\\gsjha\\workspace\\JFrame Pong\\bin\\pong1.png");
ImageIcon c = new ImageIcon("C:\\Users\\gsjha\\workspace\\JFrame Pong\\bin/Ball.png");
a.paintIcon(this, g, 0, 0);
i.paintIcon(this, g, (int)x1 , (int)y1);
b.paintIcon(this, g, (int) x, (int) y);
c.paintIcon(this, g, (int)xb, (int)yb);
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
if (y1<=0 || y1 >= 600 || y1 >= 500)
{
vely1 = -vely1;
}
x1 +=velx1;
y1 += vely1;
repaint();
if (y<=0 || y >= 600 || y > 500)
{
vely = -vely;
}
repaint();
x += velx;
y += vely;
repaint();
if (xb<0 || xb > 800)
{
velbx = -velbx;
}
if (yb<0 || yb > 600)
{
velby = -velby;
}
xb += velbx;
yb += velby;
repaint();
}
public void up()
{
vely1 = -3.0;
velx1 = 0;
}
public void up1()
{
vely = -3.0;
velx = 0;
}
public void down()
{
vely1 = 3.0;
velx1 = 0;
}
public void down1()
{
vely = 3.0;
velx = 0;
}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code == KeyEvent.VK_W)
{
up();
}
if(code == KeyEvent.VK_S)
{
down();
}
if (code == KeyEvent.VK_UP)
{
up1();
}
if(code == KeyEvent.VK_DOWN)
{
down1();
}
}
@Override
public void keyReleased(KeyEvent ee) {
int code1 = ee.getKeyCode();
if(code1 == KeyEvent.VK_W)
{
vely1 = 0;
}
if (code1 == KeyEvent.VK_S)
{
vely1 = 0;
}
if(code1 == KeyEvent.VK_UP)
{
vely = 0;
}
if(code1 == KeyEvent.VK_DOWN)
{
vely = 0;
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
ご覧のとおり、ピンポンとパドルの間の衝突検出を除いて、ピンポン ゲームのほとんどが終了しました。ゲームの最も重要な部分。ありがとう、アーダーシュ・ジャー