예제 #1
0
 private void computeScoreLife(ref bool isOutScreen)
 {
     //出界
     if (isOutScreen == true)
     {
         if (curFruit.getType() != Constant.Type_Bomb)
         {
             //水果出界,扣生命值
             lifeCount--;
         }
     }
     //切中
     else
     {
         if (curFruit.getType() == Constant.Type_Bomb)
         {
             //切中炸弹,扣生命值
             lifeCount--;
         }
         else
         {
             //切中水果,加分
             score++;
         }
     }
     lifeContent.setLife(lifeCount);
     scoreTxt.text = "" + score;
 }
예제 #2
0
파일: Test.cs 프로젝트: mengtest/FruitNinja
    // Update is called once per frame
    void Update()
    {
        bool needDestroyFruit = false;
        bool isOutDestroy     = false;

        if (currentFruit != null)
        {
            if (KinectManager.Instance.IsUserDetected())
            {
                //检测到玩家

                long userId = KinectManager.Instance.GetPrimaryUserID();                 //获取玩家id
                //Vector2 userPos = KinectManager.Instance.GetUserPosition(userId);//获取整个玩家相对于体感的坐标信息
                int jointRightType = (int)KinectInterop.JointType.HandRight;             //表示右手

                if (KinectManager.Instance.IsJointTracked(userId, jointRightType))
                {
                    //追踪到关节点
                    Vector3 HandPos = KinectManager.Instance.GetJointKinectPosition(userId, jointRightType); //获取右手信息
                    rightTrail.position = HandPos;
                    Vector3 HandScreenPos = Camera.main.WorldToScreenPoint(HandPos);                         //右手转换到屏幕坐标
                    Vector2 HandScrPos    = new Vector2(HandScreenPos.x, HandScreenPos.y);                   //三维坐标转换到二维
                    //KinectInterop.HandState rightHandState = KinectManager.Instance.GetRightHandState(userId);rightHandState == KinectInterop.HandState.Open &&
                    if (RectTransformUtility.RectangleContainsScreenPoint(currentFruit.transform as RectTransform, HandScrPos, Camera.main))
                    {
                        needDestroyFruit = true;
                    }
                }

                int jointLeftType = (int)KinectInterop.JointType.HandLeft;                //表示左手

                if (KinectManager.Instance.IsJointTracked(userId, jointLeftType))
                {
                    //追踪到关节点
                    Vector3 HandPos = KinectManager.Instance.GetJointKinectPosition(userId, jointLeftType); //获取左手信息
                    leftTrail.position = HandPos;
                    Vector3 HandScreenPos = Camera.main.WorldToScreenPoint(HandPos);                        //右手转换到屏幕坐标
                    Vector2 HandScrPos    = new Vector2(HandScreenPos.x, HandScreenPos.y);                  //三维坐标转换到二维
                    //KinectInterop.HandState leftHandState = KinectManager.Instance.GetLeftHandState(userId);leftHandState == KinectInterop.HandState.Open &&
                    if (RectTransformUtility.RectangleContainsScreenPoint(currentFruit.transform as RectTransform, HandScrPos, Camera.main))
                    {
                        needDestroyFruit = true;
                    }
                }
            }

            RectTransform rtf       = currentFruit.transform as RectTransform;
            float         curFruitY = rtf.anchoredPosition.y;    //获取当前水果的y轴位置
            if (curFruitY < fruitOutY)
            {
                needDestroyFruit = true;
                isOutDestroy     = true;
            }
            if (needDestroyFruit)
            {
                //切中水果或出界
                if (isOutDestroy)
                {
                    if (currentFruit.type == Contant.Type_Boom)
                    {
                        scoreNum++;
                    }
                    else
                    {
                        lifeNum--;
                    }
                }
                else
                {
                    if (currentFruit.type == Contant.Type_Boom)
                    {
                        lifeNum--;
                    }
                    else
                    {
                        scoreNum++;
                    }
                }
            }
            lifeContent.setLife(lifeNum);
            scoreTxt.text = scoreNum + "";
            if (needDestroyFruit)
            {
                if (isOutDestroy == false)
                {
                    if (currentFruit.type != Contant.Type_Boom)
                    {
                        //切得不是炸弹才会生成左右水果
                        createRightLeftFruit();
                        playMusic(slatter);
                        Destroy(currentFruit.gameObject);
                    }
                    else
                    {
                        playMusic(boom);
                        Destroy(currentFruit.gameObject);
                    }
                }

                if (lifeNum > 0)
                {
                    createFruit();
                }
                else
                {
                    if (GameObject.FindWithTag("PlayOver") == null)
                    {
                        createPlayOver();
                    }
                    gameOverImg.gameObject.SetActive(true);
                }
            }
        }
        detectedClickGameOver();
    }
예제 #3
0
    void Update()
    {
        timer += Time.deltaTime * creatSpeed;
        if (timer >= creatTime)
        {
            // random time to create fruit
            int num = Random.Range(1, 3);
            for (int i = 0; i < num; i++)
            {
                _currentFruitArray[i] = CreatFruit();
            }
            timer = 0;
        }
        bool isRightOverFrult = false;
        bool isLeftOverFrult  = false;

        if (_manager == null)
        {
            _manager = KinectManager.Instance;
        }
        for (int i = 0; i < _currentFruitArray.Length; i++)
        {
            if (_currentFruitArray [i] != null)
            {
                RectTransform rt = _currentFruitArray [i].transform as RectTransform;
                if (_manager && _manager.IsInitialized())                   //如果初始化成功
                {
                    #region 检测切割,更新划线
                    //先检查人物是否被检测
                    if (_manager.IsUserDetected())
                    {
                        long userId = _manager.GetPrimaryUserID();
                        //获取左右手手掌的关节视口坐标
                        Vector3 leftJointPos  = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandLeft);
                        Vector3 rightJointPos = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandRight);
                        //将左右手坐标转换为ugui坐标
                        Vector2 leftHandScreenpos;
                        bool    isLeftHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, leftJointPos, Camera.main, out leftHandScreenpos);
                        Vector2 rightHandScreenpos;
                        bool    isRightHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, rightJointPos, Camera.main, out rightHandScreenpos);

                        //左手是否悬浮在区域上
                        isLeftOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, leftJointPos, Camera.main);
                        //右手是否悬浮在区域上
                        isRightOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, rightJointPos, Camera.main);

                        //更新显示线位置
                        leftLine.UpdateCutLine(leftHandScreenpos);
                        rightLine.UpdateCutLine(rightHandScreenpos);
                    }
                    else
                    {
                        leftLine.UpdateCutLine(new Vector2(-1000, 1000));
                        rightLine.UpdateCutLine(new Vector2(1000, 1000));
                    }
                    #endregion
                }

                #region 切水果
                if (isLeftOverFrult || isRightOverFrult)
                {
                    int t = _currentFruitArray[i].type;
                    if (t == 0)                      //切到最终boom
                    {
                        lifeNum--;
                    }
                    else                        //切到水果加分
                    {
                        scoreNum++;
                        CreatLeftRightFurit(t, _currentFruitArray[i]);
                    }
                    Destroy(_currentFruitArray[i].gameObject);
                }
                #endregion
            }
        }
        lifeContent.setLife(lifeNum);
        gameUIControlOne.SetScore(scoreNum, lifeNum);
    }