RGPJS 教程之八 创造场景
开始画面
游戏画面
代码
<!DOCTYPE html>
<html>
<head>
<script src="rpg-beta-2.js"></script>
<script>
var rpg;
RPGJS.loadPath = "rpgjs/core/";
RPGJS.load({
plugins: ['title']
}, function() {
rpg = new Rpg("canvas_rpg"); var scene = new Scene_Title(rpg);
scene.onExit = function(init) {
if (!init) return;
rpg.loadMap('MAP009', {
tileset: 'forest.png',
autotiles: ['002-G_Shadow01.png', '002-G_Shadow01.png', '003-G_Ground01.png', '004-G_Ground02.png', '011-G2_Ground02.png'],
events: ['EV001'],
player: {
x: 12,
y: 20,
direction: 'up',
filename: '001-Fighter01.png'
}
}, loadMap); } }); function loadMap() {
rpg.bind("eventCall_save", function() {
rpg.save(1);
window.location.reload();
});
rpg.setScreenIn("Player");
} </script>
</head>
<body style="margin: 0; overflow: hidden; background-color: #000;">
<canvas id="canvas_rpg" width="640px" height="480px"></canvas>
</body>
</html>
plugin/title.js
function Title() {
}
Title.prototype = {
Core: {
},
Event: {
}
}
function Window_Title(rpg, parent) {
this.parent = Window;
var h = 50;
if (rpg.slotExist(1)) {
h = 115;
}
this.parent(rpg, parent, 200, h);
}
var p = Window_Title.prototype = new Window();
p.onLoad = function() {
var self = this;
this.setPosition(this.rpg.canvas.width / 2 - this.width / 2, this.rpg.canvas.height - this.height - 40);
this.setBackOpacity(0.5);
var w = 6, h = 1;
this.addCommand(5, 12, w, h, function() { self.scene.newGame(); } );
this.drawText(30, 35, "New Game", "18px Arial", "#FFF");
if (this.rpg.slotExist(1)) {
this.addCommand(5, 47, w, h, function() { self.scene.loadGame(); });
this.addCommand(5, 82, w, h, function() { self.scene.deleteSlot(); });
this.drawText(30, 70, "Load Game", "18px Arial", "#FFF");
this.drawText(30, 105, "Delete Save", "18px Arial", "#FFF");
}
this.selectable();
}
p.update = function() {
}
function Scene_Title(rpg) {
this.parent = Scene;
this.parent(rpg);
this.main();
}
var p = Scene_Title.prototype = new Scene();
p.newGame = function() {
var self = this;
new Effect(this).fadeOut(5, function() {
self.exit(true);
})
}
p.loadGame = function() {
var self = this;
new Effect(this).fadeOut(5, function() {
self.exit();
self.rpg.load(1, loadMap);
})
}
p.deleteSlot = function() {
this.rpg.deleteSlot(1);
this.window_title.commands = [];
this.window_title.refresh();
this.window_title.setSize(200, 50);
this.window_title.onLoad();
this.window_title.index = 0;
this.window_title.moveCursor();
}
p.main = function() {
this.drawBackground('title.png');
this.window_title = this.addWindow(Window_Title);
}
RGPJS 教程之八 创造场景的更多相关文章
- iOS Sprite Kit教程之滚动场景
iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26 植物大战僵尸 在图2.26中,用 ...
- 超详细实战教程丨多场景解析如何迁移Rancher Server
本文转自Rancher Labs 作者介绍 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营.拥有6年的云计算领域经验,经历了OpenStack到Kubernetes ...
- Cocos2d-x 3.0final 终结者系列教程06-Director和场景跳转
这些天互联网大事不少呀 1.逻辑思维分家(所谓合久必分,分久必合,实属正常.切行切珍惜吧) 2. 锤子手机开卖 (无论你买没买,反正我没买,作为多年Android开发的我深知说的亮点事实上在我看来都 ...
- ASP.NET MVC4 新手入门教程之八 ---8.向模式中添加验证
在这本部分会将验证逻辑添加到Movie模式,和你会确保验证规则执行任何时候用户试图创建或编辑使用该应用程序的一部电影. 保持事物的干练性 ASP.NET MVC 的核心设计信条之一是 DRY(”Don ...
- (Python基础教程之八)Python中的list操作
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- qtp:vbs基础教程
◎Vbs脚本编程简明教程之中的一个-为什么要使用Vbs? 在Windows中,学习计算机操作或许非常easy,可是非常多计算机工作是反复性劳动,比如你每周或许须要对一些计算机文件进行复制.粘贴.改名 ...
- Vbs 脚本编程简明教程之一
—为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...
- mybatis 教程(mybatis in action)
目录简介: 一:开发环境搭建二:以接口的方式编程 三:实现数据的增删改查 四:实现关联数据的查询 五:与spring3集成(附源码) 六:与Spring MVC 的集成 七:实现mybatis分页(源 ...
- VBS教程
Vbs是一种Windows脚本,它的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版),VBS是Visual Basic的的一个抽象子 ...
随机推荐
- LA 3695 Distant Galaxy
给出n个点的坐标(坐标均为正数),求最多有多少点能同在一个矩形的边界上. 题解里是构造了这样的几个数组,图中表示的很明白了. 首先枚举两条水平线,然后left[i]表示竖线i左边位于水平线上的点,on ...
- vector & array
private static const NUM_LOOPS:int = 15; public function VectorTest():void { var vector:Vector.<i ...
- linux内核值shmmax问题
问题:(rac安装过程中grid检测) Please run the following script on each node as "root" user to execut ...
- Android之Socket群组聊天
在这只做了一个简单的例子,没有用到数据库,思路就是客户端发送信息到服务器端,服务器端转发所有数据到客户端,校验服务器端发来消息是否是自己发出的,如果是自己发出的,则不显示自己的消息 贴一下Androi ...
- App中嵌入网页浏览器
TOWebViewController 插件 NSURL *url =[NSURL URLWithString:@"http://192.168.1.134:8180/Home/IndexP ...
- Symfony2 学习笔记之插件格式
一个bundle类似于其它框架中的插件,但是比插件表现更好.它跟其它框架最主要的不同是在Symfony2中所有东西都是bundle,包括核心框架功能和你写的所有应用程序代码.Symfony2中,bun ...
- suse10的网络配置(静态IP)
感觉跟fedora的差别还是蛮大的, 主要是配置文件的不同, 尤其是默认路由, 多了一个单独的文件ifroute-xxx suse10的网卡配置文件在/etc/sysconfig/network ...
- 阻塞、非阻塞的概念和select函数的阻塞功能
其它文档: http://www.cnitblog.com/zouzheng/archive/2010/11/25/71711.html (1)阻塞block 所谓阻塞方式block,顾名思义 ...
- 切换PS工具栏里的快捷键
工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取,可以在[常规]'快捷键[Ctrl]+[k]'里设置是否使用[Shift]切换) 其它快捷键: 矩形.椭圆选框工具[M] 裁剪工具[ ...
- nginx上传目录配置,禁止执行权限
我们经常会把网站的图片文件上传目录设置为只可上传文件但不能执行文件,就是要禁止执行权限,小编来给大家举一个上传目录配置,禁止执行权限方法,各位可参考. 如果不让有执行权限最简单的办法 代码如下 复制 ...