1

我正在使用 javascript 和 processing.js 进行简单的 pong 克隆。我为桨制作了课程,然后将其扩展为由玩家控制的课程。目前,我正在尝试在玩家控制的类中实现对键盘输入的处理。我的意图是,当按下w或时,我通过播放器类中的变量s表示的速度来更新播放器的位置。pVector

但是,当按下相应的键时,当前桨叶就会消失。

脚本可以在 jsfiddle here上看到,我的代码如下:

  // 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)。似乎如果该键被按下一次,由于某种原因,每次更新都会重复检测到它。

4

1 回答 1

2

在 Procesing IDE 中它甚至不会编译......它应该是 PVector 而不是 pVector,但在 jsfiddle 中它编译......你还需要new与 PVectors 一起使用。所以 playerVelocity 没有正确初始化,当添加到位置时会发疯......尝试:

PVector playerVelocity = new PVector(1,1);

请注意,如果速度为 0,则不会移动,所以我使用 1.hth

于 2013-03-14T16:35:00.053 回答