多方向子弹[阅读]

时间:2012-11-30 14:42:23

标签: c# vector xna bullet

尝试为一个仍在为学校工作的项目编写一段时间的代码,即使已经完成了。

我想制作一枚手榴弹,向与它相撞的敌人射出子弹,但是我需要帮助atm的是同时向所有不同方向射击8发子弹。

这是我老师给我的代码(我向他求助)

if (mouse.LeftButton == ButtonState.Pressed)
            {
                Texture2D pewTexture;
                pewTexture = game.Content.Load<Texture2D>("pew");
                game.firingSound.Play();
                //Tweak pews to shoot at mouse, rather than just going straight on the y axis.
                pew = new CPew(game, pewTexture);
                pew.velocity = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)) * 10f + spriteVelocity;
                pew.position = position + pew.velocity * 5;

                //easy cheesy way:
                //pew.position = position;
                //pew.position.X += 15f;
                //pew.position.Y -= 20f;





                //super awesome cool way for cool people and celebrities
                pew.position = position +
                    new Vector2(
                        texture.Width * .2f - pew.texture.Width * .2f,
                        -pew.texture.Height);

                game.pews.Add(pew);

                myFiringDelay = 10;


            }
            else
            {
                if (mouse.RightButton == ButtonState.Pressed)
                {
                    float pi2 = (float)Math.PI * 2.0f;
                    int numShots = 10;
                    float pi2overnum = pi2 / numShots;

                    for (int i = 0; i < numShots; i++)
                    {
                        Vector2 direction = PiToVec2(pi2overnum * i);

                        //particles[i].reset(position,direction, vector2.zero, 6);
                        game.pews[i].Reset(pew.position, direction, Vector2.Zero);

                    }

           Vector2 PiToVec2(float piT)
           {
              return new Vector2((float)Math.Sin(piT), (float)Math.Cos(piT));

           }
显然这会让它在鼠标右击时朝各个方向射击,但每次我尝试它并且我的游戏直接崩溃 然后我们有一个子弹类,这是子弹,这就是我想要同时向这些方向拍摄的东西

你们可能无法帮助我向你展示的代码,我花了一段时间寻找一种方法来做到这一点但我似乎无法找到任何东西

以前的示例和/或源代码会非常有用,至少是另一种看待此感谢的方式。

当它崩溃时,它告诉我索引超出范围或者是否定的,如果你们可以向我展示多向子弹的基本代码,我很高兴

1 个答案:

答案 0 :(得分:0)

你遇到的问题是当你尝试循环你的game.pews集合时,你试图在集合的前10个项目上调用Reset()。然而,那里似乎没有10个长椅。因此,当您到达最后并尝试访问下一个时,就会出现“索引超出范围”错误。

对于问题的手榴弹部分的8发子弹,我想你想做这样的事情。

//Once a grenade has collided with an enemy 
float pi2 = (float)Math.PI * 2.0f;
int numShots = 8;
float pi2overnum = pi2 / numShots;

for (int i = 0; i < numShots; i++)
{
   Vector2 direction = PiToVec2(pi2overnum * i);

   pew = new CPew(game, pewTexture);

   pew.velocity = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)) * 10f + spriteVelocity;

   //Set the position based off of the grenades last position.
   //Set the direction.
   //Set any other attributes needed.

   game.pews.Add(pew);
}

现在你有八颗子弹从手榴弹爆炸的不同方向移动。 要更新它们并绘制它们,我建议使用foreach循环,这样您就不必担心“索引超出范围”错误。

foreach CPew pew in game.pews
{
   pew.Update();
}