2

私はプログラミングが初めてなので、ポンゲームに取り組んでいます。別のクラス変数にアクセスする方法がわかりません。個別のクラス、緑と青のパドル、ボール、game1.cs があります。

bool movingUp、movingLeft; でボールの動きを制御します。

画面の境界で跳ね返りますが、パドルで動作させる方法がわかりません。基本的にパドルの位置を確認して、ボールがパドルに当たったときに跳ね返るようにするにはどうすればいいですか?つまり、衝突を検出する方法は?

public class Ball
{
    ParticleEngine particleEngine;
    GraphicsDeviceManager graphics;
    Texture2D texture;
    Vector2 position;
    Boolean movingUp, movingLeft;
    Vector2 origin;

    public Ball()
    {
        position = new Vector2(800 / 2, 330);
    }

    public void LoadContent(ContentManager Content)
    {
        texture = Content.Load<Texture2D>("ball");
        movingLeft = true;
        //Particle Engine
        List<Texture2D> textures = new List<Texture2D>();
        textures.Add(Content.Load<Texture2D>("pixel"));
        particleEngine = new ParticleEngine(textures, new Vector2(400, 240));
    }

    public void Update(GameTime gameTime)
    {
        float speed = 2.5f;

        //Physics
        if (movingUp)
        {
            position.Y -= 3;
        }

        if (movingLeft)
        {
            position.X -= 3;
        }

        if (!movingUp)
        {
            position.Y += 3;
        }

        if (!movingLeft)
        {
            position.X += 3;
        }

        if (position.X <= 0 && movingLeft) movingLeft = false;
        if (position.Y <= 85 && movingUp) movingUp = false;

        if (position.X >= 800 - texture.Width && !movingLeft) movingLeft = true;
        if (position.Y >= 500 - texture.Height && !movingUp) movingUp = true;

        origin = new Vector2(position.X + texture.Width / 2, position.Y + texture.Height / 2);

        //Particles
        particleEngine.EmitterLocation = new Vector2(origin.X, origin.Y);
        particleEngine.Update();
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        particleEngine.Draw(spriteBatch);
        spriteBatch.Draw(texture, position, Color.White);
    }

}

パドル クラスの 1 つ (名前と移動キー以外は同じように見えます):

public class GreenPaddle
{
    Texture2D texture;
    Vector2 position;
    float speed = 2f;
    public GreenPaddle()
    {
       position = new Vector2(10, 230);
    }
    public void LoadContent(ContentManager Content)
    {
        texture = Content.Load<Texture2D>("greenpaddle");
    }
    public void Update(GameTime gameTime)
    {
        KeyboardState keyState = Keyboard.GetState();
        //Check If Keys Are Pressed // Movement
        if (keyState.IsKeyDown(Keys.W))
            position.Y -= speed;
        if (keyState.IsKeyDown(Keys.S))
            position.Y += speed;
        //Check Border
        if (position.Y < 87)
        {
            position.Y = 87;
        }
        if (position.Y > 396)
        {
            position.Y = 396;
        }
     }
     public void Draw(SpriteBatch spriteBatch)
     {
        spriteBatch.Draw(texture, position, Color.White);
     }
}

事前に感謝します。私は本当にこのようなことを学びたいです:D

4

1 に答える 1

2

アクセスする変数を public として宣言するか、get メソッドを作成します。

パブリック変数の場合、次のようにします。

public Vector2 Position;

それにアクセスするには、次のように呼び出します。

Ball ball;
ball.Position

get メソッドの実装の場合:

public Vector2 getPosition()
{
    return Position;
}

そして、そのメソッドを呼び出して位置を取得します。

于 2013-07-26T14:13:45.597 に答える