XNA二维游戏的视差背景达成形式

By admin in 天文学 on 2019年3月9日

图片 1文章指标:Windows
Phone开发实用手册

在嬉戏应用程序编码起始从前,首先问本身多少个关于游戏设计难题,想掌握确定好靶子后再动手起头安排开发。

  • 它使什么项指标玩耍?
  • 游戏的对象是哪些?
  • 娱乐的玩法是设计?
  • 十1十七日游的使用何种驱动?
  • 游戏的艺术能源怎么样规划?

《礼记·中庸》:”凡事豫则立,不豫则废。言前定,则不跲;事前定,则不困;行前定,则不疚;道前定,则不穷。”任何工作,有准备就能学有所成,没有任何准备就会破产。话在预先准备好了,辩论时就不会理屈词穷了;在做事前先搞好丰盛的预备,到时候就不一定处于困境了;在行进前先搞好了足够的备选,到时候就不会感到抱歉了;履行做人的准绳,有预备了就不一定有怎么样不顺利之事了。游戏的布置性相同如此,假若游戏开发的中途修改游戏的筹划初衷依然理念,将会提交高昂的代价。外甥曰:”夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎!”讲述的也是其一道理。

游戏设计流程图

成立游戏设计文书档案有助于减轻潜在的毛病,帮助开发公司中的成员明白和处理的游艺的陈设逻辑。领悟大家要规划的游乐逻辑,就从上边的流程图中起始。

图片 2

您能够阅览,小小的射击游戏的流程图就这么眼花缭乱,大型游乐的筹划则进一步复杂。详细的文书档案作为联系工具得以援救设计职员、开发职员和测试人士精晓期望的目的,实现预期的干活。

游玩的视差背景

飞艇在运动时绘制云图案作为背景,并将其从右向左移动。本例中大家使用视差背景完毕真正动感的背景效果。

天工学中动用视差法是规定天体之间相差。视差正是从有肯定距离的四个点上着眼同三个对象所产生的大方向差距。从指标看八个点时期的夹角,叫做那五个点的视差角,两点之间的偏离称作基线。只要驾驭视差角度和基线长度,就能够总计出指标和观测者之间的距离。

游玩开发中运用视觉上的误差,即一般所说的视错觉。造成所谓视差的不光是芸芸众生肉眼所存在的局限和阻碍,同时也是出于文化深层的联想和思辨所吸引。本例中绘制视差背景的不二法门是:用于绘制多层图像并以不一致的快慢移动,来达到在飞艇在云端飞行的视错觉。

按 SHIFT + ALT + C成立视差背景类,键入类名ParallaxingBackground.cs。

创制游戏剧中人物类,类名为ParallaxingBackground。同时按下SHIFT + ALT +
C,在弹出的窗体中选用[Code]|[Code file]

在新创立的ParallaxingBackground.cs文件中添加引用。

XNA Project: Shooter File:
ParallaxingBackground.cs

 

using System; 

using Microsoft.Xna.Framework; 

using Microsoft.Xna.Framework.Content; 

using Microsoft.Xna.Framework.Graphics; 

在ParallaxingBackground类中定义类型为Texture2D的背景图片变量、Vector2数组和移动速度的变量。

XNA Project: Shooter File:
ParallaxingBackground.cs

// The image representing the parallaxing background 

Texture2D texture; 



// An array of positions of the parallaxing background 

Vector2[] positions; 



// The speed which the background is moving 

int speed; 

在Initialize()方法中,加载背景图片,设定图片移动速度。

第二利用content.load方法初步化图形,然后总计Vector2数组中指标的数目(screenWidth
/ texture.Width +
1),当中+1的指标是为保障背景切换平滑。在For循环中,设定背景图片展现的起第一个人置。

XNA Project: Shooter File:
ParallaxingBackground.cs

publicvoid Initialize(ContentManager content, String texturePath, int screenWidth, int speed)

{ 

// Load the background texture we will be using

 texture = content.Load<Texture2D>(texturePath); 



// Set the speed of the background

this.speed = speed; 



// If we divide the screen with the texture width then we can determine the number of tiles need.

// We add 1 to it so that we won't have a gap in the tiling

 positions = newVector2[screenWidth / texture.Width + 1]; 



// Set the initial positions of the parallaxing background

for (int i = 0; i < positions.Length; i++) 

{ 

// We need the tiles to be side by side to create a tiling effect

 positions[i] = newVector2(i * texture.Width, 0); 

} 

} 

在Update方法中改变背景图片的职位坐标。每一种背景图片被认为是二个瓷片Tile,更新瓷片的X轴坐标,以运动速度变量值作为X轴坐标移动的增量。尽管运动速度变量小于零,则瓷片从右往左移动。若是移动速度变量大于零,则瓷片从左往右移动。移动时判断瓷片呈现地方是否超越显示器区域,假如是则重置瓷片的X轴坐标,以便背景滚动平滑。

XNA Project: Shooter File:
ParallaxingBackground.cs

publicvoid Update() 

{ 

// Update the positions of the background

for (int i = 0; i < positions.Length; i++) 

{ 

// Update the position of the screen by adding the speed

 positions[i].X += speed; 

// If the speed has the background moving to the left

if (speed <= 0) 

{ 

// Check the texture is out of view then put that texture at the end of the screen

if (positions[i].X <= -texture.Width) 

{ 

positions[i].X = texture.Width * (positions.Length - 1); 

} 

} 

// If the speed has the background moving to the right

else

 { 

// Check if the texture is out of view then position it to the start of the screen

if (positions[i].X >= texture.Width * (positions.Length - 1)) 

{ 

positions[i].X = -texture.Width; 

} 

} 

} 

} 

任务坐标更新完毕后,使用Draw方法绘制视差背景。

XNA Project: Shooter File:
ParallaxingBackground.cs

publicvoid Draw(SpriteBatch spriteBatch) 

{ 

for (int i = 0; i < positions.Length; i++) 

{ 

spriteBatch.Draw(texture, positions[i], Color.White); 

} 

} 

在Game1.cs中宣示视差背景的层bgLayer1和bgLayer2。

XNA Project: Shooter File: Game1.cs

// Image used to display the static background 

Texture2D mainBackground; 



// Parallaxing Layers 

ParallaxingBackground bgLayer1; 

ParallaxingBackground bgLayer2; 

在Game1的Initialize方法中实例化视差背景层。

XNA Project: Shooter File: Game1.cs

bgLayer1 = new ParallaxingBackground(); 

bgLayer2 = new ParallaxingBackground(); 

在Game1的LoadContent方法中加载背景层。 

XNA Project: Shooter File: Game1.cs

// Load the parallaxing background 

bgLayer1.Initialize(Content, "bgLayer1", GraphicsDevice.Viewport.Width, -1); 

bgLayer2.Initialize(Content, "bgLayer2", GraphicsDevice.Viewport.Width, -2); 



mainBackground = Content.Load<Texture2D>("mainbackground"); 

在Game1的Update方法中,更新游戏角色飞艇之后更新视差背景。

XNA Project: Shooter File: Game1.cs

// Update the parallaxing background 

bgLayer1.Update(); 

bgLayer2.Update(); 

在Game1的Draw方法中,绘制游戏背景。

XNA Project: Shooter File: Game1.cs    

GraphicsDevice.Clear(Color.CornflowerBlue); 



// Start drawing

spriteBatch.Begin(); 



spriteBatch.Draw(mainBackground, Vector2.Zero, Color.White); 



// Draw the moving background

bgLayer1.Draw(spriteBatch); 

bgLayer2.Draw(spriteBatch); 

在模拟器中运作

按F5周转应用程序,大概点击Start Debugging按钮运营,如图 Start
Debugging。

图片 3

图 Start Debugging

图片 4
图片 5

图 飞艇游戏

参考文献

本章参考和引用APP HUB(http://create.msdn.com/en-US)的Game
Development Tutorial,以及MSDN Windows Phone开发文书档案。

源代码下载地址:http://files.cnblogs.com/xuesong/shooter.zip

作者:雪松

本文版权归小编全部,转发请注解出处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢手机官网 版权所有