0

このゲームにインスパイアされたゲームを用意しなければなりません。もちろん、それは非常に単純なはずですが、残念ながら、2 人のプレイヤーが一緒にプレイできるようにするために、クライアント サーバー通信を使用する必要があります。ここまでテクスチャを用意して、動く車を作ってみました。残念ながら、見た目ほど単純ではありません。立ち往生して先に進めません... 4 つの矢印のみを使用したい: UP - 車の速度を上げる、DOWN - 車の速度を下げる、LEFT - 左に曲がる、RIGHT - 右に曲がる。もちろん、UP ボタンや DOWN ボタンを押さなければ、車の速度は遅くなりますが、それよりもわずかに遅くなります。ヒントを乞う!

これは私のコードです:

package destructionderby;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

class CRX extends JFrame implements KeyListener
{
   File imageFile2;
   BufferedImage crxModel;
   public int speed;
   int posX, posY;
   JPanel crxPanel;
   public CRX()
    {
        speed = 0;
        posX=562;
        posY = 420;
        crxPanel = new JPanel();
        imageFile2 = new File("crx.png");
        try
        {
            crxModel = ImageIO.read(imageFile2);
        }
        catch (IOException e) 
        {
            System.err.println("File access error");
        }
        addKeyListener(this);
    }
    public void paint(Graphics g) 
    {
        while (true)
        {
            Graphics2D g2d = (Graphics2D) g;
            g2d.drawImage(crxModel, posX+speed, posY, null);
            repaint();
        }
    }

    //-------------------KEY LISTENER--------------------
    public void keyTyped (KeyEvent key)
    {
            if (key.getKeyCode()==38) //38 == UP; 40==DOWN; 37==LEFT; 39==RIGHT
            {
                speed +=10;
            }
            if (key.getKeyCode()==40)
            {
                if (speed >10)
                {
                    speed-=10;
                }
                else speed=0;
            }
    }
    @Override
    public void keyPressed(KeyEvent key)
    {

    }
    @Override
    public void keyReleased(KeyEvent key)
    {

    }
}

class MainWindow extends JFrame
{
    JPanel mainWindow;
    BufferedImage backgroundImage;
    CRX crx;
    MainWindow()
    {
        super("Destruction Derby");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800,600);
        setResizable(false);
        setVisible(true);
        init();
    }
    void init()
    {
        mainWindow = new JPanel();
        File imageFile= new File("background.png");        
        //:::...ZAŁADOWANIE OBRAZKA TŁA:::...
        try 
        {
            backgroundImage = ImageIO.read(imageFile);
        } 
        catch (IOException e) 
        {
            System.err.println("File access error");
        }
        crx = new CRX();
        paint(getGraphics());
     }

    @Override
    public void paint(Graphics g) 
    {
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(backgroundImage, 0, 0, this);
        crx.paint(getGraphics());
    }
}

public class DestructionDerby 
{    
    public static void main(String[] args) 
    {
        new MainWindow();
    }
}

そして、私の NetBeans プロジェクトがあります: http://www2.zippyshare.com/v/30402578/file.html

4

1 に答える 1

3
  1. デフォルトでは、JFrame は KeyEvent に反応しません。そこに JPanel を配置します。

  2. JFrame に直接 paint() しないでください。代わりに JPanel を使用してください。

  3. JPanel で paintComponent をオーバーライドし、最初のコード行として super.paintComponent() を追加します (paint() も同様)。

  4. KeyListener の代わりに KeyBindings (これらのキーに関する多数の例) を使用します。

  5. JFrame が 2 つある理由、JFrame を拡張しない、ローカル変数を作成する

  6. イメージをローカル変数にもロードする

于 2013-05-01T12:11:18.493 に答える