当前位置:文档之家› 开发Silverlight游戏教程

开发Silverlight游戏教程

开发Silverlight游戏教程
开发Silverlight游戏教程

(一)让物体动起来

来源:https://www.doczj.com/doc/ad4513862.html,作者:佚名时间:2009-7-17

序:自从QXGame(WPF GAME ENGINE)游戏引擎公布以来,受到很多朋友的热切关注,于是乎有了写教程的想法。那么从今天开始,我将带领大家一步一步的学会如何使用纯C#开发WPF/Silverlight游戏引擎,过程中我会尽量的开源,并对相关小技巧进行解释和介绍,比较复杂的算法原理我会给大家一条绝对可行的思路,至于如何处理这些复杂的算法,那是仁者见仁,智者见智了,或许您写的算法比我的更好呢。

多余的话不多说了,最后来句发自肺腑的话吧:本系列教程的书写编辑花费作者很多心血,没有功劳也有苦劳哇,所以请需要转载的朋友们用突出的字体或颜色标明在您的文章开头,您的大力支持是鼓励我不断写下去的动力。

前言:WPF/Silverlight矢量动画的描述我就不多说了,关于WPF/Silverlight与Flash的比较网上也是一堆一堆的,这里只想客观的告诉读者下面两点:

一、WPF开发的是桌面应用程序,自包括Vista在内以后的Windows系列操作系统均大量以之为主流图形工具,即将全面取代Winform,并且Windows 7将集成。NET3.5+框架,在当今Windows系列操作系统占据90%同类市场的现状下,这意味着什么呢?

二、Silverlight基于一个约4M左右的MINI型。NET框架,目前版本2.0,3.0的beta 英文版,从发展趋势看是绝对有与Flash抗衡并且在未来超越它的可能性。Silverlight的优势更表现在它可以用一切。NET语言例如C#,https://www.doczj.com/doc/ad4513862.html,,C++.NET等开发,拓展度与可以参与开发的人群远远高于只能用AS开发的FLASH.

转入正题,网上已经有很多关于如何创建WPF/Silverlight动画的教程,但是均为使用Blend工具制作,或直接写在xaml代码内的动画,这样往往造成很多朋友误以为其实WPF/Silverlight不就是MS的Flash?诚然,如果您真的像那些教程里说的去开发WPF /Silverlight程序,我个人觉得一点意义都没有。这样开发出来的东西根本就超越不了Flash,那何苦还要投入如此多的精力来学习它?

所以本系列教程将全方位的以纯C#程序语言进行动态创建一切可视化对象,从而构建出一个如QXGame(WPF GAME ENGINE)游戏引擎,这才是我本系列教程希望达到的目的。

(注:本教程使用的开发工具为Visual studio 2008 版本sp1)

好了,那么我首先介绍第一种动态创建动画的方法,这也是官方推荐的Storyboard动画。该类型动画您可以在网络上查阅相关资料进行了解,这里不累述了,那么我们直接进入主题:

首先我们新建一个WPF项目,接下来打开Window1.xaml进入视图代码编辑器,这里我们这样写:

xmlns="https://www.doczj.com/doc/ad4513862.html,/winfx/2006/xaml/presentation"

xmlns:x="https://www.doczj.com/doc/ad4513862.html,/winfx/2006/xaml" Title="WPFGame">

这段代码我创建了一个名叫Carrier的Canvas(画布)容器布局控件,并设置它的尺寸为800*600,背景银色,最后注册一个鼠标在它上面点击的事件。那么为什么要选择Canvas 作为容器呢?因为Canvas可以实现它内部的控件任意的绝对定位,可以很方便的处理物体的移动。

界面容器元素布局好了,那么接下来就动态创建物体对象了:

Rectangle rect;//创建一个方块作为演示对象

public Window1() {

InitializeComponent();

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Red);

rect.Width = 50;

rect.Height = 50;

rect.RadiusX = 5;

rect.RadiusY = 5;

Carrier.Children.Add(rect);

Canvas.SetLeft(rect, 0);

Canvas.SetTop(rect, 0);

}

这里我创建了一个50*50象素,圆角5*5红色的方块对象,并且将它作为子控件添加进Carrier 中,并且初始化它在Carrier中的位置:Canvas.SetLeft(rect,0);Canvas.SetTop(rect,0);

对象准备好了,那么接下来就是实现动画了。我们要实现的是鼠标点哪它就移动到哪:

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {//创建移动动画

Point p = e.GetPosition(Carrier);

Storyboard storyboard = new Storyboard();

//创建X轴方向动画

DoubleAnimation doubleAnimation = new DoubleAnimation(

Canvas.GetLeft(rect),

p.X,

new Duration(TimeSpan.FromMilliseconds(500))

Storyboard.SetTarget(doubleAnimation, rect);

Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)")); storyboard.Children.Add(doubleAnimation);

//创建Y轴方向动画

doubleAnimation = new DoubleAnimation(

Canvas.GetTop(rect),

p.Y,

new Duration(TimeSpan.FromMilliseconds(500))

);

Storyboard.SetTarget(doubleAnimation, rect);

Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)")); storyboard.Children.Add(doubleAnimation);

//将动画动态加载进资源内

if (!Resources.Contains("rectAnimation")) {

Resources.Add("rectAnimation", storyboard);

}

//动画播放

storyboard.Begin();

}

从上面代码我们可以看到,首先获取鼠标点击点相对于Carrier中的坐标位置p,然后创建故事板storyboard和Double类型动画doubleAnimation,doubleAnimation有3个参数,分别代表开始值,结束值,动画经历时间,接着通过Storyboard.SetTarget()和Storyboard.SetTargetProperty()分别设置动画的目标及要修改的动画目标属性,再下来将doubleAnimation添加进storyboard中,这样重复两次分别实现X轴和Y轴方向的动画。当这些处理完后,最后还需要将storyboard添加进Resources资源内,这样程序才能识别(将它去掉也同样可以通过编译,后面章节中才会用到它,这里只是提前做个说明)。一切就绪后,通过代码storyboard.Begin()来开始动画。

第二种方法,CompositionTarget动画,官方描述为:CompositionTarget对象可以根据每个帧回调来创建自定义动画。其实直接点,CompositionTarget创建的动画是基于每次界面刷新后触发的,与窗体刷新率保持一致,所以频率是固定的,很难人工介入控制。

那么如何使用它?xaml的界面代码还是和上一篇中描述的一样,这里不累述了。那么接下来就是创建对象并注册事件,全部代码如下:

Rectangle rect; //创建一个方块作为演示对象

double speed = 1; //设置移动速度

Point moveTo; //设置移动目标

public Window1() {

InitializeComponent();

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Red);

rect.Width = 50;

rect.Height = 50;

rect.RadiusX = 5;

rect.RadiusY = 5;

Carrier.Children.Add(rect);

Canvas.SetLeft(rect, 0);

Canvas.SetTop(rect, 0);

//注册界面刷新事件

CompositionTarget.Rendering += new EventHandler(Timer_Tick);

}

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

moveTo = e.GetPosition(Carrier);

}

CompositionTarget的注册事件方法为:

CompositionTarget.Rendering += new EventHandler(Timer_Tick);

因为我们要实现的是鼠标点哪方块就移动到哪,所以我用一个变量moveTo保存鼠标点击点的Point。并在鼠标左键事件中赋值:moveTo = e.GetPosition(Carrier);同时设置方块X,Y 方向的速度均为speed。

接下来就是实现Timer_Tick了,它是基于窗体的时时刷新事件。我们这样写:

private void Timer_Tick(object sender, EventArgs e) {

double rect_X = Canvas.GetLeft(rect);

double rect_Y = Canvas.GetTop(rect);

Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));

Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));

}

首先获取方块的X,Y位置,接下让方块的X,Y与moveTo的X,Y进行比较而判断是+speed还是-speed,这里的逻辑需要朋友们自行领会了。

好了Ctrl+F5测试一下,呵呵,是不是同样也动起来了呢?

可是大家会发现一个很大的问题:这方块移动得也太勉强了吧,抖来抖去的而且移动得也不平滑,是不是CompositionTarget有问题?其实不然,因为之前的Storyboard动画它不存在X,Y轴的速度,只需要设定起点和终点以及过程经历的时间就可以平滑的移动了,而CompositionTarget需要分别设定X,Y轴的速度,而我们这为了简单演示,X,Y 轴的速度speed均设置成了5,这在现实使用中是绝对不合理的。因此,如果要模拟实际效果,必须计算终点和起点的正切值Tan,然后再根据直线速度speed通过Tan值计算出speed_X,speed_Y,最后改写成:

Canvas.SetLeft(rect,rect_X + (rect_X < moveTo.X ?speed_X :-speed_X));

Canvas.SetTop(rect,rect_Y + (rect_Y < moveTo.Y ?speed_Y :-speed_Y));

这样才能实现真实的移动(具体算法就不讨论了)。

这一节讲解了如何使用CompositionTarget主界面刷新线程实现基于帧的动画,下一节我将讲解第三种动态创建动画的方法,并会对这三种方法进行一个归纳比较。

来源:https://www.doczj.com/doc/ad4513862.html,作者:佚名时间:2009-7-17

第三种方法,DispatcherTimer动画,该类型动画与CompositionTarget动画类似,是基于界面线程的逐帧动画,但他与CompositionTarget动画不同,DispatcherTimer动画可以轻松的进行参数设置:

xaml界面代码仍然沿用第一节的,那么接下来我们在后台代码中创建相关对象:

Rectangle rect; //创建一个方块作为演示对象

double speed = 5; //设置移动速度

Point moveTo; //设置移动目标

public Window3() {

InitializeComponent();

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Red);

rect.Width = 50;

rect.Height = 50;

rect.RadiusX = 5;

rect.RadiusY = 5;

Carrier.Children.Add(rect);

Canvas.SetLeft(rect, 0);

Canvas.SetTop(rect, 0);

//定义线程

DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);

dispatcherTimer.Tick += new EventHandler(Timer_Tick);

dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); //重复间隔

dispatcherTimer.Start();

}

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { moveTo = e.GetPosition(Carrier);

}

private void Timer_Tick(object sender, EventArgs e) {

double rect_X = Canvas.GetLeft(rect);

double rect_Y = Canvas.GetTop(rect);

Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));

Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));

}

与上一节的代码类似,不同的地方其实也就是声明动画线程处,共4句:

DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);

dispatcherTimer.Tick += new EventHandler(Timer_Tick);

dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50);

dispatcherTimer.Start();

第一句申明一个界面计时器DispatcherTimer ,并且设置其线程优先级别为Normal,这是标准设置,你可以根据你自己的需求进行更改,一共10个级别。

第二句注册Tick 事件,也就是计时器间隔触发的事件。

第三句设置Tick 事件的间隔,可以有很多方式,我使用的是TimeSpan.FromMilliseconds(),即间隔单位为毫秒。

第四句启动线程。

是不是很简单?这样的话可以很轻松的通过Interval 来控制刷新一个对象属性的频率了。接下来我们同样使用Ctrl+F5来测试一下成果。呵呵,结果和第二种动画方法是一样的,存在同样的问题,因为毕竟两种动画的原理是一致的。

那么到此,三种动态创建动画的方法都已经详细介绍过了,大家可能会有种感觉,比较钟情于第一种WPF/Silverlight推荐的Storyboard动画,既直观又方便使用,而且仿佛不易出错。其实这3种动画都有它特定的使用场合。

第一种动画适合创建简单的对象位移及直接性质的属性更改(在后面的教程中,我还将更深入的挖掘Storyboard动画的潜力,动态创建更复杂的基于KeyFrame的关键帧动画)。

第二种动画适合全局属性的时时更改,例如我们后面要讲到的敌人或NPC以及地图等全体性的相对位移及属性更改时就要用到它了。

第三种动画则非常适合运用在Spirit(角色)的个人动画中,例如角色的移动,战斗,施法等动作。

小结:前三节分别讲解了Storyboard动画,CompositionTarget动画,DispatcherTimer 动画,并横向分析了不同的场合对应不同的动画应用模式,这些将是构成WPF/Silverlight 游戏引擎的基础。

(四) 2D人物动画

通过前面的学习,我们掌握了如何动态创建物体移动动画,那么接下来我将介绍WPF中如何将物体换成2D游戏角色,并通过使用前面所讲的DispatcherTimer 计时器来实现2D人物角色的各种动作动画。

动态实现2D人物角色动画目前有两种主流方法,下面我会分别进行介绍。

第一种方法我称之为图片切换法,准备工作:首先通过3DMAX等工具3D渲染2D的方法制作出角色,然后将角色每个动作均导出8个方向每方向若干帧的系列图片(如果是有方向的魔法图片,很多2D-MMORPG往往会导出16个方向的系列帧图片以求更为逼真),即将每个人物每个动作的各方向的每帧均存成一张图片,如下图仅以从破天一剑游戏中提取的素材为例:

从上图可以看到,我将人物向右方跑步共8帧图片通过Photoshop分别将画布等比例扩大成150*150象素图片(因为是提取的素材,初始宽和高是不均衡值,所以必须扩大成自己的需求,这样人物会在图片中居中,并且为后期加入武器或坐骑留好余地。稍微的偏离也可以在后期进行微调),并将他们从开始到结束分别命名为0.png,1.png,2.png,3.png,4.png,5.png,6.png,7.png (这里还要顺带一提的是,图片最好背景 Alpha透明,否则在算法上还要进行去色,不是多此一举吗?至于为何是png而不是gif,我这里考虑到Silverlight

目前只支持png和 jpg,为了更多的通用性,当然如果您只用WPF,gif或png 均可)。最后在项目中我们新建一个文件夹取名叫Player,然后将这8张图片保存在该目录下,到此准备工作终于结束了,忽忽……还真够累的。

接下来就是重头戏了,如何通过纯C#来实现动态创建人物跑动动作动画呢?嘿嘿,且看下面代码。

int count = 1; Image Spirit;

public Window4() {

InitializeComponent();

Spirit = new Image();

Spirit.Width = 150;

Spirit.Height = 150;

Carrier.Children.Add(Spirit);

DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(150); dispatcherTimer.Start();

}private void dispatcherTimer_Tick(object sender, EventArgs e) { Spirit.Source = new BitmapImage((new Uri(@"Player\" + count + ".png", UriKind.Relative)));

count = count == 7 ? 0 : count + 1;

}

首先我们申明一个count变量用于记录当前切换到了哪张png图片了,接下来创建一个Image控件,取名叫Spirit,一看就知道它就是这节的主角啦,嘿嘿,写了那么多,主角终于要登场啦!

初始化后我们分别设置Spirit宽高各为150,并将之做为子控件添加进Carrier中,到此主角完成了登场过程。

接下来创建DispatcherTimer动画,相关内容可以查看第三节。

最后我们在dispatcherTimer_Tick事件中进行图片的切换操作:即设置每间隔150毫秒后Spirit的图片源为Player文件夹中的 count.png图片,设置完后如果count==7即已经到了最后一帧,那么count回到第一帧即count=0;否则count+=1,这是很容易理解的了。

好了,按下Ctrl+F5,嘿嘿,主角会跑动了。当然啦,目前只是原地跑步,但是已经向成功迈出了一大步,难到不是吗?

第二种方法我称之为图片截取法,准备工作:这里我以创建主角向右方向施法动画为例。首先需要将10帧150*150的图片通过Photoshop或其他方式合成为一张1500*150的大图,如下图:

从图上可以很清晰的看出主角的整个流畅的施法流程。接着,我将该文件取名叫PlayerMagic.png保存。然后在上一节中建立的Player文件夹上点鼠标右键->添加->现有项->找到PlayerMagic.png图片后并加入进Player文件夹。接下来的就是重点了,如何才能使该图片被WPF/Silverlight程序识别呢?我们可以在这张图片上点右键->属性,接着将以下两个属性①复制到输出目录->改为“始终复制”②生成操作->改为“嵌入到资源”,如下图:

这样,当我们编译完项目后,Player文件夹将包PlayerMagic.png文件一起发布在Bin或Debug文件夹中,此时 PlayerMagic.png才能轻松的被BitmapFrame.Create()方法所调用(在此,我要特别感谢雨恨云愁纠正本文之前所范的低级错误)。如下图:

O K,xaml代码仍旧和前面章节的一样,那么接下来就是后台C#代码了:

Image Spirit;

int count = 1;

public Window5() {

InitializeComponent();

Spirit = new Image();

Spirit.Width = 150;

Spirit.Height = 150;

Carrier.Children.Add(Spirit);

DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(150); dispatcherTimer.Start();

}

private void dispatcherTimer_Tick(object sender, EventArgs e) { Spirit.Source = cutImage("PlayerMagic.png", count * 150, 0, 150, 150); count = count == 9 ? 0 : count + 1;

}

///

/// 截取图片

///

/// 文件名(包括地址+扩展名)

/// 左上角点X

/// 左上角点Y

/// 截取的图片宽

/// 截取的图片高

/// 截取后图片数据源

private BitmapSource cutImage(string imgaddress, int x, int y, int width, int height) {

return new CroppedBitmap(

BitmapFrame.Create(new Uri(imgaddress, UriKind.Relative)),

new Int32Rect(x, y, width, height)

);

}

从上面代码可以看出前半部分和上一节的一样,这里就不累述了,精华就在后面的cutImage方法,该方法可谓集天地之精华,日月之灵气……扯远了,该方法的详细描述已经写在上面,大家可以慢慢体会应该不难。

有了该尚方宝剑,那么大家应该也多少有点感觉了吧,最后在dispatcherTimer_Tick方法中,我们即调用该方法实现时时的图片截取来循环生成动画,Ctrl+F5看看,呵呵,主角会放魔法啦!

(六)完美移动

经过前面的介绍和学习,我们分别掌握了如何点击鼠标让对象移动,并且实现2D人物的动作动画。那么,如何将两者完美的进行融合呢?这一节的内容将涉及到很多重要的技术及技巧,很关键哦。

那么同样的,前台xaml还是保持不变,接下来看后台C#第一部分:

int count = 0;Image Spirit;

Storyboard storyboard;

public Window6() {

InitializeComponent();

Spirit = new Image();

Spirit.Width = 150;

Spirit.Height = 150;

Carrier.Children.Add(Spirit);

Canvas.SetLeft(Spirit, 0);

Canvas.SetTop(Spirit, 0);

DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(150); dispatcherTimer.Start();

}

private void dispatcherTimer_Tick(object sender, EventArgs e) { Spirit.Source = new BitmapImage((new Uri(@"Player\" + count + ".png", UriKind.Relative)));

count = count == 7 ? 0 : count + 1;

}

上面代码基本上相对于前面几节没有太多改变,只是结合了第一节和第四节的内容。

那么再看C#第二部分:

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

Point p = e.GetPosition(Carrier);

Move(p);

}

private void Move(Point p) {

//创建移动动画

storyboard = new Storyboard();

//创建X轴方向动画

DoubleAnimation doubleAnimation = new DoubleAnimation(

Canvas.GetLeft(Spirit),

p.X,

new Duration(TimeSpan.FromSeconds(1))

);

Storyboard.SetTarget(doubleAnimation, Spirit);

Storyboard.SetTargetProperty(doubleAnimation, new

PropertyPath("(Canvas.Left)"));

storyboard.Children.Add(doubleAnimation);

//创建Y轴方向动画

doubleAnimation = new DoubleAnimation(

Canvas.GetTop(Spirit),

p.Y,

new Duration(TimeSpan.FromSeconds(1))

);

Storyboard.SetTarget(doubleAnimation, Spirit);

Storyboard.SetTargetProperty(doubleAnimation, new

PropertyPath("(Canvas.Top)"));

storyboard.Children.Add(doubleAnimation);

//将动画动态加载进资源内

if (!Resources.Contains("rectAnimation")) {

Resources.Add("rectAnimation", storyboard);

}

//动画播放

storyboard.Begin();

}

不难看出鼠标左键点击事件中Move()方法,该方法大家如果熟悉第一节的话将非常好理解,通过将这两段代码进行合成,即可以实现鼠标点哪主角就向哪移动,同时主角的动画始终保持为跑步状态。

那么该动画并非完美,存在以下3个问题:

一、主角始终为跑步状态,那么能否当主角移动到目的地后即变成站立状态呢?

of course,方法不要太多,这里我给大家一个小提示,例如我们可以dispatcherTimer_Tick事件中进行如下判断:

if (storyboard != null && storyboard.GetCurrentTime() == TimeSpan.FromSeconds(1)) {

TODO……

//主角的图片源切换成站立系列帧图片即可。

}

当然此方法只是N多方法之一。

二、主角定位的坐标始终处于图片的左上角,能否定位到主角的脚底,例如我鼠标点哪,主角移动到该处后脚的位置站在此点上,实现精确定位?

这其实并不难,涉及到一个图片定位算法问题,您需要设置一个Point Spirit_Position{get;set}属性来存储主角的坐标。并且该坐标的

Spirit_Position.X,Spirit_Position.Y值分别定位到主角的脚底,如下图:

然后在以后的调用中都使用该坐标来取代Canvas.getLeft(),Canvas.getTop()。

三、主角朝向如何实现8个方向,即往哪边跑就朝向哪边?

这就是典型的算法问题了,其实也很简单,根据主角移动的目标Target.X 和Target.Y分别与主角初始位置的Old.X和Old.Y进行一个角度计算,然后根据判断返回0-7(int),8个数字分别代表8个朝向,这样在Spirit.Source 设置时就调用相应角度的图片源系列帧即可。

到此,我们已经能够完美的实现角色的移动与停止等动画,接下来的章节我将就地图结构与主角在地图中的处理进行详细讲解,敬请关注。

(七) A*寻径算法

关于地图引擎方面的处理涉及到两个方面的知识:

1)地图的实现(包括地图的切割、合成、呈现方式等)

2)地图物件的实现(包括地图中实现寻路、遮罩、传送点等)

为了让大家能更加有兴趣深入后面的知识,我选择先从地图寻路开始讲解吧:

目前游戏中的寻路最经典的莫过于A*(A Star)寻路了,它是一种寻路思维的合集,那么基于它产生的算法则又有多种,例如曼哈顿启发式算法、对角线取径算法、欧几里德几何算法、最大取值算法等等,不同的算法产生的效果不同:如计算出路径需要的总时间,得到的路径长短优劣等,并且参数的不同也将导致结果的大异。我借助国外一位牛人的A*寻径工具(有兴趣的朋友可以在https://www.doczj.com/doc/ad4513862.html,/csharp/csharp/cs_misc/designtechniques/articl e.php/c12527/中找到相关资源),分别通过对各种路径使用各种A*算法来寻径,最终通过花费时间和路径的优美性进行了横向与纵向的比较评分,得出速度最快的算法:曼哈顿启发式算法。它在所有的包括就算九曲十八弯的复杂路径计算中均能表现极其优异的速率,下图为测试的部分截图:

图中棕色格子代表障碍物,起点位于左上角,终点在中间的红色边框格子,蓝色格子代表找到的路径。从图中右下角可以看到,就算如此复杂的充满分支的迷宫中仍可以在3毫秒中找到最佳路径,这是极其优异的。那么很多朋友看到这可能会感觉如此复杂的程序,哪是一般人能写出来的?其实说难还是有一些难度的,但是幸运的是,我们的同胞已经将一篇入门文章翻译出来了,我看了一下很不错,该翻译文章地址如下(看该文章请有耐心不长不短,但是看完以后将有非常大的收获!):https://www.doczj.com/doc/ad4513862.html,/message.asp?TopicID=25439,那么我们该如何通过C#代码来实现曼哈顿A*呢?我抛砖引玉简单原理描述一下:从起点开始发散式的寻找周围8个点,通过各种条件筛选出最优的那个点,然后将此点再作为起点继续循环以上过程,最后我们得到的所有起点集合即为最终路径。是不是觉得不太难了?呵呵,那么大家动手写写吧!(大家完全可以参考我给大家的那位外国牛人写的程序,里面有源码,通过参考源码,相信大家花些时间完全可以轻易的实现自己的A*)

接着,我将自己写好的曼哈顿A*寻径所有代码封装在QX.Game.PathFinder 这个命名空间中,那么到此才进入本文的关键,如何通过C#来模拟角色寻路:

首先当然是引用:using QX.Game.PathFinder;

接着我们初始化需要的变量:

Rectangle rect;private IPathFinder PathFinder = null;

private byte[,] Matrix = new byte[1024, 1024]; //寻路用二维矩阵

private int GridSize = 20; //单位格子大小

private System.Drawing.Point Start = System.Drawing.Point.Empty; //移动起点坐标

private System.Drawing.Point End = System.Drawing.Point.Empty; //移动终点坐标

这里要特别讲解一下GridSize这个变量,它定义了窗口坐标系中以多大一个尺寸来确定游戏坐标系的一个单元格(大家可以这样理解这两种不同的坐标系:假如游戏窗口大小为800*600像素,那么窗口坐标系中的(80,100)这个坐标,根据GridSize = 20来换算,在游戏坐标系中的坐标则为(80/20,100/20)=(4,5))。大家同时可以联想一下SLG类型游戏,人物处于的每个单元格都是由 N*N像素组成的方块,GridSize就相当于N了;而该格子在游戏坐标系中的显示坐标则为((N/20),(N/20)),这样应该很好理解了吧。这样根据不同的需要来使用GridSize对坐标系进行缩小(/GridSize)和放大(*GridSize)操作,从而可以非常方便的实现各种效果并且被不同的情况所调用,后面的内容及章节会涉及到相关知识。

那么接下来我们在窗体构造函数中初始化二维矩阵,代码如下:

public Window7() {

InitializeComponent();

ResetMatrix(); //初始化二维矩阵

}

private void ResetMatrix() {

for (int y = 0; y < Matrix.GetUpperBound(1); y++) {

for (int x = 0; x < Matrix.GetUpperBound(0); x++) {

//默认值可以通过(非障碍物)在矩阵中用1表示

Matrix[x, y] = 1;

}

}

//构建障碍物(举例)

for (int i = 0; i < 18; i++) {

//障碍物在矩阵中用0表示

Matrix[i, 12] = 0;

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Red);

rect.Width = GridSize;

rect.Height = GridSize;

Carrier.Children.Add(rect);

Canvas.SetLeft(rect, i * GridSize);

Canvas.SetTop(rect, 12 * GridSize);

}

//构建其他障碍物……(省略)

Start = new System.Drawing.Point(1, 1); //设置起点坐标

}

那么有了我们前面6节的知识基础并结合相应的注释,这些代码应该很容易可以接受。主要作用是定义起点,初始化矩阵中所有元素(默认都是可以通行的赋值1),然后我们可以设置些障碍物来测试我们寻径的效果,即根据需要将矩阵中需要变成障碍物的元素赋值0,这样我们就将所有的准备工作做好了。

最后就是如何实现寻径啦,代码如下:

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

Point p = e.GetPosition(Carrier);

int x = (int)p.X / GridSize;

int y = (int)p.Y / GridSize;

End = new System.Drawing.Point(x, y); //计算终点坐标

PathFinder = new PathFinderFast(Matrix);

PathFinder.Formula = HeuristicFormula.Manhattan; //使用我个人觉得最快的曼哈顿A*算法

PathFinder.SearchLimit = 2000; //即移动经过方块(20*20)不大于2000个(简单理解就是步数)

List path = PathFinder.FindPath(Start, End); //开始寻径

if (path == null) {

MessageBox.Show("路径不存在!");

} else {

string output = string.Empty;

for (int i = path.Count - 1; i >= 0; i--) {

output = string.Format(output

+ "{0}"

+ path[i].X.ToString()

+ "{1}"

+ path[i].Y.ToString()

+ "{2}",

"(", ",", ") ");

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Green);

rect.Width = GridSize;

rect.Height = GridSize;

Carrier.Children.Add(rect);

Canvas.SetLeft(rect, path[i].X * GridSize);

Canvas.SetTop(rect, path[i].Y * GridSize);

}

MessageBox.Show("路径坐标分别为:" + output);

}

}

这里我将鼠标左键点击的点作为寻径的动态终点,然后创建寻径类PathFinder,接着定义好参数后就可以通过 List path = PathFinder.FindPath(Start, End);来实现寻径了。最后通过MessageBox 将我们找到的路径点逐一打印出来,至此就完成了我们完美的曼哈顿A*寻径了。

上图为程序运行图,绿色代表找到的路径,红色代表障碍物,找到的路径同样如此的完美!是不是很有成就感?

有了这A*算法寻径类,可以说地图引擎就好比完成了一半不为过;那么下一节我将介绍如何通过此节获取的List path列表来实现按照此列表实现的动态关键帧动画,敬请期待。

(八)A*寻径动态动画

本节将紧接着上一节,在它的基础上实现鼠标点击动态创建完美的A*寻路动画。(模拟游戏中人物的真实移动,这次可是有障碍物的,可以说基本上完成了人物移动引擎的一半了呢)

首先,在上一节的代码前部分加入一个叫做player的圆形作为我们将要控制的对象(模拟游戏中的主角,下文均称之为“主角”):

Ellipse player = new Ellipse(); //用一个圆来模拟目标对象private void InitPlayer() {

player.Fill = new SolidColorBrush(Colors.Blue);

player.Width = GridSize;

player.Height = GridSize;

Carrier.Children.Add(player);

//开始位置(1,1)

Canvas.SetLeft(player, GridSize);

Canvas.SetTop(player, 5 * GridSize);

}

接下来,我们在窗体构造函数中加入InitPlayer()方法:

public Window8() {

InitializeComponent();

ResetMatrix(); //初始化二维矩阵

InitPlayer(); //初始化目标对象

}

如果大家对上一节的障碍物觉得还不过瘾,可以随便再添加,直到你觉得足够复杂来测试我们的A*动画,这里我也在上一节设定的障碍物基础上进行了一些改进,稍微复杂了些。那么我们直接进入本节的重点:如何实现鼠标点击窗体中任意点,实现主角从它当前位置移动到鼠标点击的点,并且幽雅平滑的通过A*用最短的路径越过所有的障碍物,这整个过程都是动态创建的,没有一点xaml 的痕迹,嘿嘿,小得意了一下呢。当然讲解之前还是请各位朋友先熟悉前面章节的动画原理,否则还是比较难理解的。接下来看看代码:

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

Point p = e.GetPosition(Carrier);

//进行坐标系缩小

int start_x = (int)Canvas.GetLeft(player) / GridSize;

int start_y = (int)Canvas.GetTop(player) / GridSize;

Start = new System.Drawing.Point(start_x, start_y); //设置起点坐标

int end_x = (int)p.X / GridSize;

int end_y = (int)p.Y / GridSize;

End = new System.Drawing.Point(end_x, end_y); //设置终点坐标

PathFinder = new PathFinderFast(Matrix);

PathFinder.Formula = HeuristicFormula.Manhattan; //使用我个人觉得最快的曼哈顿A*算法

List path = PathFinder.FindPath(Start, End); //开始寻径

if (path == null) {

MessageBox.Show("路径不存在!");

} else {

Point[] framePosition = new Point[path.Count]; //定义关键帧坐标集

for (int i = path.Count - 1; i >= 0; i--) {

//从起点开始以GridSize为单位,顺序填充关键帧坐标集,并进行坐标系放大

framePosition[path.Count - 1 - i] = new Point(path[i].X * GridSize, path[i].Y * GridSize);

}

//创建故事板

Storyboard storyboard = new Storyboard();

int cost = 100; //每移动一个小方格(20*20)花费100毫秒

//创建X轴方向逐帧动画

DoubleAnimationUsingKeyFrames keyFramesAnimationX = new DoubleAnimationUsingKeyFrames();

//总共花费时间 = path.Count * cost

keyFramesAnimationX.Duration = new

Duration(TimeSpan.FromMilliseconds(path.Count * cost));

Storyboard.SetTarget(keyFramesAnimationX, player);

Storyboard.SetTargetProperty(keyFramesAnimationX, new

PropertyPath("(Canvas.Left)"));

//创建Y轴方向逐帧动画

DoubleAnimationUsingKeyFrames keyFramesAnimationY = new DoubleAnimationUsingKeyFrames();

keyFramesAnimationY.Duration = new

Duration(TimeSpan.FromMilliseconds(path.Count * cost));

Storyboard.SetTarget(keyFramesAnimationY, player);

Storyboard.SetTargetProperty(keyFramesAnimationY, new

PropertyPath("(Canvas.Top)"));

for (int i = 0; i < framePosition.Count(); i++) {

//加入X轴方向的匀速关键帧

LinearDoubleKeyFrame keyFrame = new LinearDoubleKeyFrame(); keyFrame.Value = i == 0 ? Canvas.GetLeft(player) : framePosition[i].X; //平滑衔接动画

keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(cost * i));

keyFramesAnimationX.KeyFrames.Add(keyFrame);

//加入X轴方向的匀速关键帧

keyFrame = new LinearDoubleKeyFrame();

keyFrame.Value = i == 0 ? Canvas.GetTop(player) : framePosition[i].Y; keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(cost * i));

keyFramesAnimationY.KeyFrames.Add(keyFrame);

}

storyboard.Children.Add(keyFramesAnimationX);

storyboard.Children.Add(keyFramesAnimationY);

//添加进资源

if (!Resources.Contains("storyboard")) {

Resources.Add("storyboard", storyboard);

}

iPhone手机使用手册—“照片”操作说明

查看照片和视频删除照片和视频幻灯片显示共享照片和视频拷贝并粘贴照片和视频从电子邮件信息、彩信或网页存储图像将照片指定给联系人墙纸常见问题 iPhone手机使用手册—“照片”操作说明 iPhone 可让您随身携带照片,从而使您可以与家人、朋友和同事共享它们。在 iPhone 上查看照片,或者通过 AirPlay (IOS4.2)在使用 Apple TV 的电视机上查看它们。您可以从电脑同步照片和视频、查看用IPHONE拍摄的照片和视频、将照片用做墙纸,或者指定照片以识别来电的联系人。您还可以用电子邮件和彩信发送照片和视频,将照片和视频上传到MobileMe 画廊,以及打印照片。 【注】视频功能仅在 iPhone 3GS或新款机型上可用。 一、与电脑同步照片和视频 iTunes 可以使照片和视频与以下应用程序来同步: Mac: iPhoto 4.0.3(苹果电脑的图片管理软件,同步视频需要iPhoto 6.0.6或更新版本),或者 Aperture(apple公司图片处理软件,仅限照片) PC: Adobe Photoshop Elements 8.0或更高版本(仅限照片)。 您还可以从电脑上包含图像的任何文件夹同步照片和视频。 创建 iPhone 版本的视频 iPhone 支持 H.264 和 MPEG-4 视频格式(带 AAC 音频)。如果在将视频同步到 iPhone 时遇到问题,您可以使用 iTunes 创建一个 iPhone 版本的视频。 1、将视频拷贝到您的 iTunes 资料库。 2、在 iTunes 中,从“资料库”列表中选择“影片”,然后选择您想要同步的视频。 3、选取“高级”>“创建 iPod 或 iPhone 版本”。 二、查看照片和视频 您可以在“照片”中浏览从电脑上同步来的照片。您还可以查看使用 iPhone 的内建摄像头拍摄的照片和录制的视频。 使用 iPhone 拍摄的照片和视频、从电脑同步的照片和视频,或者从电子邮件或彩信存储的照片和视频可在“照片”中查看。如果使照片与 iPhoto 8.0(iLife 09 的一部分)或更高版本同步,则可以按您所识别的事件和面孔查看您的照片和视频。如果标记了位置数据,您还可以看到照片和视频的拍摄地点。 操作步骤: 1、在“照片”中,轻按相簿。轻按屏幕底部的按钮,以按事件、面孔或地点(如果适用)

Unity3D教程:游戏开发算法(一)

Unity3D教程:游戏开发算法(一) 要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 一、迭代法 迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:

(1)选一个方程的近似根,赋给变量x0; (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0; (3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为: 【算法】迭代法求方程的根 迭代算法也常用于求方程组的根,令X=(x0,x1,…,xn-1),设方程组为: xi=gi(X) (I=0,1,…,n-1),则求方程组根的迭代算法可描述如下: 【算法】迭代法求方程组的根

91手机助手For iPhone(苹果)详细使用教程

91手机助手For iPhone详细使用教程 91手机助手(iPhone版)是由网龙公司开发的一款PC端使用的iPhone手机第三方管理工具,以其美观的界面,方便的操作为一直以来iPhone手机没有方便的配套PC端使用工具提供了一套完美的解决方案,给您带来全新的操作体验。 91手机助手For iPhone 点击下载 一、91手机助手For iPhone版简介 91手机助手(iPhone版)是由网龙公司开发的一款PC端使用的iPhone手机第三方管理工具,以其美观的界面,方便的操作为一直以来iPhone手机没有方便的配套PC端使用工具提供了一套完美的解决方案,给您带来全新的操作体验。 iPhone版手机助手功能列表: 固件支持:iPhone 1.X | 2.X | 3.X |4.X 固件 ; 操作系统:支持32位和 64位的Windows XP / Vista / Windows 7 资料管理:联系人管理、电脑收发管理短信、定制日程、管理任务 媒体娱乐:轻松编辑设置手机铃声、手机主题、壁纸 阅读管理:几十万免费电子书在线/本地化管理;新闻RSS订阅等 软件管理:本地软件管理;海量手机软件免费安装 系统管理:系统信息查阅;进程管理;注册表管理等 备份还原:备份还原短信、通话记录、主题铃声、联系人等十几种信息 为什么要使用91手机助手? FREE/免费-都是免费的,91手机助手免费,软件游戏电子书也是免费的 轻松管理智能手机-还有什么比把智能机当傻瓜机玩更开心的呢? 海量资源尽情下载使用-真的是海量,几万手机软件,几十万电子书 完美个性体验-从界面到功能打造最安全最轻松的智能手机PC端管理工具

FLASH小游戏开发教程:游戏制作前的准备

FLASH游戏这东西吧,总入不了大流。国内拿FLASH做美术方面的应用比较多,而传统的游戏程序员又把FLASH当小儿科,不屑搞这个,事实上开发FLASH游戏也赚不了钱,七七八八的原因加起来,就变成了没多少职业程序员来开发FLASH游戏,学校也不会培养学生深入学习开发FLASH,搞这块的人少,人少交流讨论的也少,正正规规的教材也少,当然优秀作品更少。目前国内大部分的FLASH游戏开发爱好者没有好教材的指引,自己摸索着就上路了(我也是这样开始的),开发流程和习惯都是各人一套,很多人因为没有接受正确的学习而走了很多歪路(好像我也是)于是乎,话题转回来,我就开一贴跟菜鸟们多交流吧…… ================================================================= LESSON 1:游戏制作前的准备 突然灵光一闪:老子要做个XX类型游戏!于是立马打开电脑,打开FLASH,找图片,建元件,F9一按,代码蹭蹭的打啊……结果做了一半做不下去了。以上情况常常发生…… 做游戏首先脑子里先要有整个游戏的规划,最好是拿笔画个流程简图,然后再下手。游戏流程的规划是很重要的,我在做一个游戏游戏前,草稿纸上来来回回要打个半天的草稿才开工,我一直认为游戏的规划部分是很难的,如果真等到全部想好了,做起来其实是个很轻松的过程,只是耗时间罢了。理论知识多说没用……我们不如来实践下,跟我一起做个简单的游戏吧…… 【吃金币游戏-策划】(我在草稿纸头上写下以下几点) 基本描述: 1.天上掉宝物,地下小人物由自己控制,去接宝得分 2.时间限制30秒 写到这里,顺手画了张草图:

1.(游戏界面(UI)设计)课程标准

1.(游戏界面(UI)设计)课程标准

重庆工程学院 《游戏界面与UI设计》课程标准 课程代码: 2014030032 适用专业:数字媒体艺术 课程学时: 32学时 课程学分: 2分 编制人: 审核人: 审批人: 日期:

一、课程定位 《游戏界面与UI设计》是数字媒体艺术专业重要的基础课程,是一门集技术与艺术一体化的游戏基础学科,课程的设置面向职业岗位要求,职业岗位针对性较强,涉及的专业技能具有很强的专业性,其主要任务是培养学生的游戏设计的制作能力,使学生了解当今游戏设计制作的基本知识。 二、课程目标 1.总体目标: 《游戏界面与UI设计》是一门专业课很强的课程,它不仅要对学生的绘画技法有很强的针对性,还要对学生的平常生活中观察能力的培养。通过案例式教学,实现学生职业技能与工作岗位群的对接,促进本专业学生全面职业素质的养成。通过教学模式的创新、教学内容的选取,教学方法的改革培养学生在策划审美上有很强的审美能力的提高,还对自己在游戏策划创作中起到帮助的作用,为其它设计课程的学习以及将来的岗位工作打下良好的基础。 2.知识目标: 游戏界面与UI设计基础概念讲解、基础造型平面构成点线面的形式美原理、二维空间、三维空间、多维空间的造型表现、色彩构成基础知识与色环、色彩的表示、对比、彩度对比、明度对比、色彩调和、填色与色彩构成、色彩构成的综合应用等等知识。 3.能力目标: 让学生逐步地具有一定的游戏策划审美的能力,可以独立完成游戏策划的设计与制作,对各种游戏策划的要求都能处理。 素质目标: 游戏界面与UI设计课在整个教学的过程中,运用启发、引导和实践的方式,通过进行游戏造型设计基础知识点的逐步讲解并实例绘制

最新苹果iPad2使用说明书完整超详细

苹果iPad2平板电脑新手使用教程 有需求请下载,因为超详细 最近关于苹果最火的无非就是iPad2的发售,之前用过iPhone的朋友对iPad2的使用还算了解,但也有没用iPhone但入手iPad2的朋友,这样对苹果官方的套件iTunes就不是很熟悉了,小编有幸入手了一台iPad2,这里给刚入手iPad2但又不是很熟悉不太会用的朋友一个简单的初级入门iPad2使用教程。 什么是iTunes iTunes是苹果所有移动设备的PC套件,不管是iPod、iTouch、iPhone还是今天要说的iPad2,都要使用iTunes 来安装应用程序。 下载完毕后,安装好下载的iTunes,把iPad2用数据线连上电脑,iTunes就会识别了。 同步程序 因为现在iPad2的越狱还没有高人放出,大家只能花钱购买正版或者是免费的试玩版的游戏或者软件了。 注册好了之后,找到你喜欢的一个应用程序,比如我选的这个 点开之后是这个界面,然后点击这里的免费字样

然后就会显示正在下载 下载好了之后,在应用程序选项卡,就会看到刚刚下载的游戏。 这时点击设备中的应用程序选项卡,然后选中要同步的程序

接着点击右下角的同步字样,等待同步完毕即可。 这样就同步完毕之后就会在iPad2的桌面上看到刚刚下载的网球游戏了,QQ等其他一些免费的软件也是一样的道理。 下面是我用iPad2专用的QQ上的一些截图,看着确实很过瘾。

同步音乐 同步音乐其实也是很简单的,首先先把你电脑中要同步到iPad2中的音乐添加到iPad2的资料库中。 这样iPad2中的资料库的音乐标签里就会显示 然后找到设备中的音乐标签,选中要同步的音乐,

数字化教学游戏的设计与开发

XXXX学院毕业论文 论文题目 XXXXXXXXXXXXXX 系别 XXXXXXXXXXXXXX 班级 XXXXXXXXXXXXXX 姓名 XXXXXXXXXXXXXX 学号 XXXXXXXXXXXXXX 指导教师 XXXXXXXXXXXXXX 二○年

数字化教学游戏的设计与开发 摘要:随着计算机和网络技术突飞猛进的发展,数字化游戏已经继传统游戏之后逐渐成为人们,特别是青少年的主要娱乐方式,而在这一群体中有相当大的一部分是在校学生,随之而来的游戏依赖、游戏成瘾等等社会问题也已经达到了不容忽视的地步。面对这种情况,单纯靠禁止学生玩游戏等等打压的方式不但不能解决问题,而且还会引起学生的反抗情绪。真正治本的方法是将游戏所承载的教育价值挖掘出来,实现游戏与教育的融合。数字化教学游戏的开发和应用就是一个很好的实现此目标的方式。本文首先论述了游戏的教育价值和数字化教学游戏在国内外的研究状况以及存在的不足之处,然后以一堂小学英语课为例,分游戏的需要分析、教学设计、游戏设计、制作四个阶段论述了数字化教学游戏的开发过程,并在最后给出了几点应用建议。 关键词:数字化教学游戏,游戏与教育融合,教学游戏开发 Development of digital instructional games Abstract: With the rapid development of the computer and network technology, digital games, which is the substitute of the traditional games, has become modern people, especially young people’s most important entertainment .The young people who play digital games are largely composed of school students, which results in the digital games addiction that is so serious that can not be overlooked. Confronted with this situation, if we just forbid the students to play it, the result will be that we not only can not solve the problem, but also arouse objection from them. In my opinion, the best solution to this problem is the integration of digital games and education, which can be put into practice by the development and application of digital instructional games. First of all, this paper probes into the educational values of the digital games and the limitations of the research in the “digital games and education conformity” both at home and abroad. Then considering the needs of the digital instructional games for English teaching in primary school, I decide to design and develop such a game for them. My job is composed of for steps, that is, needs analysis, instructional design, game design and development. The last, I give some advice on how to use it in classroom teaching. Key words:Digital instructional games,Digital games and education conformity,Instructional games developing

基于Flash的游戏型物理课件的设计与开发

基于Flash的游戏型物理课件的设计与开发 发表时间:2019-08-08T11:49:51.110Z 来源:《防护工程》2019年9期作者:崔津铭邱诚益李齐 [导读] 从教学设计和游戏开发的角度出发,对促进中学物理学科教学的游戏型物理课件的设计与开发进行研究。 大连工业大学艺术与信息工程学院辽宁大连 116000 摘要:游戏化学习是把教育与游戏结合起来,通过教学设计将教学寓于游戏之中,利用游戏机制提供一种趣味性、生动性的学习环境。随着教育改革的不断深入、技术的进步以及游戏化学习理论的不断成熟和发展,把教育与游戏结合起来,推广绿色游戏和素质教育,实现以人为本的教育,将是以后研究的热点之一。同时,游戏型课件也将成为未来课件发展的方向。本文在对现有物理学科教学课件及其应用现状进行文献研究和系统分析的基础上,从教学设计和游戏开发的角度出发,对促进中学物理学科教学的游戏型物理课件的设计与开发进行研究。 关键词:游戏性课件;物理教学;flash 关于游戏与教育的研究,逐渐受到越来越多的人的关注,在理论与实践方面都取得了一定的成果,出现了不少优秀的教育游戏软件。但是,这些教育游戏软件的适用对象主要是幼儿和小学生,针对中学生和大学生的几乎没有。在内容方面,则主要集中在识字、小学数学,外语学习,打字练习等方面,而科学、历史地理、物理、化学、生物等科目方面的案例则很少。针对这一现象,本文主要探讨游戏与中学物理学科教学的结合问题。希望通过本论文的研究主题游戏型物理课件架起一座游戏与中学物理教学之间的桥梁。 一、物理教学中Flash游戏型教学课件应用的可行性分析 并不是所有学科、所有内容都适合通过游戏化方式学习。目前国内开发比较多的教育游戏类产品主要集中在小学语文、数学和英语等科目上。事实上,国外的经验表明游戏化学习方式更适合于那些需要探索,需要学生亲自去尝试、体验的教学内容,如物理、数学、生物等学科。美国著名的游戏设计师、教育专家Marc在他的书中列出了不同的学习内容所对应的学习活动及可以运用的游戏形式。对于初中的数学、物理、化学、语文、外语等主科的部分内容,地理、历史、信息技术等副科的部分内容来说,只要设计和开发出合适的游戏型课件并能正确使用,其效果都是非常明显的。 物理是一门实践性很强、与生活联系密切的学科,很多概念、规律等都可以有机的融入到游戏型课件中去。由麻省理工大学比较媒体研究所和微软公司联手组建的GGT项目开发了用于物理教学的几款数字化物理教学游戏原型,其中很多物理知识就非常成功的融入到了游戏之中。例如,关于牛顿力学的游戏中,游戏者使用能量补充方式来改变自己的速度、质量、加速度以及摩擦力,在游戏界面中偶尔落下的各种各样的物品中选择并拾取对应不同功能的物品以完成急需解决的子任务,游戏中学生必须面对那些在传统课堂练习中有一定难度的问题。游戏将教材中孤立学习内容综合成了一个有机体,游戏过程中的能量补充则又为学习者把这些内容所包含的子问题区别开来,从而帮助学生逐个解决它们、并且整体掌握学科知识。 二、flash游戏性课件在物理教学应用的优势分析 (一)激发学生兴趣 在游戏型物理课件中,通过虚拟故事情节的创建和具体游戏任务的呈现,可以提高学生学习物理的兴趣,特别是对提高直接兴趣和操作兴趣非常有效。人一旦对某种事物感到好奇,产生兴趣,他就会想方设法的去研究、去探索。桑代克和他的一些同事对一组智商都超过的儿童进行过研究,他们发现其中的每一个孩子都有一种永不满足的好奇心,而且这些好奇心根本无需外人的鼓励, “它们会象强烈的渴望、强烈的动力或强烈的需要那样自己表现出来 ”。游戏型物理课件则可以创造一种未知性和神秘感 ,游戏者无法预知游戏的结果,不知道下一个时刻会遇到什么场景、对手和挑战。这种不可预知性充分激起了学习者的好奇心,从而促使学习者在游戏规则内,通过不断的摸索、试误,逐渐找到游戏的技巧,获得游戏经验,在游戏中完成学习目标。 (二)培养观察能力 物理学家是通过观察和实验发现与认识物理世界的规律的,学生学习物理知识也基本上是类似的过程。学生任何一个物理概念的形成、物理规律的建立,几乎都是从观察入手的从观察中可以发掘问题,对观察所获得的感性材料可以进行推理、论证,并做出各种假设。游戏型物理课件可以提供一个很好的物理问题的观察环境。 (三)激发想象培养创新意识 不同于传统的课堂教学,在游戏活动中,游戏玩家学习者的灵活性、协调性、思维的抽象性与复杂性等可以得到锻炼和提高。同样,在游戏型物理课件中,学习者为了完成游戏任务,必须展开想象 ,充分利用游戏中提供的各种工具攻克各种关卡。因此,通过游戏型课件开展学习,对培养学习者的创新意识和开发学习者的潜能大有裨益。 在传统的教学方式中,教师在学生学习过程中处于主体地位,学生则是被动的接受知识 , 怎么学,学什么都是由教师决定。学生通过精心设计的flash游戏型物理课件学习则可以充分发挥学生的主动性,学生成为学习活动中的真正主体。例如,在游戏型课件中学生可以自主选择游戏的内容、场景,控制游戏的速度,决定游戏结束与否。通过自己的理解、探究,学生可以自主的解决游戏中出现的问题,实施解决问题的方法,完成游戏布置的任务,从而实现学习目标。从这点上看,游戏型物理课件所提供的教学方式与新课改中“倡导学生主动参与,交流、合作、探究等多种学习活动,改进学习方式,使学生真正成为学习的主人 ” 的目标完全吻合。 三、flash游戏型课程在物理教学中的应用方式分析 flash游戏型物理课件就是要将游戏与物理学科教学整合起来 ,通过物理教师设计开发或者选择合适的flash游戏型物理课件,让学生在活泼愉快的游戏情境中开展学习。将什么教学内容结合到游戏中去、采取什么样的游戏形式及怎么样运用到具体的教学实践中去等问题则必须考虑到具体的教学环境、教学目标、教学内容等。笔者认为,根据教学环节的不同,可以将flash游戏型课件与物理教学的结合模式分为以下几种内容引入模式、自主探究模式、练习加强模式和测试评价模式。 (一)内容导入模式 在教学史上,许多教学论专家对新课引入这一阶段都给予了必要的重视,并在自己的教学过程中充分发挥了它的作用。我国历史上的教育家孔子在《论语述而》中指出 “不愤不启,不徘不发”。学习时,学生心求通而尚未通,一谓之“愤 ”,口欲言而未能言,谓之 “徘 ”。就是

苹果Mac操作系统使用教程

Mac使用教程 Mac使用教程(基础篇) 如果您是计算机新手,或只是需要一些教学课程,帮助您将Mac的功能发挥到淋漓尽致,那么您就来对地方了。我们将带领您以最有效率的方式使用Mac。无论您想知道如何操作使用Mac桌面(或只是要知道什么是桌面)、找出连接打印机、iPod、数字相机或其他设备的方式、搜寻电子邮件和Internet、认识各种功能的操作方式、学习如何使用Mac随附的软件,或在无法得心应手地操作时需要协助指点,这种种问题的答案,我们都为您准备好了。准备好了吗?请把您的问题告诉我们:第一课:Mac基础操作如果您是初次接触计算机,才刚开始学习各项操作技巧,不用紧张,其实操作Mac不过就是靠一连串的点选动作。这一课将为您介绍与计算机界面互动的基本方式,也会教您如何在Mac上完成一些基本工作。让我们进入课程内容吧! 第一次使用Mac吗?那就从学习Mac基础操作开始吧!点点选选轻松操作如果您对Mac桌面和Finder视窗的操作不是很熟练,建议您从这里开始学起,如果已经很熟悉了,可以直接跳到“建立帐号”那部分。我们先来谈谈计算机操作的基本技巧。移动鼠标时(iBook或PowerBook的使用者是以手指在触

控式轨迹板上滑动),您会看到有个箭头(即光标)在屏幕上四处游移。您可以利用这个箭头选取或操作屏幕上的项目,像是选取档案、按下按钮、拖移滑杆等等。有时候在执行不同的操作或应用程式时,箭头会变成手、十字型、I型或其他图像。举例来说,如果您用Safari来浏览这个网页,并在网页上移动箭头,您会发现,当箭头移到文字或文字栏位(如Google文字框或URL栏位)上的时候,它会变成I型光标(有点像字母"I"的形状),通常这表示您可以与文字或栏位有所互动(例如输入或拷贝文字)。当箭头移到按钮或链接上,它会变成手的形状,告诉您这个项目可以点选。有时候Mac忙于工作时,箭头会暂时变成旋转中的彩色圆盘(有的Mac使用者称之为海滩球或风车),这代表某项工作正在执行中。 在您执行不同的工作或应用程式时,箭头(图中最左边)可能会以不同的样子出现。按一下鼠标(或触控式轨迹板按钮)可以选取箭头指向的项目。换句话说,如果箭头落在档案图像上,按一下即可选取该档案;如果箭头落在按钮或链接上,按一下可以启用该按钮或链接;要是落在文字栏位上,按一下可以反白该栏位并输入文字。对话框里出现蓝色按钮时(可参考“打印”或“储存”对话框),您可以按下Return键来选取该按钮,不一定要用鼠标。若想开启档案、档案夹或应用程式,请按两下鼠标按钮。通常您需要按两下Finder视窗或桌面上的项目才能将其开启,不过Dock里的项目除外,想开启Dock里的项目,按其图像一下即可。

经典游戏制作教程

经典游戏制作教程 peng 1.游戏制作的主要流程 ------------------------------------------------------------------------------- 电脑游戏开发小组中的任何一个人(这个角色通常有策划担任),只要有了一个新的想法或 念头,就孕育着一个新游戏的诞生。在这个创意被充分讨论之后,再加上对其操作过程的趣 味性及市场销售的可行性的预测等因素的准确判断,一个完整的策划方案才可能产生。在经 过充分的讨论后,策划人员必须将讨论的重点写成文字,也就是提出完整的策划方案,经决 策者同意认可后,才能进下一步的工作。这份策划方案就像一部电影的剧本,它必须完整地 涵盖整个游戏的故事、流程、内容、方式、游戏画面、角色造型、场景规划、人工智能、硬 件配备、市场评估等。对整个游戏过程的详细描述及实施规划都应记录在案。当进入创作 过程之后,策划还必须随时和美术设计师和程序设计员保持联系,以免游戏程序的编写失控。 策划应能对游戏设置的内容与精神了如指掌,与各个小组及时沟通,并且控制整个游戏制作 的进程。 2.游戏设计基本论 ------------------------------------------------------------------------------- 要设计一个游戏,首先你必须要确定几个重要方针,第一是你要设计的游戏是属於那一种 类型,第二是时代背景,第三是模式,第四是程式技术,第五是表现手法,第六是市场定位, 第七是研发时间,在掌握上述七个方针之後,你就可以再做详细的规划内容及调配资源,那 麽何谓是七项方针呢? 笔者以范例来说明之! 一、类型: 所谓的类型是指这个游戏所着眼的一个游戏方式,通过这个方式来使玩者达到娱乐的目的,这个游戏方式有专有名词来各别予以命名,兹如下述: (1) RGP角色扮演: 这个类型的游戏以通过故事剧情牵引来使玩家能溶入主角所存在的一个世界,这类型态的 游戏多半透过战斗升级系统及人物对话的方式来一步步完成设计者所布下的剧情路线,最具 代表的作品有日本史克威尔所设计的 "太空战士系列" 及国内大宇资讯所设计的"仙剑奇侠传",当然还有很多部作品例如"神奇传说"等也是此中的佼佼者。 在RGP的类型中,在近几年来又分支了几个类似的型态,例如说Blizzard的"暗黑破坏神"Dirblo"被定位为"动作RPG",因其动作成分相当高所至,而"神奇传说"、"超时空英雄传说"则被定位尽"战略RPG",只因战略成分比重较高所以又有别於传统RPG。 (2) SLG战略: 谈起战略游戏,大家最耳熟能详的应是日本光荣公司所出品的"三个系列",KOEI的三国 志风靡东亚,从一代进化到现阶段的六代皆为玩家们所津津乐道,而所谓的战略游戏则是透

游戏设计与制作专业教学计划

游戏设计与制作专业 一、培养目标 本专业培养拥护中国共产党的领导,热爱社会主义祖国,德、智、体、美等方面全面发展,具有职业道德与敬业创新精神, 熟悉国家信息产业的政策和法规,能适应游戏策划、游戏架构设计、游戏艺术设计与制作、游戏运营,以及手机游戏开发、网络游戏开发和游戏技术测试等相关岗位需要的高等应用性专门人才。 二、人才培养规格 游戏设计与制作专业毕业生要求具备必要的基本思想政治和科学文化素质,拥有专业的基本知识、理论和技术应用能力。 (一)基本素质要求 1.良好的思想政治和道德素质; 2.良好的科学文化和艺术素质; 3.良好的语言文字表达能力; 4.良好的团结协作和集体主义精神; 5.积极的进取、创新精神和创业意识; 6.遵守国家法律和多媒体行业规则; 7.健康的体魄和良好的心理素质。 (二) 专业知识和能力要求 1.具有熟练操作和使用计算机的能力; 2.具有熟练使用新型办公软件的能力; 3.具有较强的网络环境下信息处理能力; 4.具有一定的数字娱乐知识和设计能力; 5.具有游戏程序设计或游戏艺术设计能力; 6.具有一定的程序设计文档撰写能力; 7.具有从事相近专业工作和自主创业能力; 8.具有阅读本专业外语资料能力; 9.具有独立解决技术问题和不断创新的能力。 (三) 认证要求 本专业要求学生毕业前参加下列之一的认证考试: 1.人事部与信息产业部组织的计算机技术与软件专业技术资格(水平)考试,并达到多媒体应用制作员或多媒体应用设计师水平; 2. 北京汇众益智科技有限公司游戏学院认证证书

3.信息产业部游戏设计认证证书 4. 游戏程序设计方向的学生要求获得国际游戏开发教育联合会()认证证书 三、就业岗位群 游戏设计与制作专业毕业生可以适合于通信、网络、影视、广告、娱乐、图书出版等行业或公司,可从事手机游戏、网络游戏、电视互动游戏、游戏机游戏等游戏的策划、设计、编程、测试、运营、管理、营销工作;可以适合于政府机构、学校、游戏开发公司、游戏运营公司、通信运营公司、影视制作公司、动画设计公司、游戏网站、广告公司、报刊社等行业和部门,可从事二维和三维图像制作、宣传或招贴画绘制、动画美工制作、市场信息采集、市场营销和相关管理工作。主要工作岗位群包括:(一)游戏故事情节策划及相关工作; (二)游戏相关数值设计工作; (三)游戏关卡设计工作; (四)游戏数据结构与算法设计工作; (五)游戏软件工程的搭建工作; (六)游戏开发团队的组建工作; (七)手机游戏设计工作; (八)游戏引擎程序开发工作; (九)单机电脑游戏程序开发工作; (十)网络游戏客户端程序开发工作; (十一)网络游戏服务器端程序开发工作; (十二)网络游戏物理模型程序开发工作; (十三)网络游戏人工智能程序开发工作; (十四)游戏程序的调试与测试工作; (十五)模型及动画系统的实现工作; (十六)游戏美术制作相关工作; (十七)游戏图形系统的实现工作; (十八)网络动画美术的设计制作工作; (十九)三维动画设计与制作工作; (二十)游戏声音系统的实现工作; (二十一)游戏系统的实现工作; (二十二)游戏运营公司市场相关人员;

游戏开发教程

游戏开发教程-美术制作揭密 游戏美术似乎对很多门外汉来讲是比较神秘的。如果你不进入到这行业,即使你的美术再好,技术再精通,也很难理解其中的奥妙,希望本文能带给你一些启示。 游戏美术包含有许多方面,所以配合,协作是做好游戏的美术的首要因素。因为游戏是交互性非常强的项目,所以,美术其实要体现企化,程序所要表达的各种要素,这就对美术做出了非常多的限制。也要求美术与企划,程序要有很好的配合,才能做出一个很好的游戏。另外,由于一个游戏的内容很多,所以美术的分工也非常多,各个分工之间的配合,协调是很重要的因素。 游戏美术的分工 玩过游戏的人都知道,游戏中有几大部分,包括:地图,人物,界面,动画。另外还有肖像,图标,道具等相关因素。因为东西很多,就必须做一定的分工,保证各有专政。并且能提高工作效率。同时合理的分组能够使每个人的能力得到最大的提升。游戏工作组一般会分为地图组,人物组,平面组,动画组及特效组,每个组的人数不一样,一般来说地图组和人物组的人数会多一些,毕竟一个游戏的制作里面地图和人物占了绝大部分。另外平面组也是最重要的组成部分。而象动画组,特效组杂有些比较小的游戏工作组里面一般都是由这3个组里面的人来做。 每个小组都必须有个组长,这个组长除了技术不错之外,还必须有较强的流程控制和组协调能力,以及对企划思想的了解,有个比较形象的说法就是,宁愿要5个80分,不要3个100分加上2个60分。要尽量做到让玩游戏的人感觉不到图象是由好多人做出来的。 游戏美术的各个分工 这是游戏美术最重要的一个部分。上面讲过,游戏美术非常讲究合作,这种合作不只是和企划,程序之间的合作,更是美术各个部分之间的合作。 在开始制作前,美术就要和企划协调好,确定好整体风格,确定好俯视角度。一般有30度,45度,60度3种,其中45度又是最常用的。还有一些比较特殊的,比如横版(如街霸)及一些不是很固定的视角(比如《轩辕剑3》),确认角度包括地图的角度和人物的角度。确认完角度下来就是调节灯光,因为人物是在地图行走的,如果两者的明暗对比差别过大,会给玩家很怪的感觉,所以要调节好两者的关系。还要确定好人物和建筑的比例,是写实的还是Q版的,还是混合型的。大体的东西确认好以后才能进入美术的制作。 地图部分 地图制作按制作方法又可以分为图素拼图和整图制作。图素拼图指的是做出做出多块8方连续的各种小块的图,通过地图编辑器拼成一种大的地图,比如《帝国时代》,《剑侠情缘2》等,这种方法做出来的地图相对比较平淡,但是比较节省系统资源;整图制作,就是一个场景一次性建模渲染出来,比如《月影传说》《轩辕剑3》等,这种制作方法做出来的图相对丰富,真实漂亮,但是受机器的影响不能做太大的图。

iphone使用方法

Itunes 安装成功。 如何注册APPLE ID (iphone 软件下载账号) 注册iphone 账号的必备条件: 将itunes 在电脑上安装完成,能够正常运行; 需要用户有一个正常使用的Email (电子邮件地址) 步骤: 1,将itunes 安装成功后,双击打开,在主界面左侧面菜单栏中选择单击itunes store 打开页面在右侧找到免费应用软件,点击查看全部,选择需要的免费软件(点击‘免费’) 弹出创建APPLE ID 对话框; 2,点击 创建新账户 点击 继续 出现iphone 协议条款界面,选择 我已阅读并同意以上条款与条件,单击 继续 出现创建itunes store (APPLE ID) 账户界面按提示填写完成: 输入电子邮件地址:(例如:unicom33@https://www.doczj.com/doc/ad4513862.html, ) 为账号设置密码:********(此ID 密码必须由大写字母,小写字母,阿拉伯数字组成8位以上)再次输入密码进行确认,输入提示问题和答案(用汉语拼音例如:问题,wodemingzi ;答案,mingzi )输入用户出生日期,点击继续,进入提供付款方式界面,付款方式选择“无”输入用户姓名,称谓,地址,城市,邮编,省份,电话,点击继续进入验证您的账户界面,点击完成将链接文件发送至用户电子邮箱。 3,用户进入电子邮箱(与用户申请APPLE ID 地址相同)打开收到的APPLE 邮件点击 立 itunes 安装在电脑上,双击右面图标 在电脑上按提示进行安装,安装 完毕后如下图 如何下载itunes 软件 输入网址: https://www.doczj.com/doc/ad4513862.html,/itunes/download/ 显示界面

iphone4,ios7.0.4完美越狱超详细过程

iphone4,ios7.0.4完美越狱超详细过程 一.越狱须知:此次越狱支持运行iOS7.0.4系统的iphone4 二.越狱前步骤(这些都是必要步骤!必要!!!!不按操作后果自负) 1.备份手机数据() 2. (1)evasi0n越狱前请在设备请将设备的屏幕锁定设定为永不锁定。 具体操作:设置—>通用—>自动锁定—>永不 (2)将密码锁解开,等设备越狱后再设定。 具体操作:设置—>通用—>密码锁定—>关闭密码 3. 在使用evasi0n的过程中,避免运行一切和苹果设备及iTunes、以及第三方助手等相关的软件和任务。 4. 关闭360!!!!! 三、evasi0n 7 1.0.2 beta 完美越狱教程开始 1.下载后,将evasi0n右键解压打开,双击evasi0n7.exe 提示:如果越狱工具无法打开,或者打开会闪退,请右键以管理身份运行,如果不行建议更换电脑越狱。如果杀毒软件没有关闭,会跳出提示,将其设定为允许即可。 2.如图所示,将开机状态的iPhone4设备连接上电脑,evasi0n会自动设别你的设备,同时evasi0n上的jailbreak图标就变成可以点击的。点击按钮【jailbreak】,越狱工具会自动运行操作。 提示:刚开始“Retrieving remote package...”这个进度界面会较慢些,请耐心等待。

3.在出现“Rebooting device…”时,会有一次设备重启

4.然后进入如下界面“To continue,please unlock…”,这时请拿起您的iOS 设备,按HOME键,滑动解锁设备,找到如下图标evasi0n 7,点击它。

1password怎么用windows版iphone版使用教程

1password 怎么用windows 版+iphone 版使用教程 (阿香婆硬盘维护工具)Ashampoo HDD Controlv3.00.50 绿色便携版 类型:磁盘工具大小:18.8M 语言:中文评分:5.0 标签: 立即下载iOS8 升级后支持浏览器插件,1Password 终于可以直接在Safari 中使用了,这是很大的进步。1Password 一款国外的付费的,从来没正式进入中国进行推广的效率类应用在免费后,能冲进中区App Store 前10 名,实属罕见! windows 版1password 怎么用?1Password 有什么优势很简单,使用1Password 这个软件,你可以给每个不同的网站设置不同的登陆密码,而且每个网站的登陆密码你自己都不需要记住(可以设置的无比强大),让1Password 来帮你记住所有网站的密码。当然,你需要给1Password 来设置一个复杂的、并且要牢记的主密码,因为如果你忘了这个主密码就意味着你所有的网站都不能登陆。那么有人可能会问,让1Password 来帮助自己记密码,那么1Password 这个软件本身是安全的吗?答案自然是肯定的,1Password 会将你所有网站的登陆密码以你你在 1Password 中记录的信息保存在一个 经过高强度加密的文件里,即便1Password 的员工或者其他人得到

了这个文件,也必须要使用你设置的主密码才能解密,只要你不将主 密码泄露,那么就是非常安全的。当然,世界上没有100% 安全的密码,我们每个人都只是应该将安全风险降到最低而已。安装并配置 1Password(forMac )这 里我们使用Mac 版1Password 为例进行讲解,Windows 版本的使用方法也基本类似。首先,从1Password 官方网站下载30 天试用版本,或者直接从MacApPStore 中购买正式版本并安装。初次运行1Password 的界面如上图所示,如果你之前没有使用过〔Password,应该直接选择” NewDataFile (新建数据文件)”,以后你的密码数据都会保存在这个数据文件里面。如果你之前有使用过IPassword并且已经保存了数据,那么就应该选择” FindExisting (查找已有文件)”,这里我们只是向新用户介绍如何使用。点击” NewDataFile ”之后首先要给这个数据文件设置主密码,这个密码必须足够强大,而且一定要牢记的密码,并且必须输入密码提示(否则不能进入下一步)。设置主密码之后,你就已经成功建立一个数据文件了,虽然这个数据文件里还没有保存你的任何资料。下一步首先是让你输入主密码,只有输入主密码之后,才能查看数据文件里面的所有资料(包括你给其他网站设置的密码都会在这里面)由于是新用户,所以输入主密码进入之后你可以看到还没有任何 数据。不过先别急,我们还需要一点点 小配置。首先要做的是进入1Password 的偏好设置,Mac 用 户可以点击菜单栏的〔Password ------ Preferences,在“ General”

《3D游戏场景设计实训》课程标准

《3D游戏场景设计实训》课程标准 1. 概述 1.1课程的性质 本课程是软件技术(游戏软件技术)专业学生的专业必修课。理实一体的形式,逐步掌握基本的游戏开发知识和技能,在学习的过程中让学生磨砺意志、发展思维、陶冶情操、拓展视野、丰富生活经历、发展个性、提高人文素养。本课程对Unity3D引擎进行了全面、系统的讲解,从结构上主要分为3大部分:概论、引擎知识讲解以及实例制作讲解。概论主要针对游戏图像技术的发展以及当今游戏制作领域的主流引擎技术进行介绍,引擎知识讲解是针对Unity3D引擎的理论与实际操作进行全面系统的讲解;野外游戏场景和室内游戏场景两大实例的制作讲解带领大家学习利用Untiy3D引擎编辑器制作游戏场景的整体流程、方法和技巧。 1.2课程设计理念 1.面向专业学生,注重素质教育。 2.倡导活动教学,鼓励实际应用。 3.精选教学内容,重视学习过程。 4.突出学生主体,尊重个体差异。 5.利用现代技术,开发课程资源。 1.3课程开发思路 结合大学生身心发展的特点,将本课程目标定为“培养学生的专业高级技能运用能力”。以任务教学法、案例教学法、交流教学法、启发引导式教学为主,积极开发真实项目模拟教学法。这些教学方法充分体现了“自我学习”、“信息处理”、“与人交流”、“与人合作”、“解决问题”等学习、交流能力对大学生的要求。以分组形式、竞赛、课堂小组讨论为主。

2.课程目标 总体目标是培养学生的3d游戏场景设计能力,为学生的终身学习和身心健康发展奠定基础。Unity3d场景设计能力的形成建立在学生的游戏基础知识、编程能力、文化素养以及情感态度和学习策略等方面综合发展的基础之上。 2.1知识目标 掌握Unity3d工具的使用,场景的设置、角色的设置、UI界面、背包系统、角色运动路径、激光特效的制作、视图控制及游戏的操控设置等。 2.2素质目标 能在学习中主动请教,积极探索适合自己的学习方法。对3d游戏开发表现出积极性和初步的自信心,能在学习中积极与他人合作,互相帮助。能初步运用认知策略掌握知识和技能;初步运用调控策略监控、调整自己的情绪和行。能初步运用资源策略,合理利用周围环境,制定简单的学习计划,实现自管理,提高学习效率;初步运用交际策略,提游戏开发的能力。 2.3能力目标 能够熟练掌握游戏开发工具,能够设计相对复杂的3d游戏场景,包括模型的创建,模型导出与导入,地形创建,水,光,天空,落叶等,并能够设计野外和室内游戏场景。 3.课程内容和要求 根据专业课程目标和涵盖的工作任务要求,确定课程内容和要求,说明学生应获得的知识、技

android游戏开发教程

一章概述了Android 的历史,引出了本书其余部分将涉及的概念。现在你可能迫不及 待地想编写代码了。本章首先介绍使用Android SDK 开发应用程序的前提条件,学习安装开发环境。接下来,将逐步演示“Hello World!”应用程序,之后详细分析一个稍大型的应用程序。然后将解释Android 应用程序生命周期,最后简单讨论使用A VD (Android Virtual Devices ,Android 虚拟设备)调试应用程序。 要为Android 开发应用程序,需要JDK (Java SE Development Kit ,Java SE 开发工具包)、Android SDK 和一个开发环境。严格来讲,可以使用简单的文本编辑器开发应用程序,但本书将使用常见的Eclipse IDE 。Android SDK 需要JDK 5或更高版本(我们在示例中使用的是JDK 6)和Eclipse 3.3或更高版本(我们使用的是Eclipse 3.5,也叫Galileo )。本书使用Android SDK 2.0。 最后,为了使开发过程更加简单,需要使用ADT 。ADT 是一个Eclipse 插件,支持使用Eclipse IDE 开发Android 应用程序。实际上,本书中的所有示例都是结合使用Eclipse IDE 和ADT 工具开发的。 上

2.1 安装环境 21 2 2.1 安装环境 要开发Android 应用程序,需要建立一个开发环境。本节将介绍如何下载JDK 6、Eclipse IDE 、Android SDK 和ADT ,以及如何配置Eclipse 来开发Android 应用程序。 Android SDK 兼容Windows (Windows XP 、Windows Vista 和Windows 7)、Mac OS X (仅限英特尔平台)和Linux (仅限英特尔平台)。本章将展示如何为所有这些平台建立环境(对于Linux ,我们仅介绍Ubuntu 版本)。我们不会在其他章讨论与平台差异有关的细节。 2.1.1 下载JDK 6 首先需要的是JDK 。Android SDK 需要JDK 5或更高版本,我们使用JDK 6来开发本书中的示例。对于Windows 来说,从Sun 网站(https://www.doczj.com/doc/ad4513862.html,/javase/downloads/)下载JDK 6并安装。只需要JDK ,不需要其他程序包。对于Mac OS X 来说,从苹果公司网站(http://developer. https://www.doczj.com/doc/ad4513862.html,/java/download/)下载JDK ,选择适用于具体的Mac OS 版本的文件,然后安装。要安装JDK for Linux ,打开一个终端窗口并键入以下命令: sudo apt-get install sun-java6-jdk 这将安装JDK 及任何依赖关系,比如JRE (Java Runtime Environment ,Java 运行时环境)。 接下来,设置JAVA_HOME 环境变量以指向JDK 安装文件夹。在Windows XP 机器上,可以转到“开始”?“我的电脑”,右键单击并选择“属性”,选择“高级”选项卡,然后单击“环境变 量”。单击“新建”添加JAVA_HOME 变量,如果该变量已存在,单击“编辑”修改它。JAVA_HOME 的值类似于C:\Program Files\Java\jdk1.6.0_16。对于Windows Vista 和Windows 7,调出“ 环境变

相关主题
文本预览
相关文档 最新文档