0

クラスを作成して親子階層を設定するのはこれが初めてです。

このクラスでは、十字線を作成し、次に PlayerClasses.cs 内にプレイヤーシップを作成しました。十字線の画面境界を問題なく設定できました。Updatemeそして、船の で同じコードを使用するとうまくいくと思いました。しかし、そうではなく、その理由が少し気になります。

問題は、私が呼んでいる四角形がわからないことです。私がコーディングしたとおりだと思いましたm_rectが、うまくいかないようです。助けていただければ幸いです。

以下に、機能していないコードのセクションを投稿し、その後にクラスのコード全体を投稿しました。

public void Updateme(KeyboardState kb, GameTime gt)
{
    m_velocity = Vector2.Zero;

    if (kb.IsKeyDown(Keys.W))
        m_velocity.Y = -1;
    if (kb.IsKeyDown(Keys.S))
        m_velocity.Y = 1;
    if (kb.IsKeyDown(Keys.A))
        m_velocity.X = -1;
    if (kb.IsKeyDown(Keys.D))
        m_velocity.X = 1;

    m_position += m_velocity;

    // Extra Task 1 PlayerShip Screenbounds
    #region Extra task1

    if (m_rect.X > 800)
    {
       m_rect.X = 800;
    }

    if (m_rect.X < 0)
    {
        m_rect.X = 0;
    }

    if (m_rect.Y > 480)
    {
        m_rect.Y = 480;
    }

    if (m_rect.Y < 0)
    {
        m_rect.Y = 0;
    }

    #endregion Extra task1

コード全体

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

namespace Sidescroller
{
    class Crosshair : StaticGraphic 
    {
        private Color m_tint;
        private Vector2 m_center;

        public Crosshair(Rectangle rect, Texture2D txr, Color tint)
            : base(rect, txr)
        {
            m_tint = tint;
            m_center = new Vector2(m_rect.Width / 2, m_rect.Height / 2);
        }

        public void Updateme(MouseState ms_curr)
        {
            m_rect.X = ms_curr.X;
            m_rect.Y = ms_curr.Y;

            // Extra Task 1 Crosshair Red When Clicked
            #region Extra task1

            if (ms_curr.LeftButton == ButtonState.Pressed)
            {
                m_tint = Color.Red;
            }
            else
            {
                m_tint = Color.Green;
            }

            #endregion Extra task1

            // Extra Task 2 Rotating Crosshair
            #region Extra task2


            #endregion Extra task2

            // Extra Task 3 Crosshair Screenbounds
            #region Extra task3

            if (m_rect.X > 800)
            {
                m_rect.X = 800;
            }

            if (m_rect.X < 0)
            {
                m_rect.X = 0;
            }

            if (m_rect.Y > 480)
            {
                m_rect.Y = 480;
            }

            if (m_rect.Y < 0)
            {
                m_rect.Y = 0;
            }

            #endregion Extra task3

        }

        public override void drawme(SpriteBatch sBatch)
        {
            sBatch.Draw(m_txr, m_rect, null, m_tint, 0, m_center, SpriteEffects.None, 0);
        }

    }

    class PlayerShip : MotionGraphic
    {
        public PlayerShip(Rectangle rect, Texture2D txrShip)
            : base(rect, txrShip)
        {

        }

        public void Updateme(KeyboardState kb, GameTime gt)
        {
            m_velocity = Vector2.Zero;

            if (kb.IsKeyDown(Keys.W))
                m_velocity.Y = -1;
            if (kb.IsKeyDown(Keys.S))
                m_velocity.Y = 1;
            if (kb.IsKeyDown(Keys.A))
                m_velocity.X = -1;
            if (kb.IsKeyDown(Keys.D))
                m_velocity.X = 1;

            m_position += m_velocity;

            // Extra Task 1 PlayerShip Screenbounds
            #region Extra task1

            if (m_rect.X > 800)
            {
                m_rect.X = 800;
            }

            if (m_rect.X < 0)
            {
                m_rect.X = 0;
            }

            if (m_rect.Y > 480)
            {
                m_rect.Y = 480;
            }

            if (m_rect.Y < 0)
            {
                m_rect.Y = 0;
            }

            #endregion Extra task1

        }
    }




}
4

0 に答える 0