2020-10-24小記

Yao_orange發表於2020-10-24

專案場景:

貪吃蛇


問題描述(解決):

解決食物總是生成在邊界或者障礙上的問題
規定生成的邊界範圍,獲得每個障礙的長與寬,再次縮小範圍,進而達到目的

 //生成不在障礙或者邊界上的座標
    private Vector3 MakePosition()
    {
        int x = 0;
        int y = 0;
        bool isSuit = false;

        while (isSuit == false)
        {
            isSuit = true;
            x = Random.Range(-260, 500);
            y = Random.Range(-262, 262);

            for(int i = 0; i < barrierList.Count; i++)
            {
                if (barrierList[i].GetComponent<Image>().enabled)
                {
                    int barrXMax = (int)(barrierList[i].localPosition.x + barrierList[i].GetComponent<RectTransform>().rect.width / 2.0f);
                    int barrXMin = (int)(barrierList[i].localPosition.x - barrierList[i].GetComponent<RectTransform>().rect.width / 2.0f);
                    int barrYMax = (int)(barrierList[i].localPosition.y + barrierList[i].GetComponent<RectTransform>().rect.height / 2.0f);
                    int barrYMin = (int)(barrierList[i].localPosition.y - barrierList[i].GetComponent<RectTransform>().rect.height / 2.0f);
                    if ((x <= barrXMax && x >= barrXMin) && (y <= barrYMax && y >= barrYMin)){
                        isSuit = false;
                    }
                }
            }

        }

        Vector3 pos = new Vector3(x, y, 0);
        
        return pos;
    }

原因分析:

範圍定位不準確,只用了粗略的估值


解決方案:

上述程式碼即為解決方案,獲得障礙的準確位置與大小範圍,排除掉其範圍內的座標,可避免食物生成在障礙上。