2017-11-16 8 views
3

최근에 인 것을 발견했습니다. XNA 속성 Game.IsActive이 게임 창의 상태를 항상 정확하게 반영하지는 않습니다.XNA 속성 Game.IsActive가 작동하지 않습니다.

특히 게임 창이 분명히 활성화되어 있지 않아도 (예 : 상단 창 표시 줄이 비활성 상태 인 경우) Game.IsActive = true입니다. 활성 Firefox 창과 게임 창을 약간 겹쳐서이 동작을 재현 할 수 있습니다.

여기에 어떤 문제가있을 수 있습니까? 이 속성 Game.IsActive은 게임 창 배경에 enter image description here

는, (스택 오버플로 표시) 브라우저가 전경 (활성)에, 아직 :

요청으로

은,이 그림은 문제를 보여줍니다 true (모든 Visual Studio 출력 (마젠타 색 원)에서 볼 수 있듯이 모든 Update()에서 쓰여지고 있습니다.

XNA 클래스의 정적 참조를 생성 할 때 문제가 될 수 있습니다 내 핵심 게임 클래스와 그 사용?

+0

저는'Game.IsActive'를 직접 사용했으며 이것에 대해서는 아무런 문제가 없었습니다. 문제는 외부 적 가능성이 있습니다. 사진을 보여줄 수 있습니까? (또는 .gif 레코드) 어떻게 재현 할 수 있습니까? – Steven

+0

요청한대로 스크린 샷을 추가했습니다. –

+0

정말 이상한데, 나는 XNA로 내 게임으로 그것을 재현하려고 노력했지만, 실시간으로 값을 확인할 수는 없다. 매번'Game.isactive'를 친다. 궁극적으로 도움이 될만한 것은'Game.isactive'가 false 일 때만 확인하는 if 문을 가져 오는 것입니다 (또는'! game.isactive = true'. 일시 중지 기능을 사용하려는 경우, 'Game.isactive'는'Update()'문장의 가장 위에 있습니다 – Steven

답변

1

코멘트에서 언급했듯이 IsActive -Property에는 약점이 있습니다.

이벤트 Game.ActivatedGame.Deactivated에 가입해야합니다. 창업시 창문에 초점을두면 괜찮을 것입니다.

IMHO : IsActive과 같은 "마법"속성이 마음에 들지 않습니다. 이벤트 .. 훨씬 더 정확

예 : 게임을 가져 오거나 ActivateMyGameDeactivateMyGame를 호출하는 방법에 초점을 푼다

public class MyGame : Game 
{ 
    public MyGame() 
    { 
     // Should move to Initialize-method.. 
     this.Activated += ActivateMyGame; 
     this.Deactivated += DeactivateMyGame; 
     this.IAmActive = false; 
     // do you init-stuff 

     // bring you window to front. After this point the "Game.IsActive" 
     // will be set correctly, while IAmActive is correct from the beginning. 
    } 

    public bool IAmActive { get; set; } 

    public void ActivateMyGame(object sendet, EventArgs args) 
    { 
     IAmActive = true; 
    } 

    public void DeactivateMyGame(object sendet, EventArgs args) 
    { 
     IAmActive = false; 
    } 
} 

매번. 속성 IAmActive은 기본적으로 거짓이며 IsActive의 차이입니다.

+0

좀 더 자세하게 설명해 주시겠습니까? "창 시작에 대한 추가 포커스"란 무엇을 의미합니까? "Game.Activated"에 가입하려면 어떻게합니까? 감사합니다. –

+1

내가 맞다고 이해한다면, 당신이 r 게임은 사용자의 앞과 포커스없이 시작할 수 있습니다. 양식을 실행중인 경우 'BringToFront();'를 수행 할 수 있습니다. 이것을 강요합니다. 이 후에 IsActive-Property가 정확합니다. – kara

+1

이벤트 관련 작업을하지 않은 경우 https://docs.microsoft.com/ko-kr/dotnet/standard/events/ – kara

관련 문제