2016-11-06 80 views
0

我想让我的第一个XNA游戏,我不知道如何实现以下内容: 我有一个不同类型的对象的列表,他们被加载和绘制。通过点击其中一个对象,我需要创建一个相同类型的新对象,并将这个新对象添加到另一个列表中。 我试过下面的代码,我可以添加尽可能多的对象,因为我想要一个新的列表,但只有当我点击第零个对象时(它们都有一个第零个对象的类型)。当我点击其他对象时,什么也没有发生。如何使它工作?如何实现选择

for (int i = 0; i < initialPlanets.Count; i++) 
{ 
    MouseState mouse = Mouse.GetState(); 
    if (initialPlanets[i].CollisionRectangle.Contains(
    mouse.X, mouse.Y) && 
    mouse.LeftButton == ButtonState.Released && 
    previousButtonState == ButtonState.Pressed) 
    { 
     userPlanetSequence.Add(new Planet(
     initialPlanets[i].Type, 
     GetPlanetSprite(initialPlanets[i].Type), 
     new Vector2(100 * (i + 1), 100))); 
    } 
    previousButtonState = mouse.LeftButton; 
} 

回答

0

我假设你在点击事件时调用它。

每次通过循环时,您都在轮询鼠标状态。第一次通过它(在对象为零时),您设置了previousButtonState = mouse.LeftButton,以便后续循环的if语句总是为false。

我不能在不知道最初如何设置previousButtonState的情况下给出一个完整的示例,但朝着正确方向迈出的一步将会把MouseState mouse = Mouse.GetState()置于循环之外,因此您只能获得一次。

+0

谢谢,它的工作。 MouseState mouse = Mouse.GetState()和previousButtonState = mouse.LeftButton应该在循环外部。 – Ksenia

+0

@Ksenia很高兴我能帮到你。如果您觉得这很有帮助,upvote和复选标记可能会向其他社区成员发出信号,表明这可能对他们有帮助。 – SteelSoul