Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新华社“重生”;“敌人”;随机_C#_Xna - Fatal编程技术网

C# 新华社“重生”;“敌人”;随机

C# 新华社“重生”;“敌人”;随机,c#,xna,C#,Xna,我正在尝试做一个游戏,我想让“敌人”或流星从右边产生,然后到左边。我正在编写一些代码,它似乎工作得很好,但重生失败了。它们最后一个接一个的产卵速度非常慢,然后过了一段时间它们就根本不产卵了。非常感谢您的帮助 这是我的密码: using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; usi

我正在尝试做一个游戏,我想让“敌人”或流星从右边产生,然后到左边。我正在编写一些代码,它似乎工作得很好,但重生失败了。它们最后一个接一个的产卵速度非常慢,然后过了一段时间它们就根本不产卵了。非常感谢您的帮助

这是我的密码:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame2
{

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    List<Enemies> enemies = new List<Enemies>();
    Random random = new Random();

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {

        base.Initialize();
    }
    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
    }

    protected override void UnloadContent()
    {
    }

    float spawn = 0;
    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        spawn += (float)gameTime.ElapsedGameTime.TotalSeconds;

        foreach (Enemies enemy in enemies)
        {
            enemy.Update(graphics.GraphicsDevice);
        }
        LoadEnemies();

        base.Update(gameTime);
    }

    public void LoadEnemies()
    {
        int randY = random.Next(100, 400);
        if (spawn > 1)
        {
            spawn = 0;
            if (enemies.Count() < 10)
                enemies.Add(new Enemies(Content.Load<Texture2D>("meteor"), new Vector2(1110, randY)));
        }
        for (int i = 0; i < enemies.Count; i++)
        {
            if (!enemies[i].isVisible)
            {
                enemies.RemoveAt(i);
                i--;
            }
        }
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
        foreach (Enemies enemy in enemies)
        {
            enemy.Draw(spriteBatch);
        }
        spriteBatch.End();
        base.Draw(gameTime);
    }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用Microsoft.Xna.Framework;
使用Microsoft.Xna.Framework.Audio;
使用Microsoft.Xna.Framework.Content;
使用Microsoft.Xna.Framework.GamerServices;
使用Microsoft.Xna.Framework.Graphics;
使用Microsoft.Xna.Framework.Input;
使用Microsoft.Xna.Framework.Media;
命名空间WindowsGame2
{
公共类游戏1:Microsoft.Xna.Framework.Game
{
图形管理器图形;
SpriteBatch SpriteBatch;
列表敌人=新列表();
随机=新随机();
公共游戏1()
{
graphics=新的GraphicsDeviceManager(此);
Content.RootDirectory=“Content”;
}
受保护的覆盖无效初始化()
{
base.Initialize();
}
受保护的覆盖void LoadContent()
{
spriteBatch=新spriteBatch(图形设备);
}
受保护的覆盖无效UnloadContent()
{
}
浮卵=0;
受保护覆盖无效更新(游戏时间游戏时间)
{
//允许游戏退出
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
这是Exit();
spawn+=(float)gameTime.ElapsedGameTime.TotalSeconds;
foreach(敌人中的敌人)
{
敌人。更新(图形。图形设备);
}
加载敌人();
更新(游戏时间);
}
公营机构(
{
int randY=random.Next(100400);
如果(繁殖>1)
{
繁殖=0;
如果(敌人数()<10)
添加(新敌人(Content.Load(“流星”),新矢量2(1110,兰迪));
}
for(int i=0;i<0.Count;i++)
{
如果(!敌人[i].isVisible)
{
敌人。RemoveAt(一);
我--;
}
}
}
受保护覆盖无效绘制(游戏时间游戏时间)
{
图形设备。清晰(颜色:矢车菊蓝);
spriteBatch.Begin();
foreach(敌人中的敌人)
{
敌人。抽签(斯普特巴特);
}
spriteBatch.End();
基础。抽签(游戏时间);
}
}
}
这是我的课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace WindowsGame2
{
class Enemies
{
    public Texture2D texture;
    public Vector2 position;
    public Vector2 velocity;
    public bool isVisible = true;

    Random random = new Random();
    int randX, randY;

    public Enemies(Texture2D newTexture, Vector2 newPosition)
    {
        texture = newTexture;
        position = newPosition;

        randX = random.Next(-4, 4);
        randY = random.Next(-4, -1);
        velocity = new Vector2(randX, randY);
    }

    public void Update(GraphicsDevice graphics)
    {
        position += velocity;

        if (position.Y <= 0 || position.Y >= graphics.Viewport.Height - texture.Height)
        {
            velocity.Y = -velocity.Y;
        }

        if (position.X < 0 - texture.Width)
        {
            isVisible = false;
        }
    }
    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Microsoft.Xna.Framework.Graphics;
使用Microsoft.Xna.Framework;
命名空间WindowsGame2
{
阶级敌人
{
公共纹理2D纹理;
公共向量2位置;
公共矢量2速度;
公共bool isVisible=true;
随机=新随机();
int randX,randY;
公敌(纹理2D新纹理,矢量2新位置)
{
纹理=新纹理;
位置=新位置;
randX=random.Next(-4,4);
randY=random.Next(-4,-1);
速度=新矢量2(randX,randY);
}
公共无效更新(图形设备图形)
{
位置+=速度;
if(position.Y=graphics.Viewport.Height-texture.Height)
{
velocity.Y=-velocity.Y;
}
if(位置X<0-纹理宽度)
{
isVisible=false;
}
}
公共作废抽签(SpriteBatch SpriteBatch)
{
绘制(纹理、位置、颜色、白色);
}
}

}你的问题就在这里。你的一些流星正在向右移动,而一些则根本不移动

randX = random.Next(-4, 4);
试用

randX = random.Next(-4, -1);
你的敌人/流星有时在X轴上的速度在0到4之间,所以他们向右移动


我可以看到你把Y改成了这个,也许你把它们弄混了?

这是很多代码,你能把它缩减到相关的东西吗?是的,对不起。不过我现在得到了帮助。直到下一次我会记得不要粘贴整个代码,对不起!哦,我真的错过了。唉,有时候解决办法很容易。谢谢你的帮助,非常感谢!