天文学XNA二维游戏的视差背景实现方式

By admin in 天文学 on 2018年10月25日

天文学 1著目标:Windows
Phone开发实用手册

以游玩应用程序编码开始前,首先问自己几乎独有关游戏设计问题,想知道确定好对象后又下手开始筹划开。

  • 其如果什么品种的玩?
  • 打闹的靶子是呀?
  • 游玩之玩法是统筹?
  • 娱乐的以何种驱动?
  • 玩的道资源如何计划?

《礼记·中庸》:”凡从事豫则就,不豫则弃。言前定,则不跲;事前定,则不困;行前定,则非紧张;道前定,则无到头。”任何事情,有备便可知得逞,没有另外准备就会见失败。话在先期准备好了,辩论时即便无会见理屈词穷了;在劳作前先做好充分的预备,到时候就是不一定处于困境了;在走路面前先行搞好了充分的准备,到下就是非会见感觉内疚了;履行做人之准绳,有预备了便不一定生啊不如愿的行了。游戏的计划性同样如此,如果玩支付的中途修改游戏之筹划初衷还是理念,将会交到高昂之代价。孙子曰:”夫未战而庙算胜者,得算多吗;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎!”讲述的吗是这道理。

打设计流程图

创立游戏设计文档有助于减轻潜在的老毛病,帮助开发团队受到的积极分子理解以及处理的游戏的规划逻辑。理解我们若统筹之游玩逻辑,就于脚的流程图中启。

天文学 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 亚洲必赢手机官网 版权所有