농경/타워 방어 게임을 만드는 중이며 프로그래밍 할 때 매우 익숙합니다. 나는리스트를 사용하는데 큰 문제가있는 것 같다. <> 또는 XNA의 배열. 목록에서 원하는 색인을 반환 할 수 없습니다.C# 목록 및 ArgumentOutOfRangeException 문제
주요 질문은 내 심기 엔진 내부입니다. 필자는 다양한 속성을 가진 식물 목록 (spriteobjects)을 생성하여지도에 배치 할 수있는 식목 시스템을 성공적으로 구현했습니다. 이제는 그 공장에서 마우스 클릭을 기반으로 공장 목록의 특정 공장에 액세스 할 수있는 방법이 필요합니다. 나는 아주 가까이에있는 것처럼 느껴진다. 그러나 나는 해결할 수없는 ArgumentOutOfRangeException으로 끝났다.
초기화
public void Addplants()
{
switch (Mode)
{
case "Wotalemon":
NewPlant = new Plant(Texture, msRect);
NewPlant.AddAnimation("seed", 0, 16, 64, 64, 1, 0.1f);
NewPlant.AddAnimation("sprout", 64, 16, 64, 64, 1, 0.1f);
NewPlant.AddAnimation("wota", 128, 16, 64, 64, 1, 1.0f);
NewPlant.CurrentAnimation = "seed";
NewPlant.DrawOffset = new Vector2(32, 48);
NewPlant.Position = Position;
NewPlant.Type = "wotalemon";
NewPlant.Birthday = Days;
NewPlant.IsSelected = false;
plants.Add(NewPlant);
thisPlant = NewPlant;
//various plants after this
업데이트/
나는 몇 가지 간단한 foreach는 여기에, 아무런 문제를 업데이트하지 않고 식물을 그리는 루프 사용 그리기 : 여기에 코드의 연습이다.
GetInfo를 최종적
public void GetInfo(Rectangle ms)
{
msRect = ms;
for (int i = 0; i < plants.Count; i++)
{
foreach (Plant NewPlant in plants)
{
if (NewPlant.BoundingBox.Intersects(msRect))
{
SelectedIndex = i;
NewPlant.Tint = Color.Black;
}
else
NewPlant.Tint = Color.White;
}
}
}
(이 방법은 spriteobject의 hitbox에서 속성과 mouseRectangle 사용), 여기서 문제이다
public void SelectPlant()
{
//if (SelectedIndex != null)
if (SelectedIndex > plants.Count | SelectedIndex < 0)
SelectedIndex = plants.Count;
SelectedPlant = plants[SelectedIndex];
}
예외가이 라인에 발생된다
SelectedPlant = plants[SelectedIndex];
디버거는 값을 0으로 표시합니다. 미리 시도하기 위해 다양한 방법을 시도했습니다 인덱스가 null이되도록 환기 시키십시오. Getinfo() 메서드에서 뭔가 중요한 것이 여기에 있습니다. 나는 내가 거기에 삽입 한 컬러 테스트가 완벽하게 작동하기 때문에 나는 성공에 매우 가깝다고 확신한다. 내가 마우스를 올려 놓으면 식물이 검은 색으로 변하고 마우스를 제거하면 정상으로 돌아옵니다.
이것은 정확히 에에 마우스를 올려 놓고있는 식물의 색인에 selectedIndex를 설정하려는 경우를 제외하고 원하는 행동 유형입니다. 모든 조언을 크게 주시면 감사하겠습니다.
if 문,'selectedIndex의 = plants.Count,'해야'의해 selectedIndex = plants.Count-1;' – asawyer