视差背景调整大小

时间:2013-07-03 17:56:32

标签: c# xna parallax

我正在尝试我的第一个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才能让它更大,因为我现在的尺码是这样的!

image

我的最后一个问题是,如何从船舶图像中删除空白? 谢谢! 如果需要更多代码,请告诉我,我没有把它放在那里的原因是由于长度。

编辑*: 这是渲染实际船舶的代码

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提供的,因为我已经使用photoshop清除了几次。 因为我无法直接上传到网站,我已将其放在此处: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#转换为:/)

2 个答案:

答案 0 :(得分:0)

如果没有所有相关的代码和细节,说明这个问题有点困难,但我认为你的滚动代码有一个spriteBatch.Draw()调用simlar:

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);

您还可以使用SpiteBatchScale参数来放大它(但它会变得模糊)或只是根据您的需要创建更大的图像。

现在对于具有白色背景的宇宙飞船,XNA是做这个还是图像是白色的?我假设后者,你需要一个照片编辑工具,如GIMP,以删除图像的白色背景。

答案 1 :(得分:0)

  

如何从船舶图像中删除空白?

您可以尝试使用Bitmap.MakeTransparent method使白色透明。这样的事情可能有用:

        this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);            
        Bitmap test = new Bitmap("C:\Myimage.jpg");
        test.MakeTransparent(Color.White);