문제

나는 이미 내가 다른 사람들에게 무엇을하려고하는지 설명하려고 노력했으며 끔찍하게 실패했습니다. 그러므로 당신이 나를 실례한다면, 나는 당신에게 코드를 보여주고 조금 설명하려고 시도 할 것입니다.

        if (MovePetMoving)
        {
            if (MovePetSlope[0] > 0)
            {
                if (MovePetSlope[1] > 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] <= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] <= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] > 0 and MovePetSlope[1] > 0", "");
                }
                else if (MovePetSlope[1] < 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] <= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] >= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] > 0 and MovePetSlope[1] < 0", "");
                }
                else
                {
                    MovePetMoving = false;
                    //MsgBox("Error", "");
                }
            }
            else if (MovePetSlope[0] < 0)
            {
                if (MovePetSlope[1] > 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] >= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] <= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] < 0 and MovePetSlope[1] > 0", "");
                }
                else if (MovePetSlope[1] < 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] >= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] >= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] < 0 and MovePetSlope[1] < 0" + Convert.ToString(pictureBoxPet.Location.X) + MovePetSlope[0] + MovePetTarget[0], "");
                }
                else
                {
                    MovePetMoving = false;
                    //MsgBox("Error", "");
                }
            }
        }

    }

거기는. "애완 동물"에 대한 모든 언급이 궁금하다면, 나는 내 작은 여동생을위한 게임처럼 tamogotchi (또는 철자)를 만들고 있습니다.

내가 가진 문제는 MovePetslope [1] 또는 [0]의 값이 양수 또는 부정적 일 수 있다는 것입니다. 나는 긍정적 값에 효과가있는 비교를 생각해 냈지만 음수 값에는 아무것도 없습니다. 나는 그것이 현재 상태에서 전혀 작동하지 않는다고 생각합니다.

모든 도움은 대단히 감사하겠습니다.

미리 감사드립니다!

도움이 되었습니까?

해결책

Math.abs를 사용하여 비교를 단순화하십시오. 일반적으로 애완 동물은 계속해서 움직여야합니다 Math.Abs(pictureBoxPet.Location.X-MovePetTarget[0]) < Math.Abs(MovePetSlope[0]) 그리고 y와 1에 대해 유사하게 많이 더 간단한 코드.

애완 동물이 목표를 향해 직접 이동하는 경우 다음과 같은 트릭을 수행해야합니다.

if (MovePetMoving)
{
    if (Math.Abs(pictureBoxPet.Location.X-MovePetTarget[0]) < Math.Abs(MovePetSlope[0]))
        MovePetMoving = false;
    else
        MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
}

다른 팁

다른 전략 :

  1. 화면 코디네이트에서 대상을 보유하는 유형 사각형의 변수를 정의하십시오. 정의하는 일부 임계 값 변수에 따라 필요한만큼 경계를 늘리십시오.

  2. PictureBox의 마우스 업 및 MouseDown 이벤트 처리기를 정의하십시오

  3. Mouse가 아래로 내려갈 때 (Mousedown 이벤트 핸들러에서) PictureBox에서 True로 설정된 부울 변수 (양식 범위)를 정의하고 PictureBox의 MouseUp 핸들러에서 False를 정의하십시오.

  4. 그림 상자의 MousEmove 이벤트 핸들러를 정의하십시오.

    ㅏ. 부울 변수가 true 인 경우 (마우스가 다운되었습니다)

    1. 사각형을 사용하십시오. intersectswith 메소드를 사용하여 PictureBox의 현재 경계가 대상 경계 사각형과 겹치는지 확인하십시오. msdn 사각형. intersectswith : 만약 당신이 멈출 수 있다는 것을 알고 있습니다.

IMHO,이 stragety를 사용하면 크게 단순화 된 코드를 쓸 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top