コード例 #1
0
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            for (int x = -1; x < visibleTiles.X + 1; x++)
            {
                for (int y = -1; y < visibleTiles.Y + 1; y++)
                {
                    char tileID = Level1.getTile(x + (int)offset.X, y + (int)offset.Y);
                    switch (tileID)
                    {
                    case '#':
                        spriteBatch.Draw(dirt, new Vector2(x * Level1.TileWidth - TileOffset.X, y * Level1.TileHeight - TileOffset.Y), Color.White);
                        break;

                    case '.':

                        break;

                    default:

                        break;
                    }
                }
            }

            spriteBatch.Draw(actor.Sprite, new Vector2((actor.PosX - offset.X) * Level1.TileWidth, (actor.PosY - offset.Y) * Level1.TileHeight), Color.White);

            spriteBatch.End();
            // TODO: Add your drawing code here

            spriteMap.Draw(spriteBatch, 2, 0, new Vector2(0, 0));

            base.Draw(gameTime);
        }
コード例 #2
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                actor.NewPosY -= 1.0f;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Right))
            {
                actor.NewPosX += 1.0f;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Down))
            {
                actor.NewPosY += 1.0f;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Left))
            {
                actor.NewPosX -= 1.0f;
            }

            // TODO: Add your update logic here
            camera.X = actor.NewPosX;
            camera.Y = actor.NewPosY;
            offset.X = camera.X - ((float)visibleTiles.X / 2.0f);
            offset.Y = camera.Y - ((float)visibleTiles.Y / 2.0f);

            actor.VelX = 0.0f;
            actor.VelY = 0.0f;

            float grafity = 0.5f;

            actor.NewPosY += grafity;


            // Clamp camera
            if (offset.X < 0)
            {
                offset.X = 0;
            }
            if (offset.Y < 0)
            {
                offset.Y = 0;
            }
            if (offset.X > Level1.TilesX - visibleTiles.X)
            {
                offset.X = Level1.TilesX - visibleTiles.X;
            }
            if (offset.Y > Level1.TilesY - visibleTiles.Y)
            {
                offset.Y = Level1.TilesY - visibleTiles.Y;
            }

            // Clamp actor
            if (actor.NewPosX < 0)
            {
                actor.NewPosX = 0;
            }
            if (actor.NewPosY < 0)
            {
                actor.NewPosY = 0;
            }
            if (actor.NewPosX > Level1.TilesX - 1)
            {
                actor.NewPosX = Level1.TilesX - 1;
            }
            if (actor.NewPosY > Level1.TilesY - 1)
            {
                actor.NewPosY = Level1.TilesY - 1;
            }

            // Collission detection
            if (Level1.getTile((int)actor.NewPosX, (int)actor.NewPosY) == '#')
            {
                actor.NewPosX = actor.PosX;
                actor.NewPosY = actor.PosY;
            }

            float TileOffsetX = (offset.X - (int)offset.X) * Level1.TilesX;
            float TileOffsetY = (offset.Y - (int)offset.Y) * Level1.TilesY;

            // Update actor position
            actor.PosX = actor.NewPosX;
            actor.PosY = actor.NewPosY;

            base.Update(gameTime);
        }