1

私はjavascriptとprocessing.jsを使用して単純なpongクローンに取り組んでいます。私はパドルのクラスを作成しました。その後、パドルを拡張して、プレーヤーが制御するクラスを作成しました。現在、プレーヤー制御クラス内でキーボード入力の処理を実装しようとしています。私の意図は、wまたはが押されたときに、プレーヤークラス内の変数でs表される速度でプレーヤーのパドルの位置を更新することです。pVector

ただし、対応するキーを押すと、現在、パドルは単に消えます。

スクリプトはここのjsfiddleで見ることができ、私のコードは次のとおりです。

  // For reference
  // standard rectangle constructor is: rect(x, y, width, height);

    class Paddle
    {
        //width of paddle
        float pWidth;
        //height of paddle
        float pHeight;
        //initial paddle x coordinate
        float x;
        //initial paddle y coordinate
        float y;

        Paddle(float w, float h, float startX, float startY)
        {
            //set width
            paddleWidth = w;
            //set height
            paddleHeight = h;
            //set start x
            x = startX;
            //set start y
            y = startY;
        }

        void update()
        {
        }

        void draw()
        {
            //draw and fill rectangle with white
            fill(255)
            rect(x,y,paddleWidth,paddleHeight)
        }
    }

    class Player extends Paddle
    {
        Player(float w, float h, float startX, float startY)
        {
            super(w,h,startX,startY);
        }
    }

    class PlayerOne extends Paddle
    {
        pVector playerVelocity = (0,0);

        PlayerOne(float w, float h, float startX, float startY)
        {
            super(w,h,startX,startY);
        }

        void update()
        {
            debugger;

            if(keyPressed)
            {
                if(key == 'w')
                {
                    y -= playerVelocity.y;
                }
                else if(key == 's')
                {
                    y += playerVelocity.y;
                }
            }    
        }
    }


    //array list to hold the player paddles
    ArrayList<Paddle> paddles = new ArrayList<Paddle>();
    //middle x and middle y
    float mx, my, pw, ph;

    void setup()
    {
        mx = width/2;
        my = height/2;
        pw = 10;
        ph = 50;

        player1 = new PlayerOne(pw,ph,10,10);
        player2 = new Player(pw,ph,385,10);

        paddles.add(player1);
        paddles.add(player2);

        size(400,400);
    }

    void draw()
    {
        background(0);
        fill(100,100,0);

        // update each paddle added to array list
        for(Paddle p: paddles)
        {
            p.update();
            p.draw();
        }
    }

私は何が間違っているのですか?

アップデート:

debuggerキーを押したときの条件の後の行にブレークポイントを設定しました: if(keyPressed)。キーを1回押すと、何らかの理由で更新のたびに繰り返し検出されるようです。

4

1 に答える 1

2

処理中の IDE ではコンパイルすらされません... pVector ではなく PVector である必要がありますが、jsfiddle ではコンパイルされます... また、PVectors で使用する必要がありますnew。そのため、 playerVelocity が正しく初期化されておらず、位置に追加するとおかしくなります...試してください:

PVector playerVelocity = new PVector(1,1);

速度が 0 の場合は移動しないことに注意してください。したがって、1 を使用しました。

于 2013-03-14T16:35:00.053 に答える