求助找一个小时候玩过的马里奥创造switch版本

  在前文()中提到本人最近因学习WP开发时,因需要学习XNA,遂产生了尝试开发一个小时候玩过无数遍的游戏"超级玛丽"的想法.
  这两天终于完成了游戏的雏形.从本文开始,我将一步步分享开发的历程.由于我没有系统的学习过游戏开发,所以文章中提到的内容也许并不是游戏开发正规的做法,但如果您从未接触过游戏开发,并对此感兴趣,我想我的文章还是能给你带来帮助的.
  在开始之前,你需要一些必备的开发工具:VS和XNA.以下是本文对应的开发环境
Microsoft XNA Game Studio 4.0
  VS相信大家都有,至于版本,以下是各个VS对应的XNA版本,如果你不是用的VS2010,那么你可以下载对应的XNA版本.
  XNA Game Studio 2.0(VS2005)
  XNA Game Studio 3.0(VS2008)
  XNA Game Studio 3.1(VS2008)
  XNA Game Studio 4.0(VS2010)
  下载连接就不贴了,谷哥一下就出来了,我是安装WP7.1时顺带给我装上的.
Hello Mario
  准备工作完成,可以正式开始我们的玛丽开发历程了.
  打开VS,新建一个项目,选择C#-XNA Game Studio 中的Windows Game(4.0)模板,项目名称为SuperMario,如下图,点确定
这时VS会为我们生成一个名为SuperMario的解决方案,解决方案下面有两个项目,一个是名为SuperMario的主项目,另一个是名为SuperMarioContent的资源项目.SuperMarioContent项目是专门用来存放一些游戏资源的,比如图片,声音,地图什么的.解决方案如下图
打开Game1.cs,这是我们的主游戏文件,类似于新建一个Winform项目时默认创建的Form1.cs,同样,它的加载由Program.cs完成.
我们看到,它有5个重写的方法,前面三个我们看名字也能猜到大概它们的功能.后面两个才是我们关注的重点.这里我简单介绍下,我想大家肯定知道,电影是怎么形成的:一张张静止的图片不断的切换造成视觉上动画.那么游戏其实是一样的,区别就在电影是已经拍好的图片一张张切换,而游戏则是根据玩家的控制,画出相应的静止图片,然后不停的切换,形成动画,也就是说游戏比电影多了一个画的步骤,所以玩游戏比看电影对电脑的配置要求高,因为做的事多了.Game1.cs中的Draw方法就是负责画画的.而Update则是根据玩家的输入和时间的流动更新游戏中的元素.当游戏运行时,Update和Draw方法会不停的轮流运行,即时你没有为游戏添加任何功能.比如你现在按F5运行时,你看到的是一张静止的蓝色背景窗口,但实际上Update和Draw方法会每秒执行60次.
  接下来让我们的玛丽出现在游戏画面中.在SuperMarioContent项目中添加一个文件夹,名称为Image,在该文件夹种"添加现有项",添加这张图片,这是mario的素材图片(有点小,大家凑和着用吧.实在找不到更好的了).在Game1.cs中输入如下代码
Texture2D _marioT
protected override void LoadContent()
spriteBatch = new SpriteBatch(GraphicsDevice);
_marioText = this.Content.Load&Texture2D&(@"Image/mario");
protected override void Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(_marioText, new Vector2(100, 100), new Rectangle(0, 0, 16, 16), Color.White, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0);
spriteBatch.End();
base.Draw(gameTime);
我们在LoadContent中载入了一张图片,然后在Draw方法中,绘制它,绘制的位置是坐标(x:100,y:100),XNA中默认的坐标原点是左上角.绘制时,并有没有绘制整个图片,而是一个小块,这个小块在图片中的位置是(x:0,y:0)长宽为16.按F5运行.Mario已经出现在游戏的画面中了...
跑吧 Mario
一动不动的Mario怎么去救公主呢,我们先来解决Mario跑步的问题.既然Mario能移动,说明他的位置是会变的,为它的位置申明一个变量,然后在Update方法中更新他的位置.代码现在如下
Texture2D _marioT
Vector2 _marioPosition = new Vector2(100, 100);
protected override void Update(GameTime gameTime)
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
_marioPosition.X++;
base.Update(gameTime);
protected override void Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(_marioText, _marioPosition, new Rectangle(0, 0, 16, 16), Color.White, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0);
spriteBatch.End();
base.Draw(gameTime);
按F5运行,怎么样,我们的Mario已经会"移动"了吧?不过现在的移动有点像鬼一样在飘,而且是自动的,不受我们的控制.我们先给他加上控制,一般游戏都是用"A" "D" 键来移动的,一个左移,一个右移.修改Update函数
protected override void Update(GameTime gameTime)
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
KeyboardState keyState = Keyboard.GetState();
if (keyState.IsKeyDown(Keys.A))
_marioPosition.X--;
if (keyState.IsKeyDown(Keys.D))
_marioPosition.X++;
base.Update(gameTime);
代码很好理解,我就不解释了....现在按F5运行,Mario已经成为我们能控制的游戏角色了.但Mario还是像鬼一样在飘,是时候让它的脚动起来了。刚才提到过,所谓的动画,就是不断地切换静态的图片,为了让我们的Mario动起来,我们让Mairo在移动的时候不停的切换mario.png图片中的第二个和第三个小玛丽图片。这里我们给图片的所有小图片的位置编号,从0开始,那么跑步应该用1号和2号图片。先看代码
int _frmStartIndex=0;
int _frmEndIndex = 0;
int _frmIndex = 0;//当前画的图块的索引
int _frmChangeTime = 100;//多少毫秒换一次图片
int _frmCurrentTime = 0;//距离上次换图片过了多少毫秒
protected override void Update(GameTime gameTime)
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
KeyboardState keyState = Keyboard.GetState();
if (keyState.IsKeyDown(Keys.A))
_marioPosition.X--;
_frmStartIndex = 1;
_frmEndIndex = 2;
if (keyState.IsKeyDown(Keys.D))
_marioPosition.X++;
_frmStartIndex = 1;
_frmEndIndex = 2;
if (keyState.GetPressedKeys().Count() == 0)
_frmStartIndex = 0;
_frmEndIndex = 0;
_frmCurrentTime += gameTime.ElapsedGameTime.M
if (_frmCurrentTime & _frmChangeTime)
_frmCurrentTime = 0;
_frmIndex++;
if (_frmIndex & _frmEndIndex)
_frmIndex = _frmStartI
base.Update(gameTime);
protected override void Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(_marioText, _marioPosition, new Rectangle(_frmIndex * 16, 0, 16, 16), Color.White, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0);
spriteBatch.End();
base.Draw(gameTime);
请注意Draw函数的第二个参数有一些小的更改,在Update函数中,我们通过判断按键情况选择画图时应该选择的图片块的区域,Mario不动时图片块的索引范围是0-0,移动时是1-2,并且定义了一个切换图片的间隔时间变量_frmChangeTime,在Update函数中不停的累积,当超过100毫秒时,换下一张图片。如果没有这个间隔时间变量,那么每次Update执行都会换图片,那我们的Mario跑起来会疯了一样手舞足蹈。按F5运行,Mario移动时会动了吧,我想一定有人会说&为什么只有手会动,脚不动&,这纯粹是因为我找不到玛丽移动时应该用哪些图,不用怀疑现在的代码,如果你能找到正确的图片,就能让Mario正确的手脚并用跑起来。
  处理加速  
  如果你玩过Mario这个游戏,你一定知道,Mario移动时是有个加速的过程的,而不是一按下跑步键就按固定的速度移动。其实这很容易解决,学过中学物理的我们都知道,加速移动嘛,不就是给个加速度然后运动的时候不停的增加速度。这里我们只要在游戏中通过物理知识模拟真实的运动情况就行了。看代码
float _runAcceleration=0.01F;//跑步加速度
float _runResistance = 0.005F;//...
int MAXspeedR = 3;//右移最大速度
int MAXspeedL = -3;//左移最大速度
float _speed = 0;//当前速度
protected override void Update(GameTime gameTime)
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
KeyboardState keyState = Keyboard.GetState();
int frmTime=gameTime.ElapsedGameTime.M
if (keyState.IsKeyDown(Keys.A))
_speed = _speed & MAXspeedL ? MAXspeedL : _speed - _runAcceleration * frmT
if (keyState.IsKeyDown(Keys.D))
_speed = _speed & MAXspeedR ? MAXspeedR : _speed + _runAcceleration * frmT
if (keyState.GetPressedKeys().Count() == 0)
if (_speed & 0)
_speed -= _runResistance * frmT
if (_speed & 0)
_speed = 0;
if (_speed & 0)
_speed += _runResistance * frmT
if (_speed &0)
_speed = 0;
if (_speed == 0)
_frmStartIndex = 0;
_frmEndIndex = 0;
_frmStartIndex = 1;
_frmEndIndex = 2;
this._marioPosition.X += _
_frmCurrentTime += frmT
if (_frmCurrentTime & _frmChangeTime)
_frmCurrentTime = 0;
_frmIndex++;
if (_frmIndex & _frmEndIndex)
_frmIndex = _frmStartI
base.Update(gameTime);
Update函数现在可以分为2部分,第一部分根据用户的键盘输入处理Mario速度,用时间乘以加速度得到速度,当用户不再按任何键时,处理减速。第二部分为根据Mario的速度来处理图片索引范围,现在当Mario的速度不为0时,显示跑步图片。这里this._marioPosition.X += _何解呢?因为我们算出的速度是这一帧内的速度,可以理解为单位速度,距离等于速度乘以时间,时间为1,相当于距离等于速度。最后我们按F5运行,怎么样,此时的Mario已经有点感觉了吧。  目前Mario不管左移还是右移,身体都是朝右边的,往左移动时应该面朝左,这个不难处理,图片已经有了,有兴趣的可以自己试试。
第一篇就先介绍到这里,我们的超级玛丽还远远没有完成,剩下的以后慢慢来。希望对大家有帮助。
下雪天的写个伯克不容易,给个好评阿,亲.....
阅读(...) 评论()& & & &前面做过一个小的马里奥游戏,现在来实现一个小时候玩过的类似文曲星上《英雄坛说》的小RPG游戏。
& & & &与横板的马里奥游戏不同,这个游戏需要实现的东西更多——包括45度斜角地图、2.5D物体遮挡、寻路算法、npc交互等,不过不需要再引入Box2d了,因为只要实现简单的物体碰撞检测就可以了。
& & & &现在已经实现地图载入、45度斜角交错地图坐标定位、2.5D物体遮挡,不过遮挡还有一个问题,就是png图像透明部分还是会遮挡后面的对像,不知道没有有高人知道是什么原因?
现在实现如下:
一、地图素材
45度斜角地图素材下载:
不过这个下载的素材背景是黑色的,又在网上找了一个png版本:
女主角的帧动画:
二、地图制作
1、新建地图
选择交错地图,这样做出来的地图是一个大矩形,比较好处理(可惜后面在取瓦片坐标时才发现,这种地图是最难取的),之前的版本对交错地图支持有限,还需要修改引擎,我使用的3.9在使用过程中,没有碰到相关问题;
编辑器支持三种地图,普通地图(直90°) 、 斜45°地图 、 斜45°交错地图。区别如下:
(1)普通地图(直90°)
(2)斜45°地图
(3)斜45°交错地图
瓦片地图坐标系
瓦片地图的坐标系为:
原点:在左上角。
单位:瓦片数量。
X轴正方向:从左到右。
Y轴正方向:从上到下。
例如:对于一个 10*10 的瓦片地图文件的坐标系统为:(0, 0)左上角、(9, 9)右下角。
PS:具体坐标表示,已在上面的几幅图中标出。
另外,在地图编辑器中,其实也已经标出了瓦片的坐标。
鼠标移动到某瓦片格子上,左下角就会显示格子的坐标,以及所使用的瓦片素材的GID。
2、导入素材
导入后如图:
3、制作地图
3.1 地图设计使用3层:
第一层ground是背景层,用于放置最下面的地面;
第二层objects是对象层,用于放置房屋、墙、树等;
第三层blocks是阻隔碰撞层,用于判断是否可穿越;
npc等交互对象暂时还没有做,后续加入;
3.2 画地图
最后组合起来如图
这样地图已经准备完毕,可以在程序中使用了。
cocos2dx3.2开发 RPG《Flighting》(六)角色的状态和控制效果
一般来说,我们在做一个稍微有点智能的实体的时候都会用到状态机。这里我没有用到,但是我也为角色设置了几种状态。
如果大家看了上一节,也完成了角色的基本移动的话。对比过我一直说的《Battl...
cocos2d-x自制RPG游戏总结
cocos2d-x自制RPG游戏总结
RPG Map Editor 基本刷地图篇
Unity3d 插件 RPG Map EditorTile types 瓦片类型
Opaque tiles with no alpha 不透明图片、一般用作地面 Alpha tiles 透明图片,可以...
cocos creator RPG游戏的背景和节点添加
RPG游戏背景的添加,
创建一个background精灵节点
创建一个Script节点装载背景
在showmapJS文件中创建一个精灵 组件,将background添加进去
将组件showM...
Cocos2d-x 3.0
RPG 回合制游戏实战 (一)虚拟操作键(虚拟遥感)
为什么将虚拟操作键放在第一篇呢?原因很简单,就目前而言,几乎绝大多数IOS ,Android等智能手机RPG游戏都有虚拟键来控制主角的移动,攻击等操作。所以本游戏也不例外。
废话不多说,上代码来的实际...
最近自己写RPG,发现在角色对象运动上面还是可以运动到不少的以前数学知识(经理各种纠结的脑补),好久没有写博客了,趁热总结一下算法思路,免得自己过两天又忘了。...
&em&cocos&/em&2d-x完整&em&RPG&/em&游戏源代码(配套资源) 立即下载
上传者: 大拙男 时间:
综合评分: 3 积分/C币:5
&em&cocos&/em&2D-X源码分析之从&em&cocos&/em&2D-X学习OpenGL...
一、用python创建一个cocos2d-x-2.2.1工程
打开cmd命令行cd 到cocos2d-x-2.2.1\tools\project-creator目录:
我是一位非常狂热的玩家,可以说我的业余时间大部分都用在玩游戏上了。有一天,我突发奇想,决定自己也做一款游戏来试试。后来上网一查,发现市面上有非常多的游戏制作工具,但绝大多数需要美工和程序的基础。就在我...
&em&cocos&/em&2d-x自制&em&RPG&/em&游戏总结
实现童年梦想——&em&RPG&/em&游戏入门(&em&RPG制作&/em&大师使用教程)
C++&em&制作&/em&的&em&RPG&/em&游戏 立即下载
上传者: evil0angel 时间:
综合评分:...
没有更多推荐了,求助,小时候玩的超级玛丽忘了是什么版本得了。【超级马里奥吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:38,055贴子:
求助,小时候玩的超级玛丽忘了是什么版本得了。
我小时候在电脑上面玩过一款超级玛丽感觉特别好,我记得周围的环境就好像舞台剧一样,大树小草什么都像是木板支起来一样,战斗方式还能偷袭怪物,(有点像最终幻想13-2)让我记忆最深刻的是在一个后花园找到了一把锤子。
纸片马里奥吗?
游戏是纯英文的
当年玩这个各种迷路各种抓狂,但还是坚持玩,只不过最后要过桥到另一个地方,桥头有一堆英语,我就卡住了
按楼主的说法那就应该是纸片马里奥了 ,还有找到锤子的地方不是后花园
纸片玛利欧64
纸片马里奥64
优酷搜索霸气小超子,你看看是不是他玩得这个游戏
贴吧热议榜
使用签名档&&
保存至快速回贴【求助】小时候玩过一款超级玛丽。现在忘记叫什么名字了- -【超级马里奥吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:38,055贴子:
【求助】小时候玩过一款超级玛丽。现在忘记叫什么名字了- -
想问一下,FC上超级玛丽有个撑杆跳版本,衣服颜色是黑白的。请问那版马丽叫什麽名字?我想玩儿!谢谢!
撑杆跳……盗版吧
我有(但不确定我的ipad里是否有)如果有晚上我给你传
好啊。谢谢啊
怎么穿? 邮件么?
贴吧热议榜
使用签名档&&
保存至快速回贴还记得小时候打龙珠升级和马里奥小游戏的游戏机吗?多久没玩了?
弹珠台和小掌机,看完这些古玩掌机以后,你觉得哪个最好大金刚版的掌机,一台机子两个游戏,有谁玩过这款不?七龙珠武林大会版掌机,满满80后的回想!西部差人”款掌机,另有巨细两个屏幕,小摇杆算是个亮点!

我要回帖

更多关于 马里奥奥德赛版本 的文章

 

随机推荐