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