1

私は最初の 2D アップダウン スクローラーを実際に試していますが、背景サイズを完全に機能させることができないようです。なんらかの理由で小さいままで、何の役にも立ちません。視差スクロール クラスの最初に、変数を初期化するように言われたと思いますが、どれを変更する必要があるかはわかっています。

public Texture2D picture; 
        public Vector2 position = Vector2.Zero; 
        public Vector2 offset = Vector2.Zero; 
        public float depth = 0.0f; 
        public float moveRate = 0.0f; 
        public Vector2 pictureSize = Vector2.Zero; 
        public Color color = Color.White; 

現在のサイズがこれになるので、それを大きくするには、pictureSize を変更する必要があると思います。

画像

最後の質問は、船の画像から空白を削除するにはどうすればよいですか? ありがとう!さらにコードが必要な場合は教えてください。コードを入れなかった理由は長さのためです。

EDIT*: 実際の船をレンダリングするためのコードは次のとおりです。

public void Render(SpriteBatch batch)
{
    batch.Begin();
    batch.Draw(shipSprite, position, null, Color.White, 0.0f, spriteOrigin, 1.0f,
    SpriteEffects.None, 0.0f);
    batch.End();
}

フォトショップを使用して何度かクリアしたので、空白はXNAによって提供されているようです。私はサイトに直接アップロードできないので、ここに置きました : http://www.justbeamit.com/nk95n

public void Draw()        
{           
    layerList.Sort(CompareDepth);  
    batch.Begin();  
    for (int i = 0; i < layerList.Count; i++)       
    {
       if (!moveLeftRight)
       {
           if (layerList[i].position.Y < windowSize.Y)
           {
               batch.Draw(layerList[i].picture, new Vector2(0.0f,       
               layerList[i].position.Y), layerList[i].color);
           }
           if (layerList[i].position.Y > 0.0f)
               batch.Draw(layerList[i].picture, new Vector2(0.0f,   
               layerList[i].position.Y - layerList[i].pictureSize.Y),  
               layerList[i].color);
           else
               batch.Draw(layerList[i].picture, new Vector2(0.0f, 
               layerList[i].position.Y + layerList[i].pictureSize.Y), 
               layerList[i].color);
       }
       else
       {
           if (layerList[i].position.X < windowSize.X)
           {
               batch.Draw(layerList[i].picture, new Vector2(layerList[i].position.X,
               0.0f), layerList[i].color);
           }
           if (layerList[i].position.X > 0.0f)
               batch.Draw(layerList[i].picture, new Vector2(layerList[i].position.X - 
               layerList[i].pictureSize.X, 0.0f), layerList[i].color);
           else
               batch.Draw(layerList[i].picture, new Vector2(layerList[i].position.X + 
           layerList[i].pictureSize.X, 0.0f), layerList[i].color);
       }                
   }             
   batch.End();       
}  

^これは私のコードではなく、XNAの実行方法について読んでいる本からのものです(C#での最初の試み:/)

4

2 に答える 2

0

関連するすべてのコードと詳細がなければ、問題を特定するのは少し難しいですが、スクロール コードには次のようなspriteBatch.Draw()呼び出しがあると思います。

spriteBatch.Draw(Texture, Destination, Source, Color.White);

Destinationもおそらく等しいです。画像のサイズがnew Rectangle(0,0,pictureSize.X,pictureSize.Y)コードで示されていないとpictureSize思います (実際にはありません!)。spritebatch Destination パラメーターを使用すると、画像をビューポートに「引き伸ばす」ことができます。

これにより、PictureSize はビューポートのサイズになるはずです

pictureSize = new Vector2(graphics.PreferredBackBufferWidth,graphics.PreferredBackBufferHeight);

Scaleのパラメーターを使用して拡大することもできますSpiteBatch(ただし、ぼやけます)、必要に応じてより大きな画像を作成することもできます。

白い背景を持つ宇宙船の場合、XNA はこれを行っているのでしょうか、それとも画像は白いのでしょうか? 後者の場合、画像の白い背景を削除するには、GIMPなどの写真編集ツールが必要になると思います。

于 2013-07-03T18:45:57.837 に答える
0

船の画像から空白を削除するにはどうすればよいですか?

Bitmap.MakeTransparent メソッドを使用して、白を透明にしてみることができます。このようなものがうまくいくかもしれません:

        this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);            
        Bitmap test = new Bitmap("C:\Myimage.jpg");
        test.MakeTransparent(Color.White);
于 2013-07-03T19:10:15.010 に答える