Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# public int level=1; 公共图片盒[]入侵者; 公共无效生成(整数级) { int f=0; 入侵者=新图片盒[100]; PictureBox入侵者=新PictureBox(); 位图img=(WindowsFormsApplication1.Properties.Resources.SpaceInvader); 对于(整数n=32;n_C# - Fatal编程技术网

将一组图片框不断移动到C# public int level=1; 公共图片盒[]入侵者; 公共无效生成(整数级) { int f=0; 入侵者=新图片盒[100]; PictureBox入侵者=新PictureBox(); 位图img=(WindowsFormsApplication1.Properties.Resources.SpaceInvader); 对于(整数n=32;n

将一组图片框不断移动到C# public int level=1; 公共图片盒[]入侵者; 公共无效生成(整数级) { int f=0; 入侵者=新图片盒[100]; PictureBox入侵者=新PictureBox(); 位图img=(WindowsFormsApplication1.Properties.Resources.SpaceInvader); 对于(整数n=32;n,c#,C#,错误: SpaceInvaders.exe中发生类型为“System.NullReferenceException”的未处理异常 所有图片移动一次,然后发生错误。有解决方案吗?我建议使用GDI或DirectX在控件表面绘制图像。 这将是非常快的。我相信您以前没有使用过directx,所以我建议您选择一些简单的示例来使用directx渲染图像。其实很简单 对于GDI,您可以从这个简单的示例开始 哪一行引发异常?入侵者[i]。位置=新点(入侵者[i]。位置.X+1,入侵者[i]。位置.Y);入侵者阵

错误:

SpaceInvaders.exe中发生类型为“System.NullReferenceException”的未处理异常


所有图片移动一次,然后发生错误。有解决方案吗?

我建议使用GDI或DirectX在控件表面绘制图像。 这将是非常快的。我相信您以前没有使用过directx,所以我建议您选择一些简单的示例来使用directx渲染图像。其实很简单

对于GDI,您可以从这个简单的示例开始

哪一行引发异常?入侵者[i]。位置=新点(入侵者[i]。位置.X+1,入侵者[i]。位置.Y);入侵者阵列中并非所有位置都已填满。为什么不使用列表而不是数组?无法初始化数组中100个图片框中的一个。很难说哪一个,我不容易理解你的
spawn
逻辑。嵌套循环中的结束条件和步骤非常混乱。我将数组切换为列表,现在所有内容都在移动。但我仍然有一个问题,一切都变得非常缓慢。有人知道如何解决这个问题吗?
    public int level = 1;
    public PictureBox[] invaders;

    public void spawn(int level)
    {
        int f = 0;

        invaders = new PictureBox[100];
        PictureBox invader = new PictureBox();
        Bitmap img = (WindowsFormsApplication1.Properties.Resources.SpaceInvader);
        for (int n = 32; n < (4 + level)*32; n=n+32)
        {
            for (int i = 90; i < 400; i = i + 37)
            {
                invaders[f] = new PictureBox();
                invaders[f].Location = new Point(i, n);
                invaders[f].Size = new Size(20, 15);
                invaders[f].Image = img;
                invaders[f].SizeMode = PictureBoxSizeMode.StretchImage;
                invaders[f].BackColor = Color.Transparent;

                this.Controls.Add(invaders[f]);

                f++;
            }
        }
        timer2.Interval = 10;
        timer2.Start();
    }
    private void timer2_Tick(object sender, EventArgs e)
    {
        for (int i = 0; i < invaders.Length; i++)
        {
            invaders[i].Location = new Point(invaders[i].Location.X + 1, invaders[i].Location.Y);
        }
    }