相关疑难解决方法(0)

Java Bouncing Ball

我正在尝试编写一个Java应用程序,它在屏幕上绘制多个球,从框架的边缘反弹.我可以成功地画出一个球.但是当我添加第二个球时,它会覆盖我绘制的初始球.代码是:

import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class Ball extends JPanel implements Runnable {

    List<Ball> balls = new ArrayList<Ball>();   
Color color;
int diameter;
long delay;
private int x;
private int y;
private int vx;
private int vy;

public Ball(String ballcolor, int xvelocity, int yvelocity) {
    if(ballcolor == "red") {
        color = Color.red;
    }
    else if(ballcolor == "blue") {
        color = Color.blue;
    }
    else if(ballcolor == "black") {
        color = Color.black;
    }
    else if(ballcolor == "cyan") {
        color …
Run Code Online (Sandbox Code Playgroud)

java swing jframe

14
推荐指数
2
解决办法
3万
查看次数

带键键的线程

我是Java图形和线程的新手,我正在尝试制作游戏(特别是Pong).这个想法是两个人可以在同一个键盘上玩(即有两个通过不同键控制的拨片).目前,两名球员不能同时移动他们的球拍.

这个问题有方法解决吗?单独的线程是答案吗?

如果可能的话,我希望桨能够同时移动(至少看似).

更新:似乎使用Set<Integer>存储按键是最好的选择.我已经完成了(并且它可以工作),但我想知道是否有任何此代码不在事件调度线程(EDT)上,如果我需要使用SwingUtilities.invokeLater();.这是必要的代码:

private Set<Integer> keysDown = Collections.synchronizedSet(new HashSet<Integer>());

public void keyPressed(KeyEvent e) 
{
    keysDown.add(e.getKeyCode());
}

public void keyReleased(KeyEvent e) 
{    
    keysDown.remove(e.getKeyCode());
}

public void updatePaddlePositions()
{
    if (keysDown.contains(KeyEvent.VK_W)) 
        paddleOne.move(-PADDLE_MOVE_INCREMENT);

    if (keysDown.contains(KeyEvent.VK_S))
        paddleOne.move(PADDLE_MOVE_INCREMENT);

    if (keysDown.contains(KeyEvent.VK_UP))
        paddleTwo.move(-PADDLE_MOVE_INCREMENT);

    if (keysDown.contains(KeyEvent.VK_DOWN))
        paddleTwo.move(PADDLE_MOVE_INCREMENT);

    try {
        Thread.sleep(DELAY);
    } catch (InterruptedException e) {
        System.out.println("You Interrupted the game!");
    }

    canvas.repaint();
}
Run Code Online (Sandbox Code Playgroud)

这是对象的paintComponent方法canvas:

public void paintComponent(Graphics g) 
{
    super.paintComponent(g);
    paddleOne.paint(g);
    paddleTwo.paint(g);
    updatePaddlePositions(); // Does this need to be …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading key-bindings paintcomponent

5
推荐指数
2
解决办法
2570
查看次数