Moving pictureBox в winforms - PullRequest
       1

Moving pictureBox в winforms

0 голосов
/ 20 ноября 2018

Моя цель для моего кода состоит в том, чтобы создать простую игру в понг в winforms (должен был использовать monogame), однако мой код должен работать.

Проблема : Местоположение Picturebox не будет обновляться при изменении его местоположения.

Я подозреваю, что что-то занимает поток пользовательского интерфейса, возможно, моя серия событий KeyDown / KeyUp?

РЕДАКТИРОВАТЬ : Основываясь на недавно проведенном тестировании, кажется, что таймер не тикает, однако я могу ошибаться.

Код :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Thread t = new Thread(ChangePaddleState);
        t.Start();
        BringToFront();
        Activate();
    }

    //change this later?
    static bool upArrow = false;
    static bool downArrow = false;
    static bool wKey = false;
    static bool sKey = false;

    //movement speed of paddle
    const byte movementspeed = 3;

    Paddle paddleL = new Paddle();
    Paddle paddleR = new Paddle();

    void ChangePaddleState()
    {
        while (true)
        {
            //left paddle
            if (upArrow)
            {
                paddleL.idle = false;
                paddleL.movingDown = false;
                paddleL.movingUp = true;
            }
            else if (downArrow)
            {
                paddleL.idle = false;
                paddleL.movingUp = false;
                paddleL.movingDown = true;
            }
            //left paddle
            //right paddle
            if (wKey)
            {
                paddleR.movingDown = false;
                paddleR.idle = false;
                paddleR.movingUp = true;
            }
            else if (sKey)
            {
                paddleR.idle = false;
                paddleR.movingUp = false;
                paddleR.movingDown = true;
            }
            //checking if idle
            if(!paddleR.movingDown && !paddleR.movingUp)
            {
                paddleR.idle = true;
            }
            if (!paddleL.movingDown && !paddleL.movingUp)
            {
                paddleL.idle = true;
            }
            //checking if idle
            Thread.Sleep(50);
        }
    }



    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        KeySwitch.setKeysTrue(e);
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        KeySwitch.setKeysFalse(e);
    }

    //Key Swicth Region
    #region
    static class KeySwitch
    {
        public static void setKeysTrue(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up:
                    upArrow = true;
                    Debug.Write("Up Arrow Pressed");
                    break;
                case Keys.Down:
                    downArrow = true;
                    Debug.Write("Down Arrow Pressed");
                    break;
                case Keys.W:
                    wKey = true;
                    Debug.Write("W Key Arrow Pressed");
                    break;
                case Keys.S:
                    sKey = false;
                    Debug.Write("S Key Pressed");
                    break;
            }
        }
        public static void setKeysFalse(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up:
                    upArrow = false;
                    Debug.Write("Up Arrow Released");
                    break;
                case Keys.Down:
                    downArrow = false;
                    Debug.Write("Down Arrow Released");
                    break;
                case Keys.W:
                    wKey = false;
                    Debug.Write("W Key Released");
                    break;
                case Keys.S:
                    sKey = false;
                    Debug.Write("S Key Released");
                    break;
            }
        }
    }
    #endregion //KeySwitch Class KeySwitchClass

    private void button1_Click(object sender, EventArgs e)
    {
        DebugHelper.GetPaddleState(paddleL, paddleR);
        ActiveControl = null;
    }

    private void gameLoop_Tick(object sender, EventArgs e)
    {
        if (paddleL.movingUp)
        {
            aPaddleLeft.Location = new Point(aPaddleLeft.Location.X, aPaddleLeft.Location.Y + movementspeed);
        }
        else if (paddleR.movingDown)
        {
            aPaddleRight.Location = new Point(aPaddleRight.Location.X, aPaddleLeft.Location.Y - movementspeed);
        }
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...