Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PictureBox更改为与我想要的相反_C# - Fatal编程技术网

C# PictureBox更改为与我想要的相反

C# PictureBox更改为与我想要的相反,c#,C#,所以我正在为我的编程课做一个第二季度的项目,我正在Visual Studio中制作一个游戏。我知道,这对比赛来说可能不太理想,但我真的没有时间把我所有的工作都转移到团结上。所以我的问题是,我设置了代码,这样当你按下空格键时,如果玩家(我用图片和GIF做的所有这些)面向右边,他会向右挥剑,如果他在左边,他会向左挥剑。有一个计时器,完成后,会将玩家动画更改回空闲状态。我测试了一下,当他面向左边,我按空格键时,他向左摆动,最后向左结束。问题是,他在面对右边的时候做了同样的事情。我已经尝试了我所知道的一

所以我正在为我的编程课做一个第二季度的项目,我正在Visual Studio中制作一个游戏。我知道,这对比赛来说可能不太理想,但我真的没有时间把我所有的工作都转移到团结上。所以我的问题是,我设置了代码,这样当你按下空格键时,如果玩家(我用图片和GIF做的所有这些)面向右边,他会向右挥剑,如果他在左边,他会向左挥剑。有一个计时器,完成后,会将玩家动画更改回空闲状态。我测试了一下,当他面向左边,我按空格键时,他向左摆动,最后向左结束。问题是,他在面对右边的时候做了同样的事情。我已经尝试了我所知道的一切,而老师正忙于帮助其他人完全学习我的代码。有人能帮我吗

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Sprite_The_Knight
    {
        public partial class Form1 : Form
        {

    public Form1()
    {
        InitializeComponent();
        this.BackgroundImage = Properties.Resources.Title;
        titleLabel.Show();
        startLabel.Show();
        KeyDown += new KeyEventHandler(Form1_KeyDown);
        spritePC.Image = Properties.Resources.KnightIdle;
    }

    private void EnemiesReady()
    {
        enemyNPC1.Image = Properties.Resources.Zombie;
        enemyNPC2.Image = Properties.Resources.Zombie;
        enemyNPC3.Image = Properties.Resources.Skeleton;
        enemyNPC4.Image = Properties.Resources.ZombieFlip;
        enemyNPC5.Image = Properties.Resources.ZombieFlip;
        enemyNPC6.Image = Properties.Resources.SkeletonFlip;
    }

    private void EnemiesGo()
    {

    }

    private void SpriteAttack()
    {
        if (spritePC.Image == Properties.Resources.KnightIdle)
        {
            SpriteSwingRight();
        }
        else
        {
            SpriteSwingLeft();
        }

        AttackTimer.Enabled = true;
    }

    private void SpriteSwingRight()
    {
        spritePC.Image = Properties.Resources.KnightSwing;
    }

    private void SpriteSwingLeft()
    {
        spritePC.Image = Properties.Resources.KnightSwingFlip;
    }

    private void SpriteTurnRight()
    {
        spritePC.Image = Properties.Resources.KnightIdle;
    }

    private void SpriteTurnLeft()
    {
        spritePC.Image = Properties.Resources.KnightIdleFlip;
    }


    private void SpriteShield()
    {

    }

    private void SpriteDeath()
    {

    }

    private void startLabel_Click(object sender, EventArgs e)
    {
        this.BackgroundImage = Properties.Resources.Intro;
        titleLabel.Hide();
        startLabel.Hide();
        introLabel.Show();
    }

    private void introLabel_Click(object sender, EventArgs e)
    {
        this.BackgroundImage = Properties.Resources.Land;
        introLabel.Hide();
        spritePC.Show();
        EnemiesReady();

    }

    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Right)
        {
            SpriteTurnRight();
        }
        else if (e.KeyCode == Keys.Left)
        {
            SpriteTurnLeft();
        }
        if (e.KeyCode == Keys.Space)
        {
            // i dunno he swings his soouurd or something
            SpriteAttack();
        }
    }

    private void AttackTimer_Tick(object sender, EventArgs e)
    {
        AttackTimer.Tick += new System.EventHandler(AttackTimer_Tick);

        AttackTimer.Start();
        if (spritePC.Image == Properties.Resources.KnightSwing)
        {
            spritePC.Image = Properties.Resources.KnightIdle;
        }
        else
        {
            spritePC.Image = Properties.Resources.KnightIdleFlip;
        }

        AttackTimer.Stop();
    }
}
    }

问题出在这一行:

if (spritePC.Image == Properties.Resources.KnightIdle)
您无法比较这样的图像。因为当您调用
Properties.Resources…
时,总是会得到图像的新实例。但是,您可以保留这些图像的本地副本,以便能够进行比较。将这些字段放在表单上:

public partial class Form1 : Form
{
    Bitmap _KnightSwingFlip = Properties.Resources.KnightSwingFlip;
    Bitmap _KnightSwing = Properties.Resources.KnightSwing;
    Bitmap _KnightIdle = Properties.Resources.KnightIdle;
    // rest of code
}
然后在表单上的任何地方使用它们

public Form1()
{
     // rest of code
     spritePC.Image = _KnightIdle;
}


请记住,您应该相应地更改代码的其余部分。i、 e无论您在哪里使用
Properties.Resources…
都使用本地副本。

问题在于这一行:

if (spritePC.Image == Properties.Resources.KnightIdle)
您无法比较这样的图像。因为当您调用
Properties.Resources…
时,总是会得到图像的新实例。但是,您可以保留这些图像的本地副本,以便能够进行比较。将这些字段放在表单上:

public partial class Form1 : Form
{
    Bitmap _KnightSwingFlip = Properties.Resources.KnightSwingFlip;
    Bitmap _KnightSwing = Properties.Resources.KnightSwing;
    Bitmap _KnightIdle = Properties.Resources.KnightIdle;
    // rest of code
}
然后在表单上的任何地方使用它们

public Form1()
{
     // rest of code
     spritePC.Image = _KnightIdle;
}


请记住,您应该相应地更改代码的其余部分。i、 e无论您在哪里使用
Properties.Resources…
都可以使用本地副本。

超越roo的回答:我强烈建议创建一个类,不仅保存图像,还保存有关图像的信息。imagecomaprisons总是一个坏主意。超越roo的回答:我强烈建议创建一个类,不仅保存图像,还保存有关图像的信息。这是个坏主意。非常感谢!我会试试的。@StephenFleece如果这对你有用,请接受答案谢谢!我会试试的。@StephenFleece如果这对你有用,请接受答案