我正在尝试我的第一个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才能让它更大,因为我现在的尺码是这样的!
我的最后一个问题是,如何从船舶图像中删除空白? 谢谢! 如果需要更多代码,请告诉我,我没有把它放在那里的原因是由于长度。
编辑*: 这是渲染实际船舶的代码
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#转换为:/)
答案 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);
您还可以使用SpiteBatch
的Scale
参数来放大它(但它会变得模糊)或只是根据您的需要创建更大的图像。
现在对于具有白色背景的宇宙飞船,XNA是做这个还是图像是白色的?我假设后者,你需要一个照片编辑工具,如GIMP,以删除图像的白色背景。
答案 1 :(得分:0)
如何从船舶图像中删除空白?
您可以尝试使用Bitmap.MakeTransparent method使白色透明。这样的事情可能有用:
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
Bitmap test = new Bitmap("C:\Myimage.jpg");
test.MakeTransparent(Color.White);