クラスを作成して親子階層を設定するのはこれが初めてです。
このクラスでは、十字線を作成し、次に 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
}
}
}