Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 如何在限制面罩上制作移动汽车?_C#_Xna_Desktop_Collision - Fatal编程技术网

C# 如何在限制面罩上制作移动汽车?

C# 如何在限制面罩上制作移动汽车?,c#,xna,desktop,collision,C#,Xna,Desktop,Collision,我想做一些比赛。游戏是2D的,从顶部观看。我需要一个面罩,它必须限制一条道路,以便移动汽车时充分工作:) 我尝试过逐像素碰撞,但这不是一个好主意,因为碰撞扫描总是发生在CPU负载非常大的过程中。 我想我需要一些方法,可以计算一次和下一次使用无张力计算 你有什么建议吗? 我在Xna游戏工作室工作。 请原谅我的英语:)这个问题对我来说很不清楚。但是,如果我不懂编程语言,我就发表我关于碰撞检测的一般方法;给你: // fill in the collision map, marking 'R'

我想做一些比赛。游戏是2D的,从顶部观看。我需要一个面罩,它必须限制一条道路,以便移动汽车时充分工作:) 我尝试过逐像素碰撞,但这不是一个好主意,因为碰撞扫描总是发生在CPU负载非常大的过程中。 我想我需要一些方法,可以计算一次和下一次使用无张力计算

你有什么建议吗? 我在Xna游戏工作室工作。
请原谅我的英语:)这个问题对我来说很不清楚。但是,如果我不懂编程语言,我就发表我关于碰撞检测的一般方法;给你:

    // fill in the collision map, marking 'R' in the spots where the road is and ' ' where driving is allowed, make the arrays larger to get more detail
    private char[,] strCollisionMap = {
                                            {' ', ' ', ' ', ' ', ' ' },
                                            {' ', ' ', 'R', 'R', ' ' },
                                            {' ', 'R', ' ', ' ', 'R' },
                                            {'R', ' ', ' ', 'R', ' ' },
                                            {'R', ' ', 'R', ' ', ' ' },
                                            {' ', 'R', ' ', ' ', ' ' },
                                            {' ', ' ', ' ', ' ', ' ' },
                                            {' ', ' ', ' ', ' ', ' ' },
                                            {' ', ' ', ' ', ' ', ' ' }
                                      };
    private bool IsCarOnTheRoad(float carX, float carY, int screenWidth, int screenHeight)
    {
        int h = strCollisionMap.GetLength(0);
        int w = strCollisionMap.GetLength(1);

        float fH = screenHeight / h;
        float fW = screenWidth / w;


        int nX = (int)Math.Round(carX / fW);
        int nY = (int)Math.Round(carY / fH);
        if (strCollisionMap[nX, nY] == 'R')
        {
            return true;
        }
        return false;
    }

我将试着向你们解释我将如何去解决这个问题。若你们的道路看起来像在图像上,你们可以使用像素对置只为部分纹理(蓝色圆圈),并没有必要检查整个图像。然后你只检查汽车边缘(突出部分)的胶状物——微小的绿色圆圈

另一种方法是使用矢量绘制道路(创建多边形)。然后你可以检查你的车是否与内线和外线相交。这两个多边形之间都是道路


你试过什么吗?@tnw他试过问题中所述的每像素碰撞。@user3752919你应该阅读XNA碰撞()的内容,然后询问你在这里遇到的与编程相关的具体问题。如果不清楚,为什么要回答?这可能会回答这个问题(对于基于网格的游戏),但可能不会。我们只是没有足够的信息去了解。@BradleyDotNET我喜欢帮助那些通常因为语法或编程技能糟糕而被击倒的人。但你仍然完全正确,不应该那样做;)我帮助人们没有问题(出于这个原因,我回答了许多“不值得”的问题)。这一个太不清楚了,我认为还没有答案。