0

私は現在、ランダムなオブジェクトが画面に表示されて移動するための要件の1つである割り当てを行っています。XNA は初めてなので、そのような動作をゲームに実装する場所さえわからないので、誰かが正しい方向に向けて微調整してくれたら本当にありがたいです。

キーが押されたときに何かを呼び出すことに慣れているだけですが、完全にランダムなものでは、これはできません。私の知る限り。

ありがとうございました。

4

1 に答える 1

0

最初に UFO のスプライトを作成して設定する必要があります。protected override void Update(GameTime gameTime) コードでは、現在の時刻を取得して、適用するルールと比較するだけです。次に、スプ​​ライトを描画して「移動」する場合は更新します。次に例を示します。

#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
#endregion
 public class Game : Microsoft.Xna.Framework.Game {
        #region Game Settings
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        GraphicsDevice device;
        int screenWidth         = 800;
        int screenHeight        = 600;
        bool fullscreen         = false;
        string title            = "MyGame";
        string origionaltitle;
        float frames            = 0;
        float framesPerSecond   = 0;
        int startTime;
        int currentTime;
        int nextTime;
        #endregion
        struct sprite {

            public string TextureName;
            public Texture2D Texture;
            public Vector2 Position;
            public Vector2 Speed;
            public Color[] TextureData;
        };
        bool DrawUFO = false;
        sprite ufo = new sprite();
        public Game() {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }
        protected override void LoadContent() {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            device = graphics.GraphicsDevice;
            // TODO: use this.Content to load your game content here
            ufo.TextureName = "ufo";
            ufo.Texture = Content.Load<Texture2D>(ball.TextureName);
            ufo.TextureData = new Color[ufo.Texture.Width *ufo.Texture.Height];
            ufo.Texture.GetData(ball.TextureData); 
        }
         protected override void Initialize() {
            // TODO: Add your initialization logic here
            ufo.Position = new Vector2(10f, 10.0f);
            ufo.Speed = new Vector2(0.0f, 10.0f);
            //
            // Set up game window
            graphics.PreferredBackBufferWidth = screenWidth;
            graphics.PreferredBackBufferHeight = screenHeight;
            graphics.IsFullScreen = fullscreen;
            graphics.ApplyChanges();
            origionaltitle = title;
            Window.Title = title;
            //
            // Set the initial time
            startTime = DateTime.Now.Second;
            //
            // Set "random"/next time for ufo to be rendered
            nextTime = startTime + rand.Next(2);
            //
            base.Initialize();
        }
        protected override void Update(GameTime gameTime) {
            //
            // Set the current time
            currentTime = DateTime.Now.Second;
            //
            // if not drawing ufo then
            if(!DrawURO) {
                // 
                // check current time and compare it with the next time
                if( currentTime == nextTime ) {
                    DrawURO = true;
                }
            } else {
                //
                // Update UFO position (aka move it)
                ufo.Posistion += ball.Speed *(float)gameTime.ElapsedGameTime.TotalSeconds;
                //
                // if ufo goes of the screen then
                if(ufo.Position.Y > screenHeight) {
                    //
                    // Reset ufo
                    DrawURO = false;
                    ufo.Position.X = 10.0f;
                    ufo.Position.Y = 10.0f;
                    //
                    // set next time to render
                    nextTime = currentTime + rand.Next(2);
                }

            }
        }
        protected override void Draw(GameTime gameTime) {
            graphics.GraphicsDevice.Clear(Color.Black);
            // TODO: Add your drawing code here
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
            if(DrawUFO == true) {
                spriteBatch.Draw(ufo.Texture, ufo.Position, Color.White);
            }
            spriteBatch.End();
            //
            base.Draw(gameTime);
        }
 }

数年前に大学で行ったコードからこれをコピーしたので、バグがあればお詫びします。

于 2012-04-22T00:07:16.180 に答える