【问题标题】:Apple Spawning Inside Snake苹果在蛇里面产卵
【发布时间】:2020-06-17 14:47:55
【问题描述】:

我对统一很陌生,我做了一个蛇游戏。然而,苹果有时会在蛇体内产卵。我假设这需要一个 if 语句,例如 if CreateRandomApple = TailNode 然后再试一次,但我不确定如何编写代码。这是我的蛇和苹果的代码。

    void PlacePlayer()
    {
        playerObj = new GameObject("Player");
        SpriteRenderer playerRender = playerObj.AddComponent<SpriteRenderer>();
        playerSprite = CreateSprite(playerColor);
        playerRender.sprite = (playerSprite);
        playerRender.sortingOrder = 1;
        playerNode = GetNode(3, 3);

        PlacePlayerObject(playerObj, playerNode.worldPosition);
        playerObj.transform.localScale = Vector3.one * 1.2f;

        tailParent = new GameObject("tailParent");
    }


    void CreateApple()
    {
        appleObj = new GameObject("Apple");
        SpriteRenderer appleRenderer = appleObj.AddComponent<SpriteRenderer>();
        appleRenderer.sprite = CreateSprite(appleColor);
        appleRenderer.sortingOrder = 1;
        RandomlyPlacedApple();
    }

    #endregion

    #region Update

    void MoveTail()
    {
        Node prevNode = null;

        for (int i = 0; i < tail.Count; i++)
        {
            SpecialNode p = tail[i];
            availbleNodes.Add(p.node);

            if (i == 0)
            {
                prevNode = p.node;
                p.node = playerNode;
            }
            else
            {
                Node prev = p.node;
                p.node = prevNode;
                prevNode = prev;
            }

            availbleNodes.Remove(p.node);
            PlacePlayerObject(p.obj, p.node.worldPosition);
        }
    }
    #endregion

    #region Utilities


    bool isTailNode(Node n)
    {
        for (int i = 0; i < tail.Count; i++)
        {
            if(tail[i].node == n)
            {
                return true;
            }
        }
        return false;
    }

    void PlacePlayerObject(GameObject obj, Vector3 pos)
    {
        pos += Vector3.one * .5f;
        obj.transform.position = pos;
    }

    void RandomlyPlacedApple()
    {
        int ran = Random.Range(0, availbleNodes.Count);
        Node n = availbleNodes[ran];
        PlacePlayerObject(appleObj, n.worldPosition);
        appleNode = n;
    }

    Node GetNode(int x, int y)
    {
        if (x < 0 || x > MaxWidth - 1 || y < 0 || y > MaxHeight - 1)
            return null;
        return grid[x, y];
    }

    SpecialNode CreateTailNode(int x, int y)
    {
        SpecialNode s = new SpecialNode();
        s.node = GetNode(x, y);
        s.obj = new GameObject();
        s.obj.transform.parent = tailParent.transform;
        s.obj.transform.position = s.node.worldPosition;
        s.obj.transform.localScale = Vector3.one * .95f;
        SpriteRenderer r = s.obj.AddComponent<SpriteRenderer>();
        r.sprite = (playerSprite);
        r.sortingOrder = 1;

        return s;
    }


    #endregion

}`

这是脚本的简化版本。 谢谢

【问题讨论】:

    标签: c# visual-studio unity3d


    【解决方案1】:

    既然你有一个isTailNode 函数,你应该能够不断地生成新的苹果节点并检查它们是否是尾节点。如果他们是你生成新的。这可以使用 while 循环来实现。

    void RandomlyPlacedApple()
    {
        int ran = Random.Range(0, availbleNodes.Count);
        while(isTailNode(availbleNodes[ran]))
        {
            ran = Random.Range(0, availbleNodes.Count);
        }
        PlacePlayerObject(appleObj, availbleNodes[ran].worldPosition);
        appleNode = availbleNodes[ran];
    }
    

    【讨论】:

      【解决方案2】:

      检查它是否在ez里面

      if(apple.location == snake.location){ changeAppleLocation() }

      【讨论】:

      • 蛇是头部的“位置”。这不会阻止苹果在蛇的腹部产卵!谈论一顿简单的午餐..
      • 那我应该使用 IsTailNode 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多