1

私はゲームを作ろうとしていますが、「敵」または流星が右側から出現し、左側に行くようにしたいと考えています。私はいくつかのコードに取り組んでおり、かなりうまく機能しているようですが、リスポーンは失敗します。それらは、非常にゆっくりと 1 つずつ産卵することになり、しばらくするとまったく産卵しなくなります。すべての助けを本当に感謝します。

これが私のコードです:

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);
    }
}
}

そしてここに私のクラスがあります:

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);
    }
}

}

4

1 に答える 1

2

あなたの問題はここにあります。いくつかの隕石は正しく動いており、いくつかはまったく動いていません。

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

使ってみて

randX = random.Next(-4, -1);

敵/隕石の X 軸の速度が 0 から 4 の間である場合があったため、右に移動しました。

Y をこれに変更したのがわかります。

于 2012-10-29T03:32:56.477 に答える