使用JavaScript和Canvas开发游戏(四)
; @param xScroll x轴的全局滚动值
@param yScroll y轴的全局滚动值
*/
this.update = function (/**Number*/ dt, /**CanvasRenderingContext2D*/context, /**Number*/ xScroll, /**Number*/ yScroll)
{
this.x += dt * this.speed * this.xDirection;
this.y += dt * this.speed * this.yDirection;
if (this.x >= 450)
{
this.x = 450;
this.xDirection = -1;
}
else if (this.x <= 0)
{
this.x = 0;
this.xDirection = 1;
}
if (this.y >= 250)
{
this.y = 250;
this.yDirection = -1;
}
else if (this.y <= 0)
{
this.y = 0;
this.yDirection = 1;
}
}
}
Bounce.prototype = new VisualGameObject;
24 |
this .startupBounce = function (image) |
26 |
this .startupVisualGameObject(image, 0, 0, 0); |
37 |
this .update = function ( dt, context, xScroll, yScroll) |
39 |
this .x += dt * this .speed * this .xDirection; |
40 |
this .y += dt * this .speed * this .yDirection; |
65 |
Bounce.prototype = new VisualGameObject; |
Bounce是第二个应用类,它扩展了VisualGameObject类,并将把自己绘制到屏幕上。Bounce类会显示一幅在屏幕上反弹的图像,效果非常类似第一篇文章中举的例子。这个类是在前面所有类的基础上实现最终动画的关键。
startupBounce函数接受一幅图像,通过调用startupVisualGameObject来初始化这个基本的类。
/**
初始化对象
@return 对初始化对象的引用
*/
this.startupBounce = function(image)
{
this.startupVisualGameObject(image, 0, 0, 0);
return this;
}
5 |
this .startupBounce = function (image) |
7 |
this .startupVisualGameObject(image, 0, 0, 0); |
而update函数(将被GameObjectManager在渲染期间调用)会更新图像的位置,在图像到达画布边缘时反转方向。
/**
更新对象
@param dt 自上一帧绘制起经过的秒数
@param context 绘制上下文
@param xScroll x轴的全局滚动值
@param yScroll y轴的全局滚动值
*/
this.update = function (/**Number*/ dt, /**CanvasRenderingContext2D*/context, /**Number*/ xScroll, /**Number*/ yScroll)
{
this.x += dt * this.speed * this.xDirection;
this.y += dt * this.speed * this.yDirection;
if (this.x >= 450)
{
this.x = 450;
this.xDirection = -1;
}
else if (this.x <= 0)
{
this.x = 0;
this.xDirection = 1;
}
if (this.y >= 250)
{
this.y = 250;
this.yDirection = -1;
}
else if (this.y <= 0)
{
this.y = 0;
this.yDirection = 1;
}
}
}
08 |
this .update = function ( dt, context, xScroll, yScroll) |
10 |
this .x += dt * this .speed * this .xDirection; |
11 |
this .y += dt * this .speed * this .yDirection; |
就这些了。你可能会想,怎么没有与绘制这个对象有关的代码呢?相应的代码都在VisualGameObject类的draw函数中了。而且,由于VisualGameObject类扩展了GameObject类,所以我们知道每渲染一帧都会调用一次update和draw函数。Bounce类中的所有代码只跟让图像反弹有关,也就是修改变量x和y。
好啦,我们已经创建了一批类,基于这些类也实现了与第一个示例相同的效果。而有了这个框架,再创建游戏就不必因为绘制画布等底层逻辑以及管理游戏对象等问题而重复编码了。
看看示例Demo吧。http://webdemos.sourceforge.net/jsplatformer3/jsplatformer3.html
建议继续学习:
- 《部落冲突》的设计 (阅读:3674)
- Canvas学习教程 : Canvas介绍 (阅读:3178)
- 手机游戏设计初体验 (阅读:3166)
- 游戏多服务器架构的一点想法 (阅读:2916)
- 使用canvas绘制时钟 (阅读:2879)
- 使用JavaScript和Canvas开发游戏 (阅读:2757)
- HTML5 Canvas(画布)教程 (阅读:2630)
- 游戏程序守护进程-Windows版 (阅读:2580)
- 游戏动作感设计初探 (阅读:2528)
- 网络游戏的社会化 (阅读:2390)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习