卓球ゲームを動作させるのに少し問題がありました。このプロジェクトは単純にボールに物理演算を持たせることから始まりましたが、その後、さらに作業を行うことにしました。
私はそのボールを前後にバウンドさせましたが、キー W と S はプレーヤー 1 を制御せず、上下の矢印キーはプレーヤー 2 を制御しません。
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == e.VK_UP){
p2Y -= 3;
System.out.println("UP");
}
if(e.getKeyCode() == e.VK_DOWN){
p2Y += 3;
System.out.println("Down");
}
if(e.getKeyCode() == e.VK_W){
p1Y -= 3;
System.out.println("Up");
}
if(e.getKeyCode() == e.VK_S){
p1Y += 3;
System.out.println("down");
}
repaint();
}
システムの印刷メッセージも表示されません
問題がコードのこの部分だけなのか、それとも別の場所なのかはわかりません
他の場所にある場合は、このファイルの残りの部分へのリンクです http://pastebin.com/TJbLBxL7
コード全体:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class Pong extends JPanel
{
Circle circle1;
javax.swing.Timer timer;
ArrayList<Point> points = new ArrayList<Point>();
int p1X=10, p1Y=320;
int p2X=760, p2Y = 320;
int y, y1;
int p1Score, p2Score;
boolean playing = true;
public Pong(Color backcolor, int Width, int Height)
{
setBackground(backcolor);
setPreferredSize(new Dimension(Width, Height));
//first circle
circle1 = new Circle(Width / 2, 360, 15, Color.white);
circle1.setVelocity(4);
circle1.setDirection(180);
timer = new javax.swing.Timer(5, new MoveListener());
addKeyListener(new KeyWatcher());
timer.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//first circle
circle1.draw(g);
circle1.fill(g);
// Draw Players
g.setColor(Color.red);
g.fillRect(p1X, p1Y, 10, 75);
g.setColor(Color.blue);
g.fillRect(p2X, p2Y, 10, 75);
//Draw Scores
g.setColor(Color.white);
g.drawString("Player 1's Score: " + p1Score, 10, 10);
g.drawString("Player 2's Score: " + p2Score, getWidth() - 120, 10);
repaint();
if(!playing)
{
g.setColor(Color.red);
g.drawString("GAMEOVER!!!", (getWidth() / 2) - 15, 10);
}
else
{
}
}
private class MoveListener extends MouseAdapter implements ActionListener
{
public void actionPerformed(ActionEvent arg0)
{
int x1 = circle1.getX();
int y1 = circle1.getY();
int width = getWidth();
int height = getHeight();
int radius1 = circle1.getRadius();
//first circle
if(x1 - radius1 <= 0)
{
p2Score++;
circle1.setX(getWidth()/2);
circle1.setY(getHeight()/2);
}
if(x1 + radius1 >= width)
{
p1Score++;
circle1.setX(getWidth()/2);
circle1.setY(getHeight()/2);
}
if(y1 - radius1 <= 0 || y1 + radius1 >= height )
{
circle1.turnY();
}
if((x1 - radius1 == p1X) || (x1 + radius1 == p2X))
{
circle1.turnX();
}
circle1.move();
repaint();
}
public void GameOver()
{
playing = false;
}
}
private class KeyWatcher implements KeyListener
{
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == e.VK_UP){
p2Y -= 3;
System.out.println("UP");
}
if(e.getKeyCode() == e.VK_DOWN){
p2Y += 3;
System.out.println("Down");
}
if(e.getKeyCode() == e.VK_W){
p1Y -= 3;
System.out.println("Up");
}
if(e.getKeyCode() == e.VK_S){
p1Y += 3;
System.out.println("down");
}
repaint();
}
@Override
public void keyReleased(KeyEvent e){
//if(e.getKeyCode() == e.VK_UP){
// y1 = p2Y;
// repaint();
// }
// if(e.getKeyCode() == e.VK_DOWN){
// y1 = p2Y;
// repaint();
// }
//if(e.getKeyCode() == e.VK_W){
// y = p1Y;
// repaint();
// }
// if(e.getKeyCode() == e.VK_S){
// y = p1Y;
// repaint();
// }
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
}
私の新しいコード この問題は、一度に 1 人のプレイヤーしか操作できないことです。
また、2つの MyKeyAction を作成して修正しようとする愚かな試みもありますが、まったく変更されませんでした
package Bouncy;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class Pong extends JPanel
{
Circle circle1;
javax.swing.Timer timer;
ArrayList<Point> points = new ArrayList<Point>();
int p1X=10, p1Y=320;
int p2X=760, p2Y = 320;
int y, y1;
int p1Score, p2Score;
boolean playing = true;
public Pong(Color backcolor, int Width, int Height)
{
setBackground(backcolor);
setPreferredSize(new Dimension(Width, Height));
//first circle
circle1 = new Circle(Width / 2, 360, 15, Color.white);
circle1.setVelocity(4);
circle1.setDirection(180);
timer = new javax.swing.Timer(5, new MoveListener());
setupKeyBinding();
setupKeyBinding2();
timer.start();
}
private void setupKeyBinding() {
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inMap = getInputMap(condition);
ActionMap actMap = getActionMap();
// this uses an enum of Direction that holds ints for the arrow keys
for (DirectionP1 direction : DirectionP1.values()) {
int key = direction.getKey();
String name = direction.name();
// add the key bindings for arrow key and shift-arrow key
inMap.put(KeyStroke.getKeyStroke(key, 0), name);
inMap.put(KeyStroke.getKeyStroke(key, InputEvent.SHIFT_DOWN_MASK), name);
actMap.put(name, new MyKeyAction(direction));
}
}
private void setupKeyBinding2() {
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inMap = getInputMap(condition);
ActionMap actMap = getActionMap();
// this uses an enum of Direction that holds ints for the arrow keys
for (DirectionP2 direction : DirectionP2.values()) {
int key = direction.getKey();
String name = direction.name();
// add the key bindings for arrow key and shift-arrow key
inMap.put(KeyStroke.getKeyStroke(key, 0), name);
inMap.put(KeyStroke.getKeyStroke(key, InputEvent.SHIFT_DOWN_MASK), name);
actMap.put(name, new MyKeyAction2(direction));
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//first circle
circle1.draw(g);
circle1.fill(g);
// Draw Players
g.setColor(Color.red);
g.fillRect(p1X, p1Y, 10, 75);
g.setColor(Color.blue);
g.fillRect(p2X, p2Y, 10, 75);
//Draw Scores
g.setColor(Color.white);
g.drawString("Player 1's Score: " + p1Score, 10, 10);
g.drawString("Player 2's Score: " + p2Score, getWidth() - 120, 10);
repaint();
if(!playing)
{
g.setColor(Color.red);
g.drawString("GAMEOVER!!!", (getWidth() / 2) - 15, 10);
}
else
{
}
}
private class MoveListener extends MouseAdapter implements ActionListener
{
public void actionPerformed(ActionEvent arg0)
{
int x1 = circle1.getX();
int y1 = circle1.getY();
int width = getWidth();
int height = getHeight();
int radius1 = circle1.getRadius();
//first circle
if(x1 - radius1 <= 0)
{
p2Score++;
circle1.setX(getWidth()/2);
circle1.setY(getHeight()/2);
}
if(x1 + radius1 >= width)
{
p1Score++;
circle1.setX(getWidth()/2);
circle1.setY(getHeight()/2);
}
if(y1 - radius1 <= 0 || y1 + radius1 >= height )
{
circle1.turnY();
}
if((x1 - radius1 <= p1X) || (x1 + radius1 >= p2X))
{
circle1.turnX();
}
circle1.move();
repaint();
}
public void GameOver()
{
playing = false;
}
}
enum DirectionP1 {
W(KeyEvent.VK_W), S(KeyEvent.VK_S);
private int key;
private DirectionP1(int key) {
this.key = key;
}
public int getKey() {
return key;
}
}
enum DirectionP2 {
UP(KeyEvent.VK_UP), DOWN(KeyEvent.VK_DOWN);
private int key;
private DirectionP2(int key) {
this.key = key;
}
public int getKey() {
return key;
}
}
class MyKeyAction extends AbstractAction {
private DirectionP1 direction;
public MyKeyAction(DirectionP1 direction) {
this.direction = direction;
}
@Override
public void actionPerformed(ActionEvent e) {
switch (direction) {
case W:
p1Y -= 6;
break;
case S:
p1Y += 6;
break;
default:
break;
}
}
}
class MyKeyAction2 extends AbstractAction {
private DirectionP2 direction2;
public MyKeyAction2(DirectionP2 direction2) {
this.direction2 = direction2;
}
@Override
public void actionPerformed(ActionEvent e) {
switch (direction2) {
case UP:
p2Y -= 6;
break;
case DOWN:
p2Y += 6;
break;
default:
break;
}
}
}
}