Flash游戏
Flash游戏(精选10篇)
Flash游戏 第1篇
Flash是一套制作动画和游戏等交互式产品的强有力的编辑软件。在动画短片、游戏开发、演示文稿、网页制作等领域, Flash都有很大的应用前景。
使用Flash, 可以将文字、图片、声音、视频等内容打包成SWF文件, 呈现给用户一个丰富多彩的动画世界。Flash不但可以使用绘图工具制作编辑各种动画元件, 而且还提供了脚本编程语言ActionScript, 可使用代码控制动画的生成和运动。
下面将使用Flash8.0的脚本语言, 开发一个比较简单的赛车游戏。分析了Flash的基本开发过程。对于开发更复杂的Flash程序也具有很好的启示作用。
2 赛车游戏
赛车游戏是一类交互性很强的游戏。玩家可以控制赛车的运动, 通过路面形状和路边景物的不断变化, 享受开车的惊险和刺激。
本游戏截图如图1所示。
界面中间是一条灰色的道路。路面上行驶的是赛车。道路两边都是绿地, 路的两侧每隔一定距离植有树木。下面是赛车速度表, 用于表示当前行进速度。有3个标签, 分别表示行进总里程、总时间、撞车次数。
游戏用键盘控制。上键-前进下键-刹车左键-左移右键-右移行驶到指定的里程后游戏结束。
3 解决问题
Flash动画由场景组成, 一个场景对应一组动画。场景中可以有很多帧, 一帧表示动画中的一幅画面。帧由各种元件组成, 元件是构成动画的基本元素, 可以是一个动画剪辑, 或一个按钮、或一个图形。简单一些的元件, 可以直接在屏幕上画, 复杂一些的可以使用图片表示。
本游戏主要有道路、绿地、树、赛车、速度表等元件。其中树和赛车使用导入图片。其他元件使用代码绘制。为了增强游戏的声音效果, 本程序还导入了汽车引擎声音和刹车声音两个WAV文件。使用Flash菜单文件-导入-导入到舞台可以将外部的素材, 如图片和声音等导入Flash中使用。
本游戏有两个场景, 一个为初始场景start, 另一个即主游戏场景game。每个场景都各有一帧。
初始场景start比较简单, 主要显示游戏名称, 下面放一个组合框, 由玩家选择行驶总里程。再下面放一个按钮, 单击此按钮进入游戏。
游戏场景game复杂一些。汽车速度表由一个黑色的圆盘, 上面有白色的刻度和数值, 和一个红色的指针构成。可以使用代码画出速度表。绿地就用绿色的矩形来表示。道路用两条线来表示道路的两边。对于直道, 这两条线就是下面宽, 上面窄的两条直线。对于弯道, 这两条线就变成向同一方向倾斜的曲线。通过路面形状由直道变弯道, 再由弯道变成直道的过程, 表示赛车在一条崎岖的路上不断前进。路边的树做为赛车行进的参照物, 不断变化坐标位置和大小, 同样表示了赛车的行驶过程。观察点始终固定在赛车处, 路面和路边的数会根据赛车的速度不同而连续变化。其他赛车根据速度的不同, 可能在本赛车的前方或后方出现, 要注意不要撞车, 撞车次数将会显示, 同时会停车。
路面形状、路边树的大小位置和赛车大小位置的变化构成了本游戏的主要动画。
先说树木的变化。在直道上, 树的坐标和长度宽度都是线性变化的。我们知道两点确定一条直线。所以只要确定了两点, 就可以通过公式算出该直线上的所有点。比如知道 (x1, y1) 和 (x2, y2) 这两点, 就可以通过直线的两点式
(y-y1) / (y2-y1) = (x-x1) / (x2-x1) 得到所有的点。
只要提供了树两点的纵坐标y和x, 就能算出给定的纵坐标y所对应的横坐标x。同理提供两点纵坐标y和宽度w, 纵坐标y和高度h, 也能通过两点式得到所有的宽和高。而纵坐标y则根据赛车速度变化而连续变化。
在弯道上, 也可以通过公式得到曲线上所有点。Flash中有一个画曲线的函数curveTo, 提供曲线的开始和结束点, 以及一个控制曲线弯曲程度的控制点, 就可以画出一条曲线。该曲线是一条二阶贝赛尔曲线。曲线公式为
其中x1, y1为曲线开始点, x2, y2为曲线控制点, x3, y3为曲线结束点。t是开始和结束点纵坐标或横坐标的差值的份数。比如y1和y3间差是300。则t应从0开始, 每次增加1/300, 一直变到1。
同样, 赛车的横纵坐标和长度、宽度也可以和道路相同的方式获得。
横坐标、纵坐标、宽度、高度都确定了, 就可以重新确定树和车的位置和大小了。这样一来, 动画也就形成了。
对于道路, 开始点和控制点都是固定不动的, 结束点的纵坐标也是固定的, 唯一变化的只有结束点的横坐标, 通过结束点横坐标变化而随时改变路的弯和直。何时产生弯道则是每行驶一段距离就随机产生一个弯道。每次道路结束点横坐标都会先逐渐变大, 然后再逐渐变小。这样直路就会逐渐变弯, 弯到一定程度再逐渐变直。道路结束点横坐标每变化一定数值, 都会相应改变赛车现有位置, 可以通过左右键来改变赛车位置。否则赛车位置变到路的边缘, 就会停车。
4 程序代码
画一个填充圆:
画速度表:
改变速度表数值:
给定曲线纵坐标, 求横坐标:
移动道路:
移动赛车:
处理键盘按键:
更新标签等操作:
5 结语
游戏开发完成后, 程序通过测试。该程序是一个简单的Flash版游戏范例, 希望对读者有所帮助。
摘要:使用Flash脚本语言ActionScript开发了一个简单有趣的赛车游戏, 介绍了Flash的相关开发技术和技巧, 对于开发类似或更复杂的程序也有一定的启示作用。
关键词:Flash,赛车游戏,ActionScript,动画
参考文献
Flash游戏 第2篇
标签:flash游戏开发 Flash实例教程 Flash Actionscript制作游戏 Flash高级技巧,
Flash制作物体弹跳电脑游戏,这是一种背景不动的一个物体可以弹跳,可以左右走动的小游戏。比较基础的游戏。在文章的最后提供所有演示的Flash源文件。
启动Flash,首先修改文档属性。
首先制作两个电影剪辑一个是背景,绘制一个矩形小块来当背景。加入AS为:stop(),让它开始就停止。
另外一个是运动的物体,给大家截图如下。
回到主场景,我们用Actionscript来实现其它效果。在主场景的第一帧直接加入下面代码:
xspeed = 0;
yspeed = 0;
max_yspeed = 16;
gravity = 1;
walk_speed = 4;
level = new Array();
_root.createEmptyMovieClip(“lev”, _root.getNextHighestDepth());
level[0] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
level[1] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[2] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[3] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[4] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[5] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1);
level[6] = new Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[7] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[8] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[9] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[10] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[11] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[12] = new Array(1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[13] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[14] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
for (y=0; y<=14; y++) {
for (x=0; x<=24; x++) {
if (level[y][x] != 0) {
place_brick = lev.attachMovie(“block”, “block_”+lev.getNextHighestDepth(), lev.getNextHighestDepth(), {_x:x*20+10, _y:y*20+10});
place_brick.gotoAndStop(level[y][x]);
}
}
}
_root.attachMovie(“player”, “player”, _root.getNextHighestDepth(), {_x:40, _y:40});
player.onEnterFrame. = function() {
yspeed += gravity;
if (yspeed>max_yspeed) {
yspeed = max_yspeed;
}
if (Key.isDown(Key.LEFT)) {
xspeed = -walk_speed;
}
if (Key.isDown(Key.RIGHT)) {
xspeed = walk_speed;
}
while (_root.lev.hitTest(this._x, this._y+this._height/2-1+yspeed, true)) {
yspeed--;
}
while (_root.lev.hitTest(this._x-this._width/2+1+xspeed, this._y, true)) {
xspeed++;
}
while (_root.lev.hitTest(this._x+this._width/2-1+xspeed, this._y, true)) {
xspeed--;
}
this._y += yspeed;
this._x += xspeed;
xspeed = 0;
};
上面代码实现的效果是会出现一幅不动的背景。效果如下。
然后把弹跳的物体放进来。
yspeed = 0;
max_yspeed = 16;
gravity = 1;
level = new Array();
_root.createEmptyMovieClip(“lev”, _root.getNextHighestDepth());
level[0] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
level[1] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[2] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[3] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[4] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[5] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1);
level[6] = new Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[7] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[8] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[9] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[10] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[11] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[12] = new Array(1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[13] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[14] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
for (y=0; y<=14; y++) {
for (x=0; x<=24; x++) {
if (level[y][x] != 0) {
place_brick = lev.attachMovie(“block”, “block_”+lev.getNextHighestDepth(), lev.getNextHighestDepth(), {_x:x*20+10, _y:y*20+10});
place_brick.gotoAndStop(level[y][x]);
}
}
}
_root.attachMovie(“player”, “player”, _root.getNextHighestDepth(), {_x:40, _y:40});
player.onEnterFrame. = function() {
yspeed += gravity;
if (yspeed>max_yspeed) {
yspeed = max_yspeed;
}
while (_root.lev.hitTest(this._x, this._y+this._height/2-1+yspeed, true)) {
yspeed--;
}
this._y += yspeed;
};
效果(一个静态背景,出现一个弹跳物体)
然后让物体能左右移动。
xspeed = 0;
yspeed = 0;
max_yspeed = 16;
gravity = 1;
walk_speed = 4;
level = new Array();
_root.createEmptyMovieClip(“lev”, _root.getNextHighestDepth());
level[0] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
level[1] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[2] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[3] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[4] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[5] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1);
level[6] = new Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[7] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[8] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[9] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[10] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[11] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[12] = new Array(1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[13] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[14] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
for (y=0; y<=14; y++) {
for (x=0; x<=24; x++) {
if (level[y][x] != 0) {
place_brick = lev.attachMovie(“block”, “block_”+lev.getNextHighestDepth(), lev.getNextHighestDepth(), {_x:x*20+10, _y:y*20+10});
place_brick.gotoAndStop(level[y][x]);
}
}
}
_root.attachMovie(“player”, “player”, _root.getNextHighestDepth(), {_x:40, _y:40});
player.onEnterFrame. = function() {
yspeed += gravity;
if (yspeed>max_yspeed) {
yspeed = max_yspeed;
}
if (Key.isDown(Key.LEFT)) {
xspeed = -walk_speed;
}
if (Key.isDown(Key.RIGHT)) {
xspeed = walk_speed;
}
while (_root.lev.hitTest(this._x, this._y+this._height/2-1+yspeed, true)) {
yspeed--;
}
while (_root.lev.hitTest(this._x-this._width/2+1+xspeed, this._y, true)) {
xspeed++;
}
while (_root.lev.hitTest(this._x+this._width/2-1+xspeed, this._y, true)) {
xspeed--;
}
this._y += yspeed;
this._x += xspeed;
xspeed = 0;
};
效果(这时按键盘左右方向键你可以看到效果)
最后让物体能够蹦起来啊!
xspeed = 0;
yspeed = 0;
max_yspeed = 16;
gravity = 1;
walk_speed = 4;
can_jump = false;
jump_power = 10;
jump_walk = true;
level = new Array();
_root.createEmptyMovieClip(“lev”, _root.getNextHighestDepth());
level[0] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
level[1] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[2] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[3] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[4] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[5] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1);
level[6] = new Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[7] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[8] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[9] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[10] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[11] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[12] = new Array(1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[13] = new Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
level[14] = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
for (y=0; y<=14; y++) {
for (x=0; x<=24; x++) {
if (level[y][x] != 0) {
place_brick = lev.attachMovie(“block”, “block_”+lev.getNextHighestDepth(), lev.getNextHighestDepth(), {_x:x*20+10, _y:y*20+10});
place_brick.gotoAndStop(level[y][x]);
}
}
}
_root.attachMovie(“player”, “player”, _root.getNextHighestDepth(), {_x:40, _y:40});
player.onEnterFrame. = function() {
if (Key.isDown(Key.LEFT)) {
if (jump_walk or can_jump) {
xspeed = -walk_speed;
}
}
if (Key.isDown(Key.RIGHT)) {
if (jump_walk or can_jump) {
xspeed = walk_speed;
}
}
if (Key.isDown(Key.SPACE) and can_jump) {
yspeed -= jump_power;
can_jump = false;
}
yspeed += gravity;
if (yspeed>max_yspeed) {
yspeed = max_yspeed;
}
while (_root.lev.hitTest(this._x, this._y+this._height/2-1+yspeed, true)) {
yspeed--;
can_jump = true;
}
while (_root.lev.hitTest(this._x-this._width/2+1+xspeed, this._y, true)) {
xspeed++;
}
while (_root.lev.hitTest(this._x+this._width/2-1+xspeed, this._y, true)) {
xspeed--;
}
while (_root.lev.hitTest(this._x, this._y-this._height/2+1+yspeed, true)) {
yspeed++;
}
this._y += yspeed;
this._x += xspeed;
if (jump_walk or can_jump) {
xspeed = 0;
}
};
最终效果(按左右方向键和空格键试试)
Flash游戏 第3篇
首先我们需要找到游戏的存档,flash的存档就是.sol文件。.sol文件,也就是flash的Cookie存储文件,与Cookie的功能类似。如网页flash游戏,它的存档文件就是.sol文件,保存游戏进度以及装备等信息。还有在线视频的网站,影片都以flash形式播放。保存的sol文件主要用来配置你在播放视频时的相关属性。不同网站,有的只有1个sol文件,有的则可以有五六个。
通常情况下,SharedObject 生成的数据文件存放于<系统盘>:\Documents and Settings\<用户名>\Application Data\Macromedia\Flash Player\#SharedObjects\<8字符随机目录>
然后,下面就是<网站域名>\<网站上的路径>\<对象名>.sol。值得一提的就是#localhost表是本地WebServer,localhost表示本地文件系统,如游戏ROBOKILL的存档位置C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#SharedObjects\SAZYMDER\localhost\robokill.sol(如图2)。
知道位置后就能通过拷贝来复制游戏进度了,首先备份整个\#SharedObjects文件夹,然后全部删除\#SharedObjects下面的文件,再次在光盘运行游戏,确认进度的具体位置,再次在电脑上运行一下游戏确认位置,再将备份中的进度覆盖就可以了,快试试吧。
试析Flash网络游戏设计 第4篇
关键词:动漫设计,互动,联网,Flash ActionScript工具软件,SQL数据库
Flash表现能力强大,导出文件小,适合游戏动画设计,其中的ActionScript可控制Flash动画,实现多种交互功能,通过键盘和鼠标的控制使游戏更方便互动[1],Flash player及其插件的高普及率较好的网页嵌入式,使其在网络游戏中具有一定的优势。
但是,Flash不能直接对数据库进行操作,这个方面限制了其在开发网络游戏过程中的内容更新域维护。
ASP.NET是新一代的动态网页实现技术,正在被广泛应用。因此,可以借助ASP.NET克服Flash无法与传统数据库互联的劣势,与之通信,完成网络游戏设计。
1 动画制作
游戏中通常需要精美的画面,如开场、过场和结束的动画故事、游戏中的打斗等,这个是Flash制作的优势。音乐和剧本选定之后,可以使用Flash补间动画,可较好设置一个动漫的情节和框架,如素材处理、声音与画面合成、镜头设计等。可以通过对象设计、镜头效果设计和镜头衔接设计来实现动画效果。
Flash动漫设计要有许多对象设计,以及对象组成的关键帧的设计。这类似于影片中的场景布置布局和角色的出现以及运动关键处的帧,这些关键帧也是动画的基础,是二维动画的原画。帧这些通常使用鸟瞰、俯视、平视、仰视以及倾斜关键帧画面处理。依据剧本要求,如以鸟瞰在天空中飞鸟的视角,用来表现壮观的场景概貌,展示游戏全景;以俯视从上往下看的视角,用来表现小孩、宠物等,展示对象显得卑微、弱小,充满着不自信或幼稚,以及视觉方的威胁的画面;以平视正常的视角,用来表现情侣、朋友,展示一种平等的关系;以仰视从下往上看的视角,向上看的视觉镜头,用来表现具有很强能量的人物或怪物,展示角色对象的力量;以倾斜镜以倾斜的视角,用来表示被遭受打击的失败者,展示一种局面不太好或即将到来的危机。
用过渡帧设计连贯的动画效果,运动轨迹使用传统的帧动画、动作补间动画、形状补间动画和骨骼,设置可分推、拉、摇、移、升(降)5种类型效果。设置镜头画面关键物品或人物设置为影片剪辑,舞台上的位置、大小等首尾帧的变化,根据剧情不停设置动画,同时通过缓动或是帧数多少定格动画的快、慢、停。如推镜头效果视觉目标纵向推进的效果,适合剧烈的感情变化,定格要展现的画面;拉镜头效果纵向退远的效果,适合有强烈的离开意识;摇镜头效果从场景的一个方向按左右或上下移到另一个方向,适合在观察、介绍;横移镜头是模仿人向前移动,适合运动中镜头;升降镜头效果视觉垂直位移适合机械化的角色对象或是在观察。
最后使用动画方法衔接镜头方式主要直截了当式衔接、遮罩式衔接淡人或淡出式衔接和溶人式衔接,根据剧本以及节奏不同选择。如直截了当式衔接,镜头直接切换,在前一关键帧之后,直接插入空白关键帧,适合节奏感比较快的;遮罩式衔接,屏幕上的亮点呈圆形或其他形状扩大,逐渐占据整个屏幕;在亮点层中的首关键帧绘制一个亮点形状,在尾帧中设置为与整个舞蹈大小位置一致的矩形设置亮点层为遮罩层,镜头画面层为被遮罩层。适合镜头逐渐铺陈的;淡人或淡出式衔接,从全黑的屏幕中逐渐地显现出来或是全黑屏幕逐渐显示出来,位于最上方的图层绘制矩形制作成影片剪辑覆盖整个舞台,设置Alpha从首帧100到尾帧0的补间动画。淡出则相反,适合有节奏韵律的;溶人式衔接,上一个镜头逐渐从完全可见到逐渐变得变淡,下一个镜头逐渐鲜明,将两个不同的镜头画面放在两个图层中,淡出镜头使用影片剪辑设置Alpha从首帧100到尾帧0的补间动画,淡入镜头使用影片剪辑设置Alpha从首帧0到尾帧100的补间动画,同时要求图层时间轴上重叠。适合镜头对比性强或者镜头极类似的。
2 ActionScript交互设计
游戏中通常需要对象的重复利用(如武器等)还需要和用户进行交互。Flash中的ActionScript采用AVM,事件机制采用的是监听的方式,需要触发器、监听器、执行器3种结构的。继承自相同的父类、结构和对象之间的关系通过封装,访问控制而得以确定快速、安全、可重用性高的交互游戏设计。
游戏设计对象是运动的,而且实时可控制变化,ActionScript提供了对于类的几种形式。Vector2D类:用于游戏中向量的长度、距离、角度、速度的计算判断两个向量是否相等等方法;Vehicle类:具有质量、最大速率等属性,结合Vecto r2D的实例来表示位移和速度,其update()方法,调用该方法可以使对象根据当前位移和速度求出新的位移,并更新与显示有关的x、y、rotation属性;SteeredVehicle类:设定以一定的速度一直移动,可以改变速度的大小和方向,具有搜寻、逃避、到达、追捕、躲避、漫游、规避、路径追随、群落等行为。设置对象如
设置好了对象,配合startDrag对象替代鼠标,如
使用ByteArray类复制对象,如
完成对象在游戏中展现设计,最后使用
结合不同参数,实现不同的动作反应。如
事件完成后使用remove EventListener()删除它,停止监听。
从而实现创建对象、使用对象和对象监听的一系列动作。实现游戏的互动。
3 Flash与SQL通信
没有数据库,就没有分数实时记录、用户信息的展示等信息内容,网络游戏就没有了实际意义,故此Flash与SQL通信势在必行。
对于网络游戏的数据库,通常包含了用户基本表和游戏信息表。而由于是Flash制作游戏,为Flash各类提供数据游戏表,包括各种对象的参数数据、各种模式的参数数据、路径的坐标数据、对象群的坐标数据等。以配合ActionScript提供了对于类的控制和调用。如对于a1对象就必须设置数据如速度、方向等。
Flash是无法和SQL直接通信,但是ASP.NET可以很好地分别与这两者通信,故使用asp.net作为中间桥梁,一方面可以利用ASP.NET的Web编程的强大优势,另一方面可以应用其与SQL的链接。由Flash向ASP.NET提交请求,ASP.NET根据请求对SQL进行操作后将结果返回给Flash,Flash以某种方式显示结果。
以游戏常用的用户登录模块为例。在SQL中建立用户基本表(Userinfo),包含3个字段:userid (主键)、username和userpwd。该网络游戏网站的Web.config文件中,添加连接字符串(stuconnstring),建立Register.aspx和Register.aspx.cs导入命名空间(System.Data.SqlClient)加载注册事件,建立Register.aspx与用户基本表(Userinfo)联系。代码如下:
在该网络游戏建立gameRegister.fla和gameRegister.as文件,建立两者联系,使用gameRegister.as设置与用户基本表(Userinfo)相对应表单以及触发事件按钮,代码如下:
gameRegister.as文件中键入设置其与Re gister.aspx的联系,从Register.aspx数据,须构造URLRequest对象用于指定被加载.aspx文件的路径,URLLoader对象用于加载URLRequest对象。gameRegister.as文件数据提交给Register.aspx,则只需参数添加到加载文件的路径中,就可以了。Flash调用类如下:
加载时设置路径导入代码如下:
经过上述分析ASP.NET的搭桥,Flash可以轻松读取SQL中的数据,对游戏数据表的关联也相同,于是游戏中要加载新的对象、添加新的属性,进行游戏数据实时更新就可以做到了,从而实现Flash网络游戏的数据通信。
4 结语
通过Flash原画设计出对象、角色,拼合出场景,用补间动画和逐帧动画进行镜头以及拼接设计流畅及完整动画使用对象,利用原画设计出对象转化为影片剪辑,以ActionScript根据需求不同设置类对象,使其可重用和键盘、鼠标交互控制。通过Flash与ASP.NET,ASP.NET与数据库的联系,设置网络游戏数据实时更新,以及游戏数据实时更新,完成动态、精美、实时的网络游戏设计。
参考文献
[1]Ktith Peters.Flash ActionScript 3.0动画高级教程[M].北京:人民邮电出版社,2010.
[2]adobe公司.Adobe flash action script 3.0中文版经典教程[M].北京:人民邮电出版社,2009.
flash8的游戏制作(地图篇) 第5篇
下面先介绍下关于地图的制作(本文章适合与对tiles模式了解并对flash8有一定了解的人)
过去制作游戏的时候,经常会为了切割地图而浪费时间.经常会为了地图过大.拖动过于耗机而烦恼.现在这一切都不成问题了.只要你掌握flash8 bitmapdata的基础运用既可.
这次改造后的地图采用导入整张地形图的方式,由as控制切割调用后生成整个map,再由flash切割调用给适当的场景.
效果如下(地图暂时采用随机模式,用方向键可控制地图的滚动.)
下面贴出代码:
import flash.display.BitmapData;
import flash.geom.*;
class _map {
var timeline:MovieClip;
var maps:Array;
var bg:MovieClip;
var tileBmd:BitmapData;
var mapBmd:BitmapData;
var bgBmd:BitmapData;
var tileStep:Number;
var tileCount:Number;
var tileRect:Rectangle;
var bgRect:Rectangle;
var width:Number;
var height:Number;
var x:Number;
var y:Number;
function _map(timeline:MovieClip, linkId:String, maps:Array, tileStep:Number, width:Number, height:Number) {
this.timeline = timeline;
this.width = width;
this.height = height;
this.x = 0;
this.y = 0;
timeline._x = (Stage.width-width)/2;
timeline._y = (Stage.height-height)/2;
bg = timeline.createEmptyMovieClip(“bg”, 0);
this.maps = maps;
//地图tile范围
tileRect = new Rectangle(0, 0, tileStep, tileStep);
bgRect = new Rectangle(0, 0, width, height);
//创建地图元素
tileBmd = BitmapData.loadBitmap(linkId);
this.tileStep = tileStep;
tileCount = tileBmd.width/tileStep;
//建立地图
build;
}
function build() {
mapBmd = new BitmapData(maps[0].length*tileStep, maps.length*tileStep, false, 0);
for (var y = 0; y
for (var x = 0; x
attach(0, x*tileStep, y*tileStep);
if (maps[y][x]0) {
attach(maps[y][x], x*tileStep, y*tileStep);
}
}
}
bgBmd = new BitmapData(width, height, false, 0);
bg.attachBitmap(bgBmd, 0);
bgBmd.copyPixels(mapBmd, bgBmd.rectangle, new Point(0, 0));
}
function attach(id:Number, x:Number, y:Number) {
var rect:Rectangle = tileRect.clone();
rect.y = Math.floor(id/tileCount)*tileStep;
rect.x = id%tileCount*tileStep;
mapBmd.copyPixels(tileBmd, rect, new Point(x, y));
}
function scroll() {
x = x<0 ? 0 : (x>(mapBmd.width-width) ? (mapBmd.width-width) : x);
y = y<0 ? 0 : (y>(mapBmd.height-height) ? (mapBmd.height-height) : y);
bgRect.x = x;
bgRect.y = y;
bgBmd.copyPixels(mapBmd, bgRect, new Point(0, 0));
}
Flash游戏 第6篇
1从游戏中来, 到游戏中去, 激发学生的兴趣
《FLASH游戏编程精品课程》是中专课程中综合能力要求比较高的课程, 要求学生既要有逻辑思维能力, 又要有Flash功底, 更需要一定的审美观念。学生如果对该课程没有兴趣, 一定是学不好的, 会导致越学越难, 学到后面大部分学生容易放弃学习的。怎么样才能激发学生的学习兴趣呢?
俗语说的好“兴趣是最好的老师”, 因此如何提高学生的学习兴趣是非常关键的。中专的学生普遍都喜欢玩游戏, 甚至有个别学生当初选读计算机专业就是以为学习计算机专业就能更好地玩游戏, 普遍的玩家心态都是要赢。因此我在上课时就抓住学生“要赢”的游戏心态, 课前导入就让学生尽情地去玩本次项目的游戏, 并且要求学生玩游戏过程中一定要认真去玩, 想方设法完成游戏任务。学生玩完游戏后, 先问学生游戏是否好玩, 是否有可以更完善的地方, 想不想自己开发游戏, 想不想自己开发个比这个游戏更好玩的小游戏, 在其他同学面前威风一下。抓住学生的好奇心、好胜心, 逐步引导学生分析编写游戏的技巧、游戏任务的过程以及游戏输赢的逻辑思维, 这样学生的思维得到了锻炼, 对游戏的逻辑才会理解的更加清楚。当学生深深被游戏吸引, 将学生玩游戏的兴趣慢慢引导转变为编写游戏的学习兴趣, 自然而然就激发学生对游戏编程的兴趣。当学生学习有兴趣了, 就要趁热打铁教学生如何设计场景, 如何设计任务角色, 如何使用编程语言让游戏实现起来。慢慢地, 学生就从玩游戏的角色转变到设计开发游戏的角色中去, 当学生设计出游戏时, 自己玩着自己开发的游戏时, 学生体会到了成功的喜悦, 进而更加喜欢上这门课程, 进行良性循环, 越学越有兴趣, 越学越好。
2化整为零, 循序渐进
成功正是一个化整为零、循序渐进的过程, 并非一蹴而就的坦途。比如一个普遍的现象:当大家对接受的任务太多, 太难时, 很多人容易颓废, 容易产生了焦虑心理, 进而选择暂时逃避, 明天再做吧。明日复明日, 一拖再拖, 最终完成不了。学生学习也是如此, 如果一开始也是给很重很难的学习任务, 学生就算有了兴趣, 也很难坚持学习下去。俄国大文豪托尔斯泰曾说过:“人要有生活的目标:一辈子的目标, 一个阶段的目标, 一年的目标, 一个月的目标, 一个星期的目标, 一天的目标, 一小时的目标, 一分钟的目标, 还得为大目标牺牲小目标。”为了不让学生放弃学习, 我将学习目标分解, 任务分成比较容易的小块, 化整为零, 降低任务难度, 通过完成一个又一个的小目标来不断激励学生, 逐一跨越, 最终完成整体目标。
《FLASH游戏编程精品课程》的游戏设计的确不容易, 学生学习起来是一个很艰难的过程, 如果一下子灌输太多东西, 学生就很容易跟不上教学的进度。所以在上课的时候, 我会将一个个项目进行化整为零, 将整体分解成一个个简单易懂的步骤或者环节, 学生掌握了一个步骤后再进入下一个环节。当所有步骤都学习完成后, 进行整合, 将这些步骤串联起来, 形成一个整体。学生在专业的学习中, 不会感受到项目的艰难, 觉得有深度的递进, 有挑战, 进而顺利地完成项目的设计。
3注重逻辑思维的培养
逻辑思维是借助于概念、判断、推理等思维形式所进行的思考活动, 是一种有条件、有步骤、有根据、渐进式的思维方式。游戏项目的完成, 需要很强的逻辑思维, 如果学生本身逻辑思维比较混乱, 就算在老师的指导下, 同学的帮助下勉强完成了游戏的设计, 一旦让他自己独立再设计其他游戏, 一定设计不出来。因此, 在游戏编程课中, 非常注重逻辑思维的培养, 培养方法有:
3.1培养思维敏捷性和灵活性。在游戏编程教学中要充分重视教材中例题和练习中实现的方式方法是多样的, 哪种才是最好的, 哪种才是比较容易编写出来的, 哪种才能让玩家知道如何玩的, 哪种方法实现起来比较容易等等。指导学生通过分析和对比, 拓宽思路, 选择最佳思维, 从而培养学生思维的敏捷性和灵活性。
3.2培养思维的广阔性和关联性。教学中注意相关知识之间的关联性, 可以培养思维的广阔性和深刻性。比如这个项目和前面的项目有哪些相似的地方, 哪些代码是可以重复使用的, 哪些代码可以借鉴使用的, 如何进行功能的复用等等。在《FLASH游戏编程精品课程》的讲解中, 引入思维导图进行讲解, 进一步让学生有更强的直观性和关联性, 进一步拓宽学生的思路, 培养思维的广阔性。
3.3培养思维的独立性, 鼓励思维创新。教学最终的目的是教会学生能够进行独立学习, 独立思考问题, 以后工作、学习遇到问题, 能够独立分析问题, 解决问题。当学生学习到了一定程度后, 需要开发学生的创新思维, 要让学生在新的编程中学会独立思考问题, 如何设计更好的游戏界面, 设计更好的游戏功能, 设计更复杂好玩的小游戏等等, 培养学生的思维独立性和思维创新性, 有助于学生的个人成长, 将来才有机会成为出色的游戏开发者。
通过激发学生学习兴趣, 恰当分解难度, 突出培养学生的逻辑思维, 使得学生对游戏编程课越来越喜欢, 并且期末的进行创造游戏的时候, 很多学生创造出很出色的游戏。
通过《FLASH游戏编程精品课程》的教学反思, 不断提高了该课程的教学效果, 将这个反思的策略应用于其他课程教学中, 也取得了很好的教学效果。
摘要:教师的成长=经验+反思, 通过不断的反思, 教师才能不断地成长。在《FLASH游戏编程精品课程》精品课程建设的三年中, 通过教学反思, 深刻意识到通过游戏导入能更加吸引学生的学习兴趣;通过将大的任务进行化整为零, 将目标进行分解, 降低目标难度, 更能循序渐进进行教学;通过培养独立思维和创新思维能力, 进一步提升了学生对课程的设计能力。通过教学反思, 提高了教学效果, 这个反思也适用于其他课程的教学。
关键词:教学反思,游戏,兴趣,化整为零,逻辑思维
参考文献
[1]王寰宇.教育探索[J].影响教师教学反思能力的因素研究.
[2]李淑文.教育理论与实践[J].论创新思维培养的方法.
Flash游戏 第7篇
关键词:Flash,课件,教学
在教学过程中, 我们可以充分利用计算机的交互性、多媒体性和智能性, 制作一些Flash游戏课件, 使练习和测验活动变得更加生动有趣, 从而提高学生的学习兴趣。本文使用脚本编程、按钮元件和动态文本, 来实现拖曳型游戏题的制作, 下面以英语课件为例来说明其制作过程。
一、课件介绍
本实例制作的是一个英语拖拽型游戏课件。课件运行时, 用户可以拖拽动物图片到标记了动物名称的虚线方框中。释放鼠标时, 如果是正确的位置, 图片就会停留在方框中, 同时文本框中显示“You’re right”;否则图片就会返回, 并且文本框中显示“Sorry, the position is wrong”。另外, 单击“重置”按钮, 可以重新做题。
二、课件制作过程
1. 制作元件
本课件中用到的按钮元件有“dog”“duck”“lion”和“重置”按钮, 影片剪辑有“movie-dog”“movie-duck”“movie-lion”和“area”, 其中“movie-dog”“movie-duck”“movie-lion”用于制作拖拽的对象, “area”用于制作拖放的区域。
(1) 新建Flash文档。单击“文件”菜单中的“新建”命令, 新建一个Flash文档, 设置影片大小为550430像素, 背景颜色为淡蓝色。
(2) 创建“bt-dog”按钮元件。按Ctrl+F8键, 在创建新元件对话框中输入名称“bt-dog”, 类型选择“按钮”。进入按钮编辑区, 选择“弹起”帧, 导入一张小狗图片“dog.jpg”。将图片分离, 并用“套索工具”删除白色背景, 再将处理后的图形组合。注意要将图形对齐编辑中心点。按照同样的方法, 制作小鸭、狮子的按钮元件“bt-duck”和“bt-lion”。
(3) 创建“重置”按钮, 进入元件编辑区, 制作一个颜色、大小变化的动态按钮。
(4) 创建“movie-dog”影片剪辑。按Ctrl+F8键, 在创建新元件对话框中输入名称“movie-dog”, 类型选择“影片剪辑”。进入影片编辑区, 从库中拖入按钮“bt-dog”, 并将其对齐中心点。同理, 制作影片剪辑“move-duck”和“move-lion”。
(5) 创建“area”影片剪辑, 进入影片编辑区, 用矩形工具绘制一个蓝色的虚线方框。
2. 设置课件界面
(1) 设置题目区域。单击场景按钮返回场景1中, 给图层1重命名“标题”, 在舞台上添加文本框, 输入题目文本。
(2) 制作动态文本框。新建图层2重命名为“文本框”。用文本工具在标题下方画一个文本框, 然后在“属性”面板中选择文本类型为“动态文本”, 字体Arial, 字体大小为15号, 文字颜色为红色, 变量为“show”。
(3) 设置对象的正确拖拽区域。新建图层3重命名为“正确位置”。从库中拖动三个影片剪辑“area”到舞台中, 适当调整大小并排列整齐在动态文本框的下方。选择第一个虚线方框, 在“属性”面板中的“实例名称”文本框中输入“areadog”, 并按回车键确定。同样设置另外2个虚线方框的实例名称为“areaduck”和“arealion”。
(4) 设置影片剪辑的实例名称。新建图层4, 重命名为“影片剪辑”。分别从库中拖动影片剪辑“movie-dog”“movie-duck”和“movie-lion”到虚线方框的下方。单击实例“movie-dog”, 在“属性”面板中输入实例名称“dog”, 并按回车键确定。同理, 设置实例“movie-duck”和实例“movie-lion”的实例名称分别为“duck”和“lion”。
(5) 新建图层5, 重命名为“按钮”, 从库中拖动按钮“重置”到舞台的下端。
3. 添加动作脚本代码
(1) 双击舞台中的实例“movie-dog”, 进入元件编辑区, 然后按F9键打开动作面板, 给实例“bt-dog”添加动作脚本代码如下:
实例“movie-duck”和“movie-lion”的代码与以上代码基本相同。只需要把它们的实例名称分别更换为“duck”和“lion”, 对象正确拖拽区域“area”的实例名称分别更换为“areaduck”和“arealion”即可。
Flash游戏 第8篇
1儿童英语教育游戏分析
1.1教育游戏的目标分析
儿童英语学习主要是培养学习兴趣、规范发音和形成良好的语音与语调, 并逐步让学生树立学习英语的自信心。因此, 作为教育游戏, 游戏目标应以儿童喜闻乐见的表现形式, 创设有效的学习情境, 通过学习者简易的操作和适当的关卡设计, 使学生在游戏的过程中轻松学习英语, 并在游戏的过程中通过积分等方式给予积极的鼓励与引导, 使得学生不断获得成功体验, 逐步树立学习英语自信心。同时, 使学生在游戏过程中有效锻炼反应能力和多感官协调能力, 实现娱教于乐、感官训练、情感体验以及高阶思维能力培养等目标。
1.2教育游戏的界面分析
教育游戏的界面应符合游戏的内容和玩家的心理特征。游戏页面要能有效地显示设定的内容, 整体上布局合理, 风格统一, 局部变换。色彩上应选用同一色系的不同颜色, 建议使用两种颜色和它们的过渡色, 同时避免使用对比度过大的颜色。根据游戏情景, 字形、字号、字体、间距、位置等文本设计要适当突出教学内容, 避免产生视觉混乱。因此, 《回家》游戏采用1024*768的屏幕, 整体采用环保绿色, 小车角色为枣红, 为了对比鲜明, 反应真实环境, 地面场景为青灰色。
1.3教育游戏的功能分析
教育游戏《回家》整体上要求稳定可靠、计时准确、积分无误、交互灵敏、界面友好。因此, 游戏主要包括计时功能、统分功能、随机产生单词功能和碰撞检测功能等。其中统分功能能够对游戏结果进行评估, 增强玩家的竞争意识, 产生情感体验。随机产生单词功能可避免儿童采取试探手段完成任务, 提高儿童探索欲望和好奇心理。碰撞检测功能可产生交互性, 增加用户体验, 《回家》游戏的碰撞检测主要有搜集垃圾、销毁垃圾和角色行走等。
2儿童英语教育游戏设计
2.1教育游戏的情景设计
《回家》游戏是为了培养儿童在学习英语中保护环境的习惯和树立“保护环境人人有责”的理念, 其游戏情景设计为:儿童在一定的时间内使用小车收集街道上带有英文单词的垃圾并且倒进垃圾箱后获得一定的积分奖励。游戏中的角色设定为小车, 场景设定为具有青灰色地面的街道。根据英文单词长短确定垃圾的大小, 角色收集到大小不同的垃圾并倒进垃圾箱可获得1-5个积分。游戏角色小车碰撞到地面上的垃圾后要求快速输入垃圾上的单词, 若输入单词正确则垃圾消失, 即收集垃圾成功, 弹出提示“表现真棒”, 否则, 提示“下次加油”。当小车在收集到一定量垃圾后, 比如可设置为10个, 弹出提示“小车已满”, 就要倒掉垃圾。当小车和垃圾箱碰撞后要求辨认垃圾箱上中文所对应的单词, 若辨认正确则小车里面的垃圾消失, 弹出提示“垃圾倾倒成功”, 获得积分, 否则, 提示“继续加油”。本次积分就是小车中所收集到的垃圾个数N* (1-5) , 其流程图如1所示。游戏要求在规定的时间内, 垃圾收集成功并倾倒成功可获得积分奖励。若超出规定的时间或收集不成功或倾倒不成功, 则提示闯关失败。
2.2教育游戏的总体设计
《回家》游戏结合儿童英语教学目标, 按照教学内容的难易程度、儿童的接受能力及游戏的交互性来选择单词, 按照单词的难易程度设计垃圾大小及分值, 营造循序渐进的游戏氛围。针对儿童活泼好动的性格特点和游戏的主题, 游戏场景设计采用体现环保主题的绿色调, 小车角色设计为枣红色的卡通造型, 界面布局分为计时区、游戏内容区、控制区和装饰区。计时区放置一个倒计时控件, 以数字形式实时显示游戏进程。游戏内容区是整个游戏的主体区域, 由多个方块组成, 每个方块都可响应鼠标单击操作的影片剪辑。控制区域包括游戏开始、退出和重玩等按钮。装饰区主要是起烘托作用的装饰性卡通元素。
3儿童英语教育游戏实现
3.1教育游戏的开发工具
目前, 教育游戏常用的开发工具和编程语言主要有Flash、Java、C/C++/C#、.Net、JSP、ASP、PHP等。综合儿童的生理和心理特征以及儿童英语教学的特点等方面, 本游戏考虑选择Flash CS 5作为开发工具, Photoshop CS6作为图像处理与制作工具, Action Script3.0作为脚本编程语言。
3.2教育游戏类的实现
《回家》游戏的互动部分采用面向对象的Action Script 3.0编程语言实现, 通过合理使用类编程, 实现程序的模块化, 提高程序的可扩展性。本游戏总共设计了分数类、垃圾箱类、垃圾类、英语单词类、小车类、声音类、时间类等7个核心类。分数类负责计算和显示角色销毁垃圾所获取的分数;垃圾箱类用来回收街道上的垃圾;英语单词类主要负责随机产生英语单词;垃圾类与英语单词类协作用来产生带有英语单词的垃圾;小车类负责回收各种垃圾;声音类主要是控制背景音乐的循环播放与停放;时间类则主要用于记录玩家的游戏时间。
3.3教育游戏的关键技术
游戏的关键技术主要有动作按钮设计、单词及反馈信息的接收、英语单词输入正误的判断和垃圾小车的控制移动以及信息反馈。动作按钮设计体现面向对象的特性, 通过按钮控制选择不同的游戏模块;单词及反馈信息的接收就是设置一个文本框, 能够及时接收学生所输入的单词及反馈信息;英语单词输入正误的判断就是在学生输入单词之后, 通过判断给出正确与错误的反应, 若输入正确, 页面会弹出“表现真棒”, 错误则弹出“下次加油”, 小车继续前行, 若输入错误5次, 系统会自动跳转至失败页面, 显示游戏结束;垃圾小车的控制移动以及信息反馈就是利用小车和垃圾以及垃圾箱的碰撞检测来收集垃圾并反馈信息。
4结论
教育游戏尝试将教育和游戏进行结合, 利用游戏的娱乐性以提高学习的兴趣和课堂教学质量。本文在分析游戏化学习理论和儿童学习特征的基础上, 探讨了Flash游戏开发的流程, 利用Flash的脚本语言AS3.0、项目管理开发软件Flash Develop4.3及XML语言开发了用于儿童英语教育的游戏。经过测试, 游戏界面美观, 功能完善, 达到了预期的目标。但还存在本地存储和随机显示单词等问题, 有待进一步研究。
摘要:为了提高儿童学习英语的兴趣和课堂教学质量, 本文分析了游戏化学习理论和儿童学习特征, 探讨了Flash游戏开发的流程, 利用Flash的脚本语言AS3.0、项目管理开发软件Flash Develop4.3及XML语言开发了一款用于儿童英语教育的游戏《回家》。经过测试, 游戏界面美观, 能实现声音的外部加载循环播放、随机产生英语单词、使用外部单词的更新, 对用Flash开发教育游戏作了一次有益的尝试, 具有一定的参考价值。
关键词:Flash游戏,儿童英语,教育游戏,设计,实现
参考文献
[1]魏鸿.小学英语记单词教育游戏的设计与实现[J].中国科教创新导刊, 2013, 33:68.
[2]王玉龙, 黄敏仪.基于Action Script3.0的小学英语单词教学游戏的设计与实现[J].中小学信息技术教育, 2014, 05:62-65.
Flash游戏 第9篇
一、通过生动游戏, 激发学生兴趣
由于Flash教学过程中, 由于其学习难度相对较大, 一旦初始学习过程中失去了学习积极性和动力, 会对今后的整体教学带来困难, 为此, 从初始教学开始, 寻找一种有趣的学习方式将会使整个flash教学变得更加易于接受。因此, 引入游戏应从第一节flash教学课堂中开始, 首先, 第一节课不可以急着介绍Flash软件相关工作界面以及如何使用各种面板等相关内容, 应先向学生展示一些生动精彩的Flash游戏实例。例如一些较为初级的益智游戏俄罗斯方块或连连看等, 通常来说, 学生对于这些游戏相对都很有兴趣。可以简要介绍一下这些游戏制作的背景以及制作人员的故事, 向学生灌输一些成功制作人的人生, 以鼓励学生向其学习, 以其作为榜样, 因而更有动力进行今后的flash学习。
此外, 当学生刚接触flash时可能由于不了解而产生一定的畏惧心理, 担心这门课会较难, 自己学不好。因此, 初介绍此门课时, 应考虑到学生对于网游、QQ的兴趣, 从此方面进行着手。例如制作一个相当简单的问候GIF动画, 而动画中下方的字幕可写成“某QQ名, 您好!”, 然后登录个人的QQ, 并将此动画设置为个人的自定义表情, 同时, 还可以发给其他的网友。这样一看就能够了解这是自己Diy且相当有特色。此时, 相信学生的兴趣已经调动了起来。此外, 不忘告诉学生, 此类的小动画可以轻松的通过flash制作而实现, 相信学生会更加有信心。这些生动形象的游戏将学生的兴趣激发出来, 为其今后进行flash制作的学习以及各种困难的克服都作了相当好的铺垫。
二、由简到难, 层层深入
由于中职生的文化基础相对较差, 理解及其分析能力也较低, 因而课堂教学过程无法做到一步到位, 而应当由简到难, 层层深入。当然, 这就要求进行游戏化教学时, 无论是游戏制作的难度还是深度都应当由简单到困难, 循序渐进。例如第一节课引入一个简单的QQ自定义动画, 而随着学科的逐渐深入, 所选flash游戏也应与之相应的进行深入。而讲运动引导层动画时, 鉴于教材所列举的实例为月球绕地球转动的动画。此动画的制作对初学者来说可能会较复杂。此时若使用一个课时来讲案例而学生再利用一个课时进行动画的制作则会降低学生的积极性, 学生筋疲力尽的同时还无法对运动引导层原理进行深入的理解。此时, 应当根据其特点, 先例举一个简单易懂的游戏案例。例如, 设置一幕网游人物持剑站在树下, 此时周围的树叶被风吹起且沿着一定的轨迹飘落至地。此时学生必然先被这些网游人物所吸引, 当其积极性调动起来后, 重点讲授网游中这些风吹落叶等细节的重要性以及如何制作这些动画效果进行讲解, 相信学生很愿意进行学习。
三、利用网络, 收集典型授课型游戏
进行Flash教学过程中, 应当充分利用网络的优势, 从中寻找一些同授课重点或难点相关的相对较为生动的游戏进行收集, 然后应用于课堂中来。例如, 让学生从教师所收集到得这些生动的同课堂授课相对接近的游戏flash中选择出自己感兴趣的, 愿意学习的一个, 让学生先试着对自己所选的flash游戏的制作过程进行分析并试着动手进行制作, 看其制作出来的效果同实例的差别之处在哪, 然后教师就其难点进行讲解, 引导学生自己动手制作出此flash动画, 相信其动力一定相当足, 当其自己制作出来之后, 其自信心必然进一步增加, 同时自主动手学习的动力也相应的增加。
四、竞赛式游戏教学, 为练习创造条件
当Flash动画教学进行一定课程之后, 根据教学的方案及重难点, 教师可以将之前所引用的游戏实例进行简易的改进, 进行升级版的制作, 及制作一个升级版地游戏, 其中学生每制作出来一个符合标准的游戏flash时, 获得一定程度的加分, 而且级别越高分数增加的程度也越高, 此时, 学生会通过这些升级版的flash制作而将其动画授课重难点进行不断的练习, 从而巩固其所学的知识并将其实现熟练的制作。相信通过此种方式, 学生的动手能力将会大幅度的提高, 教师的授课目的也达到了。
五、以游戏制作作为学期末的考核
学期末进行教学考核时, 可以事先利用互联网收集许多关于flash动画游戏, 应注意的是, 所收集的应当为综合性较强的、涵盖此学科相对较全面的flash游戏, 难度应当适当。以这样的方式作为学期末的考核具有相当明显的优势, 例如, 不同的学生进行抽签决定自己的试题, 避免了作弊的产生, 还增加了趣味性;学生积极性提高;最关键的是, 能够真正的对学生的掌握情况进行考核, 了解学生此门学科的把握情况。
总之, 游戏化教学的引入必然为flash教学课堂注入一定的新鲜感, 不过, 应当时刻谨记的是, 根据学生的具体情况进行分析和研究, 找到真正适合其学习的方法, 从而使授课更加高效。
参考文献
[1]张逸琴:《游戏引入策略在C语言算法教学中的应用》, 《广东技术师范学院学报》, 2006, (04) 。
[2]吴兵:《Flash游戏在课堂教学中的应用研究》, 《教学研究》, 2006, (12) 。
Flash游戏 第10篇
关键词:flash游戏,AS3.0技术,面向对象,游戏开发
1. 引言
Flash游戏是一种随网络兴起的游戏形式, 因其游戏简单、操作方便、无需安装、文件体积小等优点而深受广大网友欢迎。在网络图像、动画的传输上, Flash有着得天独厚的优势, Flash player及其插件的高普及率使得flash成为网页游戏开发者的宠儿。Flash技术包含一套可编程脚本解析器, 称为Action Script, 可以控制Flash动画, 实现多种交互功能, 成为了绝大多数小游戏开发的技术基础。
2. AS3.0的优势
Action Script3.0 (简称AS3.0) 是Flash新一代脚本语言, 是一个完全基本OOP的标准化面向对象语言。与以前的版本语言 (AS2.0) 相比, AS3代码更加模块化, 可读性更好, 扩展性更强, 并且新增了很多功能, 性能也大大地提高。主要体现在以下几个方面:
(1) 采用新一代虚拟机:在编译阶段, AS2采用的是AVM1 (Action Script Virtual Machine) , 而AS3采用的是AVM2。新一代虚拟机采用了OOP思想, 在执行速度上比起AVM1也快了10倍。相对于AS2运行出错需要花费大量时间排错的缺陷, AVM2还提供了异常处理机制, 与目前主流的编译器一样, 运行出错会输出错误提示, 工作效率大大提高。
(2) 代码规范化与标准化:AS3的事件机制采用的是监听的方式, 和AS2的On Clip Event不同, AS3里所有的事件都是需要触发器、监听器、执行器三种结构的, 这样做的好处就是使得这个语言得到很大程度的规范化与标准化。不像AS2, 由于编写不规范, 使得代码变得繁复难懂, 可读性差, 执行效率也大大降低。要特别说明的是, AS3的所有事件都直接继承event对象, 而event是直接继承自BOSS类object, 结构更加紧凑。所以在AS3中, 所有的事件都继承自相同的父类, 结构相同, 提高了重用性。
(3) 程序安全性提高:与以前的版本不同, AS3引入了封装的概念, 使得程序安全性大大提高, 各个对象之间的关系也通过封装, 访问控制而得以确定, 避免了不可靠的访问给程序带来的意外产生。
(4) 读取XML的优化:AS2时代对XML的存取仍然需要解析, 而AS3则创新地将XML也视作一个对象, 存取XML就像存取普通对象的属性一样方便, 可以采用访问标准对象中的属性的方式来访问节点。使用点表示法和XMLList方法, 便可以轻松获取信息, 无疑大大提高了效率。
3. 使用AS3.0开发flash游戏的具体实践
本文以“水手捕鱼”游戏开发为例, 探索使用AS3开发Flash游戏的实践过程。
3.1 游戏的功能分析
“水手捕鱼”游戏以几位水手商量出海捕鱼赚取金币的对话开始, 在航海地图中选择捕鱼海域, 之后选择角色, 进入捕鱼游戏主界面。游戏以五彩斑斓的海底世界为背景, 其中有各种海底生物自由游动, 玩家通过发射鱼炮进行捕鱼, 在限定的时间内使用限定的子弹数量, 达到既定的分数即为挑战成功。游戏要实现的主要功能如下:
(1) 游戏分为快速、简单、普通、达人四人模式, 每种模式的时间限制、分数限制、子弹限制各不同;
(2) 游戏的运行速度流畅, 画面清晰, 给玩家带来淋漓尽致的操作快感;
(3) 移动鼠标可以操作大炮的左右移动, 点击左键能够发射网炮, 按下空格键可以切换鱼炮的级别, 级别越高威力越大, 所耗子弹数越多;
(4) 呈现多种海洋生物自由游动, 每种生物的生命力不同, 分值也不同;
(5) 发射的鱼炮击中鱼后, 撒出鱼网, 鱼网覆盖范围内的鱼儿生命力会减小, 直到被降为零后被捕获;
(6) 除了自由游动的鱼之外, 还有鱼群鱼阵随机蜂拥而出。
3.2 游戏的设计分析
3.2.1“水手捕鱼”游戏软件的执行流程如图1所示:
3.2.2 游戏的关键技术实现
在“水手捕鱼”游戏中, 海洋生物的游动轨迹与出现概率、鱼炮的飞行轨迹、子弹杀伤力的级别属性设置等是游戏实现的关键技术。因此我们应用了AS3.0中几种特殊的类:
Vector2D类。二维向量类, 提供了向量的加法、减法、与标量的乘法、与标量的除法、取反、克隆、置0、求长度、求角度、设置长度、求两个向量距离、求两个向量点积、求两个向量叉乘、判断两个向量是否相等等方法。
Vehicle类。机车类, 具有质量、最大速率、位移、速度等属性, 其中位移和速度是向量, 用Vector2D的实例来表示。该类中有一个重要方法update () , 调用该方法可以使机车根据当前位移和速度求出新的位移, 并更新与显示有关的x、y、rotation属性。
Steered Vehicle类。转向机车类, 是Vehicle类的子类。Vehicle类的对象只能以一定的速度一直移动, Steered Vehicle类的对象可以改变速度的大小和方向, 具有搜寻、逃避、到达、追捕、躲避、漫游、规避、路径追随、群落等行为, 而且运动轨迹自然流畅。
在本游戏软件中, 我们编写的元件类有以下几个:
Fish类。代表鱼的类, 是各种具体鱼类的父类, 各种由FLASH生成的具体鱼类都继承Fish类。Fish类继承SteeredVehicle类, 因此具有代表各种转向行为的方法, 还具有鱼类型、游动形式、生命值、遵循路径编号等属性。
Bullet类。代表子弹的类, 继承Vehicle类, 因此会以恒定速度移动, 还具有代表杀伤力的属性。与FLASH中的子弹元件绑定。
Net类。代表鱼网的类, 具有代表杀伤力的属性, 与FLASH中的鱼网元件绑定。
Gun类。代表炮的类, 与FLASH中的炮元件绑定。其中的point To方法可使炮指向舞台上的指定点。
Coin类。是金币类Golden Coin和银币类Silver Coin的父类, 本身继承Vehicle类, 因此会以恒定速度移动, 从而使金银币飞向炮台。具有代表价值的属性。
Auto Vanish Text类。一个能在指定时间后自动消失的文本框类, 主要用于显示鱼被打死后由于杀死该鱼所得分数。
例如:Fish类的结构如下:
另外, 我们还编写了用于集中管理数据的类Data类。该类有常量、变量和方法, 全部都是静态的。常量有表示舞台高度和宽度的常量、代表各种模式编号的常量。变量主要用于容纳从data.xml文件中读入的数据, 这些数据包括各种鱼的参数数据、各种模式的参数数据、路径的坐标数据、鱼阵的坐标数据。方法只有一个get Random Fish Id, 用于取得一个代表鱼种类的整数, 这个整数的出现规律是按照fish Chances数组中的概率来分布的:
4. 使用AS3.0编程技术的亮点
(1) 在游戏中, 我们引入XML文件管理数据, 实现程序与数据之间的松耦合。鱼特征参数、模式特征参数、水手描述数据、鱼游动路径坐标数据、鱼阵坐标数据等都放在data.xml文件中, 使这些数据的增加、修改、删除都十分方便, 不需修改源代码也不需重新编译。
(2) 碰撞检测的技术突破。每一帧都需要进行鱼和子弹的碰撞检测, 用的是两重循环逐个检查的方法。如果在飞的子弹有m颗, 鱼有n条, 则算法的时间复杂度是O (mn) 量级的。在发现碰撞之后, 会释放渔网, 这时需要检测渔网与所有的鱼是否会发生碰撞。如果处理不好, 时间复杂度会变成O (mn2) 量级, 降低运行效率。为了控制时间复杂度, 在发现一次碰撞, 释放一个渔网之后, 马上退出上述的两重循环, 使时间复杂度控制在O (mn) +O (n) 即仍是O (mn) 量级。这样处理之后, 在一帧中最多只会释放一个渔网。
(3) 鱼的游动采用了人工智能范畴的转向行为算法。所采用的转向行为算法基于力学模型力作用于物体产生加速度, 加速度引起速度的逐渐改变, 因此速度不会骤然剧变, 从而鱼的游动能够平顺自然。
5. 结语
在游戏设计过程中, 我们领略了AS3.0强大的功能带来的独特魅力, 其封装性、灵活性给开发工作带来极大的便利, 也使得开发者在更多方面的发挥不受限制。随着网络的不断发展与电子产品的增多, Flash游戏在各种终端的普及率越来越高, 也使得AS技术的应用更加广泛, 在网页游戏开发的主流地位也进一步得以巩固。
参考文献
[1]Keith Peters.Flash ActionScript 3.0动画高级教程[M].苏金国等译.北京:人民邮电出版社, 2010.
[2]朱冬玲.用AS3和Java开发竞赛型多机游戏[J].福建电脑, 2012, 7.
[3]adobe公司.adobe flash action script 3.0中文版经典教程[M].北京:人民邮电出版社, 2009.
[4]王愉.付震蓬.罗慧.隋涌.flash互动游戏的开发与设计[J].北京印刷学院报, 2006.8.
Flash游戏
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


