スーパー マリオ ブラザーズの最初のレベルのクローンを作成しようとしていますが、クラス同士が「会話」するのに問題があります。現在、2 つのコントローラー クラス (キーボード、ゲームパッド) と 2 つのアニメーション スプライト クラス (RunMarioSprite、DeadMarioSprite) があります。私がやりたいことは、ユーザーからのキーボード/ゲームパッド入力に基づいて、画面に表示されるこれら 2 つのスプライトを切り替えることです。キー F を押すと、マリオが正しく表示されます。キー D が押された場合、マリオは上下に移動する必要があります。
コントローラ クラスを使用して画面に描画しているアニメーション スプライト クラスを変更する適切な方法は何ですか?
キーボード クラス
public class KeyboardController : IController
{
KeyboardState keyboard = Keyboard.GetState();
private IAnimatedSprite marioSprite;
Texture2D texture;
public void Update()
{
if (keyboard.IsKeyDown(Keys.Q))
{
// QUIT GAME
}
if (keyboard.IsKeyDown(Keys.F))
{
// MARIO RUN RIGHT
}
if (keyboard.IsKeyDown(Keys.D))
{
// DEAD MARIO UP DOWN
}
}
}
アニメーション化されたスプライト クラスの例
public class RunMarioSprite : IAnimatedSprite
{
public Texture2D Texture { get; set; }
private int currentFrame = 0;
private int totalFrames = 4;
public int frameShift = 30;
public RunMarioSprite(Texture2D texture)
{
currentFrame = 0;
this.Texture = texture;
}
public void Update()
{
currentFrame++;
if (currentFrame == totalFrames)
currentFrame = 0;
}
public void Draw(SpriteBatch spriteBatch)
{
Rectangle sourceRectangle2 = new Rectangle((240 +(currentFrame*frameShift)), 0, 30, 30);
Rectangle destinationRectangle2 = new Rectangle(100, 100, 30, 30);
spriteBatch.Begin();
spriteBatch.Draw(Texture, destinationRectangle2, sourceRectangle2, Color.White);
spriteBatch.End();
}
}
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
foreach (IController Controller in ControllerList)
{
Controller.Update();
}
marioSprite.Update();
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
marioSprite.Draw(this.spriteBatch);
base.Draw(gameTime);
}
メイン (更新と描画)
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
foreach (IController Controller in ControllerList)
{
Controller.Update();
}
marioSprite.Update();
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
marioSprite.Draw(this.spriteBatch);
base.Draw(gameTime);
}
質問の形式が悪い場合は申し訳ありません。助けてくれてありがとう!